/* Nama toko di header & footer (Logo Header). Dipakai halaman toko (pages/_layout.php) dan pratinjau admin (/kelola). */
/* ---------- Nama toko di header: animasi ubin ikon -> nama toko (siklus 10 dtk) ---------- */
.brand-anim{position:relative;display:grid;align-items:center;min-width:0;--ts:30px;--tg:5px}
.brand-anim>*{grid-area:1/1}
.brand-anim .ba-teks{display:block;font-style:italic;letter-spacing:.01em;padding-right:4px;background:none;animation:none;-webkit-text-fill-color:currentColor;color:var(--pri)}
.brand-anim .ba-teks span{display:inline-block;opacity:0;-webkit-text-fill-color:transparent;-webkit-text-stroke:1.2px var(--pri);
  animation:baHuruf 12s cubic-bezier(.25,1,.5,1) infinite;animation-delay:calc(var(--i)*.045s)}
.brand-anim .ba-ikon{position:relative;display:flex;align-items:center;gap:var(--tg);pointer-events:none;height:calc(var(--ts) + 8px)}
.ba-tl{position:relative;width:var(--ts);height:var(--ts);flex:none;animation:baTumpuk 12s cubic-bezier(.5,0,.3,1) infinite}
.ba-tl:nth-child(1){z-index:5;animation-name:baTumpuk0}.ba-tl:nth-child(2){z-index:4}.ba-tl:nth-child(3){z-index:3}.ba-tl:nth-child(4){z-index:2}.ba-tl:nth-child(5){z-index:1}
.ba-in{display:block;width:100%;height:100%;opacity:0;perspective:200px;animation:baMasuk 12s cubic-bezier(.5,0,.3,1) infinite;animation-delay:calc(var(--i)*.12s)}
.ba-tl i{width:100%;height:100%;display:grid;place-items:center;font-size:calc(var(--ts)*.43);color:#fff;font-style:normal;
  background:linear-gradient(135deg,var(--pri),var(--pri2));
  clip-path:polygon(0 0,calc(100% - 7px) 0,100% 7px,100% 100%,7px 100%,0 calc(100% - 7px));
  animation:baAngkat 12s ease infinite;animation-delay:calc(var(--i)*.72s)}
.ba-tl.ba-ol i{background:var(--card);color:var(--pri);
  box-shadow:inset 0 0 0 1.6px var(--pri)}
