/**
 * Storefront — Purchase Notification widget.
 *
 * Kartu social-proof yang berputar (bottom-left/right), fixed ke
 * viewport. Offset vertikal (`--pn-offset`) diatur oleh JS lewat
 * keputusan koordinasi dengan Floating Cart — lihat
 * storefront-float-coordination-spec.md §3.6.
 */
.stfr-pn {
	--stfr-pn-primary: #2D5A4D;
	--stfr-pn-accent: #D4B038;
	--stfr-pn-ink: #1A1F1D;
	--stfr-pn-muted: #8A9490;
	--stfr-pn-border: #D8DEDB;
	--stfr-pn-card-bg: #FFFFFF;
	--stfr-pn-verified: #2D5A4D;
	--pn-gap: 20px;
	--pn-w: 368px;
	--pn-offset: 0px;
	--pn-nudge: 0px;
	--pn-cta-offset: 0px;

	position: fixed;
	z-index: 9980;
	/* max() (bukan jumlah) antara --pn-gap & safe-area-inset-bottom —
	   sama seperti floating-cart-widget.css, supaya jarak bawah di
	   mobile tidak kelihatan jauh lebih besar dari kiri/kanan. */
	bottom: calc(max(var(--pn-gap), env(safe-area-inset-bottom, 0px)) + var(--pn-offset) + var(--pn-nudge) + var(--pn-cta-offset) + var(--stfr-vvb-inset, 0px));
	width: var(--pn-w);
	max-width: calc(100vw - (2 * var(--pn-gap)));
	pointer-events: none;
	opacity: 0;
	visibility: hidden;
	transition: opacity .3s ease, transform .3s ease, bottom .35s ease, visibility 0s linear .3s;
	font-family: 'Inter Tight', system-ui, sans-serif;
	color: var(--stfr-pn-ink);
	box-sizing: border-box;
}
.stfr-pn *{box-sizing:border-box}
.stfr-pn button{font:inherit;color:inherit;cursor:pointer}
.stfr-pn[data-pos="bl"]{left:var(--pn-gap)}
.stfr-pn[data-pos="br"]{right:var(--pn-gap)}
.stfr-pn[data-anim="geser"][data-pos="bl"]{transform:translateX(-24px)}
.stfr-pn[data-anim="geser"][data-pos="br"]{transform:translateX(24px)}
.stfr-pn[data-anim="naik"]{transform:translateY(24px)}
.stfr-pn[data-state="showing"]{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
/* Spesifisitas HARUS >= selector [data-anim][data-pos] di atas (3
   attribute/class) supaya transform:none ini benar-benar menang saat
   showing — kalau cuma `.stfr-pn[data-state="showing"]` (2), translateX
   dari rule geser/naik tetap menang walau statusnya sudah showing, bikin
   kartu permanen "ketinggalan" -24px/+24px dari posisi seharusnya
   (penyebab asli laporan "posisi tidak center" di mobile). */
.stfr-pn[data-anim][data-pos][data-state="showing"]{transform:none}
/* Pratinjau editor (spec §10): inline di tempat widget di-drop, bukan
   nempel ke tepi viewport — override eksplisit per properti, lihat
   catatan yang sama di floating-cart-widget.css. */
.stfr-pn.stfr-pn--editor-preview{
	position:static;top:auto;right:auto;bottom:auto;left:auto;
	/* Margin kiri/kanan SENGAJA fixed 12px, TIDAK diikat ke --pn-gap —
	   konsisten dengan floating-cart-widget.css. Kanvas editor statis
	   ini cuma pratinjau "taruh di tempat drop", bukan representasi
	   presisi jarak-dari-tepi-viewport (yang baru berlaku nyata saat
	   position:fixed di halaman live) — mengikat ke --pn-gap pernah
	   dicoba dan malah bikin bingung (0 kelihatan kepotong, nilai besar
	   kelihatan lebih kecil dari seharusnya di kanvas).
	   --pn-nudge tetap disimulasikan lewat margin-bottom biar efek
	   "Jarak tambahan dari bawah" kelihatan di kanvas editor. */
	margin:12px 12px calc(12px + var(--pn-nudge)) 12px;
	max-width:var(--pn-w);opacity:1;visibility:visible;transform:none;
}

.stfr-pn .pn-card{
	position:relative;display:flex;flex-direction:column;
	background:var(--stfr-pn-card-bg);border:1px solid var(--stfr-pn-border);border-radius:16px;
	box-shadow:0 18px 40px -12px rgba(26,31,29,.3),0 2px 8px rgba(26,31,29,.06);
	padding:14px 14px 16px;overflow:hidden;
}
.stfr-pn .pn-row{display:flex;gap:12px;align-items:flex-start;margin-bottom:8px}
.stfr-pn .pn-thumb{position:relative;flex:none;width:56px;height:56px;border-radius:12px;background:var(--stfr-pn-primary);display:grid;place-items:center;color:#fff;font-family:'Gilda Display',serif;font-size:20px}
.stfr-pn .pn-thumb img{display:block;width:100%;height:100%;object-fit:cover;border-radius:12px}
.stfr-pn .pn-avatar{position:absolute;left:-4px;bottom:-4px;width:22px;height:22px;border-radius:8px;background:var(--stfr-pn-accent);color:var(--stfr-pn-ink);font-size:10px;font-weight:700;display:grid;place-items:center;border:2px solid var(--stfr-pn-card-bg)}
.stfr-pn .pn-body{min-width:0;flex:1}
.stfr-pn .pn-buyer{font-size:12.5px;color:var(--stfr-pn-muted);margin:0 0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stfr-pn .pn-buyer b{color:var(--stfr-pn-ink);font-weight:600}
.stfr-pn .pn-product{display:block;font-size:14.5px;font-weight:500;color:var(--stfr-pn-ink);text-decoration:none;margin:0 0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stfr-pn .pn-product:hover{text-decoration:underline}
.stfr-pn .pn-meta{display:flex;flex-wrap:wrap;align-items:center;row-gap:4px;column-gap:10px;font-size:11.5px;color:var(--stfr-pn-muted)}
.stfr-pn .pn-meta .time{display:inline-flex;align-items:center;gap:4px}
.stfr-pn .pn-meta svg{width:12px;height:12px}
.stfr-pn .pn-verified{display:inline-flex;align-items:center;gap:4px;color:var(--stfr-pn-verified)}
.stfr-pn .pn-verified svg{width:12px;height:12px}
.stfr-pn .pn-divider{height:1px;background:var(--stfr-pn-border);margin:10px 0}
.stfr-pn .pn-foot{display:flex;align-items:center;justify-content:space-between;gap:16px}
.stfr-pn .pn-price-block{display:flex;flex-direction:column;gap:2px;min-width:0}
.stfr-pn .pn-price-label{font-size:11px;color:var(--stfr-pn-muted)}
.stfr-pn .pn-price{font-size:16px;font-weight:600;white-space:nowrap;color:var(--stfr-pn-ink)}
.stfr-pn .pn-btn{flex:none;height:36px;border-radius:999px;border:1px solid var(--stfr-pn-primary);background:var(--stfr-pn-primary);color:#fff;font-size:12.5px;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;text-decoration:none;padding:0 14px;transition:background .2s}
.stfr-pn .pn-btn svg{flex:none;width:14px;height:14px}
.stfr-pn .pn-btn:hover{background:var(--stfr-pn-primary)}
.stfr-pn .pn-btn[data-state="loading"]{opacity:.7;pointer-events:none}
.stfr-pn .pn-btn[data-state="done"]{flex:1 1 100%;background:var(--stfr-pn-verified)}
.stfr-pn[data-hide-price-on-done="1"] .pn-foot[data-done="1"] .pn-price-block{display:none}
.stfr-pn .pn-btn[data-state="error"]{background:#B5532B;border-color:#B5532B}

.stfr-pn .pn-close{position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;border:0;background:none;color:var(--stfr-pn-muted);display:grid;place-items:center}
.stfr-pn .pn-close:hover{background:var(--stfr-pn-border)}
.stfr-pn .pn-close svg{width:13px;height:13px}

.stfr-pn .pn-progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:rgba(0,0,0,.06)}
.stfr-pn .pn-progress i{display:block;height:100%;background:var(--stfr-pn-accent);width:100%;transform-origin:left;transition:transform linear}

.stfr-pn[data-hide-desktop="1"]{display:none}
@media (max-width:900px){.stfr-pn[data-hide-tablet="1"]{display:none}}
@media (max-width:640px){
	.stfr-pn[data-hide-mobile="1"]{display:none}
	/* --pn-gap sendiri sudah responsive (kontrol Elementor, default
	   12px di mobile) — di sini cuma pakai left/right+width:auto
	   supaya kartu melebar penuh (dikurangi gap) alih-alih kaku di
	   lebar --pn-w desktop. Isi 0 di tab Mobile kalau mau benar-benar
	   full-bleed 100vw.
	   max-width DIHAPUS (bukan cuma dilonggarkan) — aturan dasarnya
	   `calc(100vw - 2*gap)` dihitung dari var(--pn-gap) desktop-era
	   dan bisa lebih sempit dari yang dihasilkan left+right+width:auto
	   di sini, bikin kartu nempel kiri tapi nyisa ruang kosong di
	   kanan (tidak center). left & right eksplisit sudah cukup
	   menjamin simetris, max-width jadi berlebih & berisiko konflik. */
	.stfr-pn{left:var(--pn-gap)!important;right:var(--pn-gap)!important;width:auto;max-width:none}
	.stfr-pn .pn-thumb{width:48px;height:48px}
}
@media (prefers-reduced-motion:reduce){
	.stfr-pn{transition:opacity .2s ease, bottom .35s ease!important;transform:none!important}
}