.ba-tl .ba-hrf{font-family:"Outfit","Inter",system-ui,sans-serif;font-weight:900;font-size:calc(var(--ts)*.55)}
.ba-kur{position:absolute;left:0;top:0;z-index:10;font-size:14px;color:var(--ink,#0f172a);opacity:0;
  filter:drop-shadow(0 1px 1px rgba(255,255,255,.9));animation:baKur 12s ease-in-out infinite}
/* ubin: berputar masuk satu-satu (ba-in), lalu bergeser & menumpuk jadi satu tumpukan kartu (ba-tl, 47-60%) */
@keyframes baMasuk{0%{opacity:0;transform:rotateY(90deg) rotate(-20deg) scale(.3)}
  6%{opacity:1;transform:rotateY(-15deg) rotate(4deg) scale(1.08)}
  10%,61%{opacity:1;transform:none}
  62%,100%{opacity:0;transform:none}}
@keyframes baTumpuk{0%,46%{opacity:1;transform:none}
  49%{opacity:1;transform:rotate(calc((var(--i) - 2)*7deg)) translateY(-2px);animation-timing-function:cubic-bezier(.4,0,.8,.6)}
  55%{opacity:1;transform:translate(calc(var(--i)*-1*(var(--ts) + var(--tg)) + var(--i)*1.5px),calc(var(--i)*-1px)) rotate(calc((var(--i) - 2)*6deg));animation-timing-function:linear}
  58%{opacity:1;transform:translate(calc(var(--i)*-1*(var(--ts) + var(--tg))),0) rotate(0) scale(.95);animation-timing-function:linear}
  60.5%,100%{opacity:0;transform:translate(calc(var(--i)*-1*(var(--ts) + var(--tg))),0) rotate(0) scale(.85)}}
/* ubin paling atas: ikut menumpuk lalu langsung membesar & berbalik (flip) tanpa berhenti -> sisi belakangnya logo toko */
@keyframes baTumpuk0{0%,46%{opacity:1;transform:perspective(220px) translateY(0) rotate(0) rotateY(0) scale(1)}
  49%{opacity:1;transform:perspective(220px) translateY(-2px) rotate(-14deg) rotateY(0) scale(1);animation-timing-function:cubic-bezier(.4,0,.8,.6)}
  55%{opacity:1;transform:perspective(220px) translateY(0) rotate(-10deg) rotateY(0) scale(1.05);animation-timing-function:linear}
  58%{opacity:1;transform:perspective(220px) translateY(0) rotate(0) rotateY(25deg) scale(1.15);animation-timing-function:cubic-bezier(.5,0,1,1)}
  61%{opacity:1;transform:perspective(220px) translateY(0) rotate(0) rotateY(90deg) scale(1.22)}
  61.2%,100%{opacity:0;transform:perspective(220px) translateY(0) rotate(0) rotateY(90deg) scale(1.22)}}
/* logo toko: sisi belakang ubin teratas, berbalik masuk, tahan, lalu melebur jadi nama toko */
.brand-anim .ba-logo{justify-self:start;margin-left:-5px;z-index:6;opacity:0;pointer-events:none;animation:baLogo 12s cubic-bezier(.45,0,.25,1) infinite}
.brand-anim .ba-logo .logo{width:calc(var(--ts) + 10px);height:calc(var(--ts) + 10px);border-radius:calc(var(--ts)*.32);font-size:calc(var(--ts)*.5)}
@keyframes baLogo{0%,61%{opacity:0;transform:perspective(220px) translateX(0) rotateY(-90deg) scale(1.08);filter:blur(0)}
  61.2%{opacity:1;transform:perspective(220px) translateX(0) rotateY(-90deg) scale(1.08);filter:blur(0);animation-timing-function:cubic-bezier(0,0,.3,1)}
  64.5%{opacity:1;transform:perspective(220px) translateX(0) rotateY(0) scale(1);filter:blur(0);animation-timing-function:linear}
  69.5%{opacity:1;transform:perspective(220px) translateX(0) rotateY(0) scale(1);filter:blur(0);animation-timing-function:cubic-bezier(.5,0,.75,0)}
  73%,100%{opacity:0;transform:perspective(220px) translateX(-6px) rotateY(0) scale(.7);filter:blur(3px)}}
/* "hover" bergiliran: ubin ke-i terangkat saat kursor menunjuk (window 16-21%, digeser per ubin) */
@keyframes baAngkat{0%,15%,22%,100%{transform:none;filter:none}
  17%,20%{transform:translateY(-4px) scale(1.08);filter:brightness(1.12) drop-shadow(0 4px 6px var(--pri-glow))}}
@keyframes baKur{0%,14%{opacity:0;transform:translate(calc(var(--ts)*.6),calc(var(--ts)*.9))}
  16%{opacity:1;transform:translate(calc(var(--ts)*.6),calc(var(--ts)*.75))}
  22%{transform:translate(calc(var(--ts)*.6 + 1*(var(--ts) + var(--tg))),calc(var(--ts)*.75))}
  28%{transform:translate(calc(var(--ts)*.6 + 2*(var(--ts) + var(--tg))),calc(var(--ts)*.75))}
  34%{transform:translate(calc(var(--ts)*.6 + 3*(var(--ts) + var(--tg))),calc(var(--ts)*.75))}
  40%{opacity:1;transform:translate(calc(var(--ts)*.6 + 4*(var(--ts) + var(--tg))),calc(var(--ts)*.75))}
  45%,100%{opacity:0;transform:translate(calc(var(--ts)*.6 + 4.6*(var(--ts) + var(--tg))),calc(var(--ts)*1.1))}}
/* huruf nama toko: keluar dari posisi logo satu-satu (outline) lalu terisi, tahan, lalu terbang keluar */
@keyframes baHuruf{0%,69.5%{opacity:0;-webkit-text-fill-color:transparent;transform:translateX(calc(var(--i)*-.6em)) scale(.2)}
  75%{opacity:1;-webkit-text-fill-color:transparent;transform:none}
  80%,94%{opacity:1;-webkit-text-fill-color:var(--pri);transform:none}
  98%,100%{opacity:0;-webkit-text-fill-color:transparent;transform:translateY(10px) skewX(-12deg) scale(.8)}}
@media(max-width:420px){.brand-anim{--ts:22px;--tg:3px}.ba-tl i{clip-path:polygon(0 0,calc(100% - 5px) 0,100% 5px,100% 100%,5px 100%,0 calc(100% - 5px))}.ba-kur{font-size:12px}}
@media(max-width:360px){.brand-anim{--ts:20px}}
@media(prefers-reduced-motion:reduce){.brand-anim .ba-logo{display:none}.brand-anim .ba-teks span{animation:none;opacity:1;-webkit-text-fill-color:var(--pri);-webkit-text-stroke:0}.brand-anim .ba-ikon{display:none}}
/* ---------- Nama toko di header TANPA animasi (Logo Header: "Logo & teks" / "Teks saja") ---------- */
.brand-st{display:flex;align-items:center;gap:10px;min-width:0}
.brand-st .bs-logo{display:flex;flex:none}
.brand-st .bs-logo .logo{animation:none}
.brand-st .bs-teks{display:block;min-width:0;font-style:italic;letter-spacing:.01em;padding-right:4px;background:none;animation:none;-webkit-text-fill-color:currentColor;color:var(--pri)}
@media(max-width:420px){.brand-st{gap:8px}.brand-st .bs-logo .logo{width:36px;height:36px;border-radius:12px;font-size:16px}.brand-st .bs-teks{font-size:21px}}
@media(max-width:360px){.brand-st .bs-logo .logo{width:32px;height:32px;border-radius:11px}.brand-st .bs-teks{font-size:19px}}
.foot-brand .brand-st .bs-teks{font-size:21px}
.foot-brand .brand-anim{--ts:28px;--tg:4px}
.foot-brand .ba-tl i{clip-path:polygon(0 0,calc(100% - 7px) 0,100% 7px,100% 100%,7px 100%,0 calc(100% - 7px))}

/* =====================================================================
   Model animasi tambahan (Logo Header > Model animasi)
   Markup: header_brand_html() di lib/helpers.php  ==  lhMarkup() di assets/m.js
   <span class="brand-t brand-fx fx-{model}"><span class="fx-logo">.logo</span><b class="fx-teks">…</b>[<i class="fx-kur">]</span>
   ===================================================================== */
.brand-fx{position:relative;display:flex;align-items:center;gap:10px;min-width:0}
.brand-fx .fx-logo{position:relative;display:flex;flex:none}
.brand-fx .fx-logo .logo{animation:none}
.brand-t.brand-fx .fx-teks{display:block;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:clip;font-style:italic;letter-spacing:.01em;padding-right:4px;
  background:none;animation:none;-webkit-text-fill-color:currentColor;color:var(--pri)}
.brand-fx .fx-teks span{display:inline-block;white-space:pre}

/* 1) Mengetik: huruf diketik satu-satu + kursor berkedip, lalu teks diblok & dihapus (siklus 10 dtk) */
.brand-t.fx-ketik .fx-teks{max-width:20em;border-radius:6px;animation:fxKetikB 10s linear infinite}
.fx-ketik .fx-teks span{max-width:0;overflow:hidden;vertical-align:bottom;animation:fxKetikH 10s linear infinite;animation-delay:calc(.4s + var(--i)*.09s)}
.fx-kur{flex:none;display:block;width:3px;height:26px;margin-left:-8px;border-radius:2px;background:var(--pri);animation:fxKedip 1s steps(1) infinite}
@keyframes fxKetikH{0%{max-width:0}.2%,80%{max-width:2em}80.2%,100%{max-width:0}}
@keyframes fxKetikB{0%,64%{max-width:20em;background:transparent}
  66%,71%{max-width:20em;background:color-mix(in srgb,var(--pri) 20%,transparent)}
  76%,100%{max-width:0;padding-right:0;background:transparent}}
@keyframes fxKedip{0%,49%{opacity:1}50%,100%{opacity:0}}

/* 2) Gelombang: logo meletup, huruf jatuh memantul satu-satu, ombak 2x, lalu turun keluar (siklus 8 dtk) */
.fx-gelombang .fx-logo{animation:fxGlLogo 8s cubic-bezier(.3,1.35,.5,1) infinite}
.fx-gelombang .fx-teks span{opacity:0;animation:fxGlHuruf 8s ease infinite;animation-delay:calc(.45s + var(--i)*.07s)}
@keyframes fxGlLogo{0%{opacity:0;transform:scale(0) rotate(-120deg)}7%{opacity:1;transform:scale(1.12) rotate(8deg)}
  10%,86%{opacity:1;transform:none}92%,100%{opacity:0;transform:scale(0) rotate(90deg)}}
@keyframes fxGlHuruf{0%{opacity:0;transform:translateY(-.9em) scale(.6)}5%{opacity:1;transform:translateY(.12em) scale(1.05)}
  7%{transform:translateY(-.05em)}9%,30%{opacity:1;transform:none}33%{transform:translateY(-.3em)}36%,55%{transform:none}
  58%{transform:translateY(-.3em)}61%,74%{opacity:1;transform:none}79%,100%{opacity:0;transform:translateY(.6em) scale(.7)}}

/* 3) Kilau: logo & nama diam, cahaya menyapu nama & logo + bintang berkelip (siklus 4.5 dtk) */
.brand-t.fx-kilau .fx-teks{background:linear-gradient(100deg,var(--pri) 0 38%,#fff 48%,color-mix(in srgb,var(--pri) 45%,#fff) 53%,var(--pri) 62% 100%);
  background-size:300% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;
  animation:fxKilau 4.5s ease-in-out infinite}
.fx-kilau .fx-logo{animation:fxApung 4.5s ease-in-out infinite}
.fx-kilau .fx-logo .logo::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.8) 50%,transparent 70%);transform:translateX(-130%);animation:fxKilauLogo 4.5s ease-in-out infinite}
.fx-kilau .fx-logo::after{content:"\2726";position:absolute;top:-7px;right:-7px;z-index:3;font-size:13px;line-height:1;color:var(--pri2);transform:scale(0);animation:fxKelip 4.5s ease-in-out infinite}
@keyframes fxKilau{0%,30%{background-position:100% 0}72%,100%{background-position:0 0}}
@keyframes fxKilauLogo{0%,18%{transform:translateX(-130%)}42%,100%{transform:translateX(130%)}}
@keyframes fxApung{0%,100%{transform:none}50%{transform:translateY(-2px)}}
@keyframes fxKelip{0%,40%{transform:scale(0) rotate(0)}50%{transform:scale(1.15) rotate(90deg)}62%,100%{transform:scale(0) rotate(180deg)}}

/* 4) Putar & geser: logo berputar 3D, nama keluar dari balik logo, tahan, masuk lagi (siklus 8 dtk) */
.fx-geser{gap:0}
.fx-geser .fx-logo{z-index:2;animation:fxPutar 8s cubic-bezier(.5,0,.3,1) infinite}
.brand-t.fx-geser .fx-teks{margin-left:10px;opacity:0;animation:fxGeser 8s cubic-bezier(.2,.9,.3,1) infinite}
@keyframes fxPutar{0%{opacity:0;transform:perspective(300px) rotateY(0) scale(.6)}4%{opacity:1}
  13%,84%{opacity:1;transform:perspective(300px) rotateY(360deg) scale(1)}
  94%,100%{opacity:0;transform:perspective(300px) rotateY(720deg) scale(.6)}}
@keyframes fxGeser{0%,12%{opacity:0;clip-path:inset(0 100% 0 0);transform:translateX(-46px);letter-spacing:.3em}
  25%,76%{opacity:1;clip-path:inset(0 0 0 0);transform:none;letter-spacing:.01em}
  86%,100%{opacity:0;clip-path:inset(0 100% 0 0);transform:translateX(-46px);letter-spacing:.3em}}

@media(max-width:420px){.brand-fx{gap:8px}.brand-fx .fx-logo .logo{width:36px;height:36px;border-radius:12px;font-size:16px}.fx-kur{height:22px}}
@media(max-width:360px){.brand-fx .fx-logo .logo{width:32px;height:32px;border-radius:11px}}
@media(prefers-reduced-motion:reduce){
  .brand-fx .fx-logo,.brand-fx .fx-logo::after,.brand-fx .fx-logo .logo::after,.brand-fx .fx-teks,.brand-fx .fx-teks span{animation:none!important;opacity:1!important;transform:none!important;max-width:none!important;clip-path:none!important}
  .brand-fx .fx-kur,.brand-fx .fx-logo::after,.brand-fx .fx-logo .logo::after{display:none}}
