/* Glass Shop v0: spatial glass (visionOS) x soft-light glass (HyperOS). Deep blue + purple. Dark by default, light via data-theme. */
:root{color-scheme:dark;--a1:#0a84ff;--a2:#bf5af2;--acc:linear-gradient(135deg,#0a84ff,#7d6bff 55%,#bf5af2);
--bg:#070a1c;--o1:rgba(10,132,255,.34);--o2:rgba(191,90,242,.30);--o3:rgba(94,92,230,.28);
--txt:#f3f5ff;--muted:#a3a9c9;--glass:rgba(255,255,255,.09);--glass2:rgba(255,255,255,.16);--edge:rgba(255,255,255,.22);--edge2:rgba(255,255,255,.04);--field:rgba(255,255,255,.08);--solid:#141935;
--ok:#6fcf97;--warn:#f2c14e;--bad:#ff6b81;--info:#7aa7ff;--blur:28px;
--sh1:0 2px 8px rgba(0,0,0,.18);--sh2:0 10px 30px rgba(0,0,0,.28);--sh3:0 24px 60px rgba(0,0,0,.4);
--ease:cubic-bezier(.22,1,.36,1);--spring:cubic-bezier(.34,1.56,.64,1);--font:"Plus Jakarta Sans","Helvetica Neue",Arial,system-ui,sans-serif}
:root[data-theme=light]{color-scheme:light;--bg:#eef1ff;--o1:rgba(10,132,255,.22);--o2:rgba(191,90,242,.20);--o3:rgba(94,92,230,.16);
--txt:#161a3a;--muted:#5c6285;--glass:rgba(255,255,255,.55);--glass2:rgba(255,255,255,.8);--edge:rgba(255,255,255,.9);--edge2:rgba(120,130,200,.12);--field:rgba(255,255,255,.7);--solid:#fff;
--ok:#1f9d63;--warn:#b7791f;--bad:#d6334f;--info:#2f63d6;--sh1:0 2px 8px rgba(40,50,120,.08);--sh2:0 10px 30px rgba(40,50,120,.12);--sh3:0 24px 60px rgba(40,50,120,.18)}
:root[data-glass=lite]{--blur:0px;--glass:var(--solid);--glass2:var(--solid)}
@media(prefers-reduced-transparency:reduce){:root{--blur:0px;--glass:var(--solid);--glass2:var(--solid)}}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;color:var(--txt);font:500 16px/1.55 var(--font);background:var(--bg)}
body::before{content:'';position:fixed;inset:0;z-index:-1;background:radial-gradient(60vmax 50vmax at 12% 8%,var(--o1),transparent 70%),radial-gradient(55vmax 45vmax at 90% 20%,var(--o2),transparent 70%),radial-gradient(60vmax 50vmax at 50% 105%,var(--o3),transparent 70%)}
::selection{background:var(--a1);color:#fff}
:focus-visible{outline:2px solid var(--a1);outline-offset:3px}
main{max-width:1180px;margin:0 auto;padding:8px 16px 96px}
h1,h2,h3{font-family:var(--font);letter-spacing:-.025em;font-weight:700}
h2{margin-top:0;font-size:1.7rem;font-weight:300}
b,strong{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}.between{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}
.glass,.panel,.card,dialog,.stat{position:relative;background:var(--glass);border:1px solid var(--edge);border-top-color:var(--edge);border-left-color:var(--edge);border-right-color:var(--edge2);border-bottom-color:var(--edge2);border-radius:28px;box-shadow:var(--sh2),inset 0 1px 0 var(--edge);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.6);backdrop-filter:blur(var(--blur)) saturate(1.6)}
.card::after,button::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .25s;background:radial-gradient(180px circle at var(--mx,50%) var(--my,0),rgba(255,255,255,.22),transparent 60%)}
.card:hover::after,button:hover::after{opacity:1}
/* header: floating toolbar */
.nav{position:sticky;top:12px;z-index:5;display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;width:min(1148px,calc(100% - 24px));margin:12px auto 28px;padding:10px 12px 10px 18px;border-radius:999px;box-shadow:var(--sh3),inset 0 1px 0 var(--edge)}
.nav h1{display:flex;align-items:center;gap:10px;margin:0;font-size:1.15rem;font-weight:700}
.nav .logo{width:36px;height:36px;border-radius:28%;box-shadow:var(--sh1)}
.tools,nav{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
#cartq,#menu-btn,#bottomnav,#acct,#foot,#helpfab,#a2hs{display:none}
/* buttons */
button{position:relative;overflow:hidden;padding:10px 18px;font:600 .88rem var(--font);color:var(--txt);cursor:pointer;background:var(--glass);border:1px solid var(--edge);border-radius:999px;box-shadow:var(--sh1),inset 0 1px 0 var(--edge);touch-action:manipulation;transition:transform .35s var(--spring),background .2s,box-shadow .2s}
button:hover:not(:disabled){background:var(--glass2);transform:translateY(-1px);box-shadow:var(--sh2),inset 0 1px 0 var(--edge)}
button:active:not(:disabled){transform:scale(.96)}
button.primary{color:#fff;background:var(--acc);border-color:rgba(255,255,255,.3);box-shadow:0 8px 24px rgba(10,132,255,.35),inset 0 1px 0 rgba(255,255,255,.4)}
button.primary:hover:not(:disabled){background:var(--acc);filter:brightness(1.1)}
button.danger{color:#fff;background:linear-gradient(135deg,#ff5f7a,#e0335a);border-color:rgba(255,255,255,.3)}
button:disabled{opacity:.45;cursor:not-allowed}
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;white-space:nowrap;font-size:.78rem;font-weight:600;background:var(--glass);border:1px solid var(--edge);border-radius:999px}
.pill::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--muted)}
nav .pill{padding:9px 16px;font-size:.85rem}nav .pill::before{display:none}
.st-pending::before,.st-quoted::before{background:var(--warn)}.st-packed::before,.st-accepted::before{background:var(--ok)}.st-completed::before{background:var(--info)}.st-cancelled::before,.st-declined::before,.st-unavailable::before{background:var(--bad)}
/* forms */
input,textarea,select{width:100%;margin:4px 0 14px;padding:11px 16px;font:500 max(16px,1rem) var(--font);color:var(--txt);background:var(--field);border:1px solid var(--edge);border-radius:16px;transition:box-shadow .2s,background .2s}
input:focus,textarea:focus,select:focus{outline:none;background:var(--glass2);box-shadow:0 0 0 3px rgba(10,132,255,.45)}
input[type=date],input[type=search]{-webkit-appearance:none;appearance:none;min-height:44px}
input[type=checkbox]{width:22px;height:22px;margin:0;padding:0;accent-color:var(--a1);vertical-align:middle}
label{font-size:.82rem;font-weight:600;color:var(--muted)}
/* hero + categories */
.hero{position:relative;margin:0 0 28px;padding:56px 36px 40px;border-radius:36px}
.hero h2{margin:0 0 8px;max-width:14ch;font-size:clamp(2.2rem,7vw,4rem);line-height:1.02;font-weight:800;letter-spacing:-.045em;background:var(--acc);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{margin:0 0 24px;max-width:460px;color:var(--muted)}
.hero input{display:block;max-width:520px;margin:0;padding:15px 22px 15px 52px;border-radius:999px;background:var(--field) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%23a3a9c9' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='8.5' cy='8.5' r='6'/%3E%3Cpath d='M13 13l5 5'/%3E%3C/svg%3E") no-repeat 20px center}
.cats{display:flex;gap:10px;overflow-x:auto;padding:4px 4px 16px;scrollbar-width:none}.cats::-webkit-scrollbar{display:none}
.tile{flex:none;min-width:96px;padding:12px 22px;border-radius:22px}
.tile.on,.tile.on:hover:not(:disabled){color:#fff;background:var(--acc);border-color:rgba(255,255,255,.35)}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:8px}
.toolbar input{flex:1 1 220px;margin:0}.toolbar select{width:auto;flex:0 1 170px;margin:0}.toolbar input[type=date]{flex:0 1 170px}.toolbar input[type=checkbox]{flex:none}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.cat-title{display:flex;align-items:center;gap:10px;margin:30px 0 14px;font-weight:300}
.cat-title::before{content:'';width:10px;height:10px;border-radius:50%;background:var(--acc)}
/* products */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px}
.card{display:flex;flex-direction:column;gap:4px;padding:10px 10px 16px;overflow:hidden;border-radius:28px;transition:transform .4s var(--spring),box-shadow .3s}
.card:hover{transform:translateY(-4px);box-shadow:var(--sh3),inset 0 1px 0 var(--edge)}
.img{position:relative;aspect-ratio:5/4;overflow:hidden;border-radius:20px;background:linear-gradient(135deg,rgba(10,132,255,.25),rgba(191,90,242,.25))}
.img img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
.card:hover .img img{transform:scale(1.05)}
.img:has(.badge:not(.off)) img{filter:grayscale(1) brightness(.8)}
.card h3{margin:12px 8px 0;font-size:1.02rem;font-weight:700;line-height:1.3}
.card p{flex:1;margin:2px 8px 0;color:var(--muted);font-size:.9rem}
.card footer{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:12px 8px 0}
.card footer b{font-size:1.3rem;font-weight:800;letter-spacing:-.02em}
.add{flex:none;display:grid;place-items:center;width:44px;height:44px;padding:0;font-size:1.6rem;line-height:1;font-weight:400}
.badge{position:absolute;top:10px;left:10px;padding:5px 12px;font-size:.75rem;font-weight:700;color:#fff;background:rgba(10,12,30,.55);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--edge);border-radius:999px}
.badge.off{left:auto;right:10px;background:linear-gradient(135deg,#ff5f7a,#e0335a)}
.was{margin-right:4px;font-size:.88rem;color:var(--muted);text-decoration:line-through}
.combo-imgs{display:grid;grid-template-columns:1fr 1fr;width:100%;height:100%}.combo-imgs:has(img:only-child){grid-template-columns:1fr}.combo-imgs img{width:100%;height:100%;object-fit:cover}
/* banners */
.banner,.notice,.note-banner{margin:0 0 14px;padding:12px 18px;border-radius:20px}
.banner{text-align:center;font-weight:600}
.notice{background:rgba(191,90,242,.18);border:1px solid var(--edge)}
.note-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:rgba(10,132,255,.16);border:1px solid var(--edge)}
.note-banner.bad{background:rgba(255,107,129,.2)}.note-banner button{flex:none}
.stamps{margin:6px 0;font-size:1.2rem;letter-spacing:4px}
.ready{display:inline-block;margin:0 0 10px;padding:4px 12px;font-weight:600;color:var(--ok);background:rgba(111,207,151,.15);border-radius:999px}
.share-ic{display:inline-block;padding:0 6px;border:1px solid var(--edge);border-radius:6px}
/* panels, tables, admin */
.panel{margin-bottom:22px;padding:24px}
.panel,.card,dialog{overflow-wrap:anywhere}
.row{display:grid;grid-template-columns:1fr 160px;gap:12px}
table{width:100%;border-collapse:collapse}
th{color:var(--muted);font-size:.78rem;font-weight:600;text-align:left}
td,th{padding:12px 8px;text-align:left;vertical-align:middle;border-bottom:1px solid var(--edge2)}
td .actions{display:flex;flex-wrap:wrap;gap:6px}
.thumb{width:52px;height:52px;border-radius:28%;object-fit:cover}
.table-wrap{overflow-x:auto}
.req{padding:14px 0;border-bottom:1px solid var(--edge2)}.req:last-child{border-bottom:0}
.bulk{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}.bulk label{display:flex;gap:8px;align-items:center;margin:0}
.picks{max-height:260px;overflow-y:auto;margin-bottom:12px;padding:6px;background:var(--field);border:1px solid var(--edge);border-radius:20px}
.pickrow{display:flex;align-items:center;gap:10px;margin:0;padding:6px 8px;color:var(--txt)}.pickrow input[type=number]{width:70px;margin:0 0 0 auto;padding:6px 8px}
.lines{margin:0;padding:0;list-style:none}.lines li{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--edge2)}.lines li:last-child{border-bottom:0}
.total{margin-top:6px;padding-top:10px;font-size:1.1rem;border-top:1px solid var(--edge)}
.cline{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:8px 0;border-bottom:1px solid var(--edge2)}.cline>span{flex:1 1 160px;min-width:0}
.qty{display:flex;align-items:center;gap:8px}.qty button{min-width:34px;padding:2px 10px}.qty b{display:inline-block;min-width:1.6ch;text-align:center}
#olist{display:block}.ogrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:18px;align-items:start}.ogrid .panel{margin:0}
.day-title{margin:24px 0 2px;font-size:1.25rem;font-weight:300}.hour-title{margin:14px 0 8px;font-size:.85rem;font-weight:600;color:var(--muted)}
.track{display:flex;align-items:flex-start;margin:6px 0 16px}
.track .st{flex:1;position:relative;text-align:center;font-size:.74rem;font-weight:600;color:var(--muted)}
.track .st i{position:relative;z-index:1;display:grid;place-items:center;width:30px;height:30px;margin:0 auto 6px;font-style:normal;font-size:.85rem;background:var(--glass);border:1px solid var(--edge);border-radius:50%}
.track .st::before{content:'';position:absolute;top:14px;left:-50%;width:100%;height:2px;background:var(--edge);border-radius:2px}.track .st:first-child::before{display:none}
.track .st.done{color:var(--txt)}.track .st.done i{color:#fff;background:var(--acc);border-color:transparent}.track .st.done::before{background:var(--a1)}
.attn{margin:10px 0}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin:0 0 22px}
.stat{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:18px 20px;text-align:left;border-radius:24px}
.stat b{font-size:2.2rem;line-height:1;font-weight:300;letter-spacing:-.04em}.stat span{font-size:.8rem;font-weight:600;color:var(--muted)}
.stat.on{background:rgba(10,132,255,.22)}.stat.hot{background:rgba(191,90,242,.24)}
.tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
@media(min-width:900px){#app:has(>.tabs){display:flow-root}#app:has(>.tabs)>:not(.tabs){margin-left:266px}
#app:has(>.tabs)>.tabs{float:left;position:sticky;top:92px;width:238px;flex-direction:column;flex-wrap:nowrap;margin:0;padding:14px;background:var(--glass);border:1px solid var(--edge);border-radius:28px;box-shadow:var(--sh2);-webkit-backdrop-filter:blur(var(--blur));backdrop-filter:blur(var(--blur))}
.tabs button{width:100%;text-align:left;border-radius:16px}}
/* dialogs, toast, cart bar */
dialog{width:min(460px,92vw);max-height:88vh;overflow-y:auto;padding:28px;color:var(--txt);border-radius:32px;box-shadow:var(--sh3),inset 0 1px 0 var(--edge)}
dialog::backdrop{background:rgba(5,7,22,.5);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
dialog[data-kind=cart][open]{margin:12px 12px 12px auto;width:min(470px,calc(100% - 24px));height:calc(100vh - 24px);max-height:none}
#toast{position:fixed;bottom:24px;left:50%;z-index:60;padding:10px 22px;border-radius:999px;opacity:0;pointer-events:none;transform:translate(-50%,30px) scale(.95);transition:.3s var(--spring);font-weight:600}
#toast.show{opacity:1;transform:translate(-50%,0)}
#cartbar{position:fixed;left:50%;bottom:24px;z-index:45;display:flex;align-items:center;justify-content:space-between;gap:16px;min-width:290px;padding:10px 20px 10px 10px;transform:translateX(-50%);color:#fff;background:var(--acc);border-radius:999px}
#cartbar[hidden]{display:none}#cartbar:hover:not(:disabled){transform:translateX(-50%) translateY(-2px)}#cartbar:active:not(:disabled){transform:translateX(-50%) scale(.97)}
#cartbar .cb-n{display:grid;place-items:center;min-width:32px;height:32px;padding:0 8px;font-weight:700;color:var(--a1);background:#fff;border-radius:999px}
body:has(#cartbar:not([hidden])) #toast{bottom:96px}
/* tutorial */
.tour-hl{position:relative;z-index:6;outline:2px solid var(--a1);outline-offset:4px;animation:tourPulse 1.4s infinite}
#tour{position:fixed;bottom:20px;left:50%;z-index:50;width:min(430px,calc(100% - 28px));padding:18px 20px;transform:translateX(-50%)}
#tour.in-dlg{position:static;width:auto;margin-top:18px;transform:none}
#tour h3{margin:0 0 6px;font-size:1.1rem}#tour p{margin:0 0 10px;color:var(--muted);font-size:.95rem}#tour .tour-hint{font-weight:600;color:var(--txt)}
.tour-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}.tour-actions [data-t=skip]{margin-right:auto}
.tour-bar{height:6px;margin-bottom:12px;overflow:hidden;background:var(--field);border-radius:6px}.tour-bar i{display:block;height:100%;background:var(--acc);transition:width .3s}
/* startup */
#boot{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;background:var(--bg);animation:bootGone 0s linear 8s forwards}
#boot::before{content:'';position:absolute;inset:0;background:radial-gradient(60vmax 50vmax at 20% 15%,var(--o1),transparent 70%),radial-gradient(55vmax 45vmax at 85% 80%,var(--o2),transparent 70%)}
#boot.out{animation:bootOut .5s ease forwards,bootGone 0s linear 8s forwards}#boot.skip{animation:bootOut .25s ease forwards,bootGone 0s linear 8s forwards}
#boot .boot-logo img,#boot .boot-title span,#boot .boot-bar i{animation-play-state:paused;will-change:transform,opacity}
#boot.go .boot-logo img,#boot.go .boot-title span,#boot.go .boot-bar i{animation-play-state:running}
.boot-logo{position:relative;display:grid;place-items:center}
.boot-logo img{width:96px;height:96px;border-radius:28%;box-shadow:var(--sh3);animation:bootLogo .8s var(--spring) backwards}
.boot-title{position:relative;display:flex;font-size:1.8rem;font-weight:300;letter-spacing:-.02em;color:var(--txt)}
.boot-title span{display:inline-block;animation:bootLetter .5s var(--ease) backwards;animation-delay:calc(.4s + var(--i)*.05s)}
.boot-bar{position:relative;width:150px;height:5px;overflow:hidden;background:var(--glass);border-radius:5px}
.boot-bar i{display:block;height:100%;background:var(--acc);transform-origin:left;animation:bootBar 1.1s var(--ease) .25s backwards}
body.booting header,body.booting main,body.booting #bottomnav,body.booting #helpfab{visibility:hidden}
/* motion */
@keyframes fxIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes dlgIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
@keyframes drawerIn{from{opacity:0;transform:translateX(46px)}to{opacity:1;transform:none}}
@keyframes sheetUp{from{opacity:0;transform:translateY(70px)}to{opacity:1;transform:none}}
@keyframes barIn{from{opacity:0;transform:translateX(-50%) translateY(22px)}to{opacity:1;transform:translateX(-50%)}}
@keyframes popIn{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}
@keyframes imgFade{from{opacity:0}to{opacity:1}}
@keyframes bump{0%{transform:none}35%{transform:scale(1.08)}100%{transform:none}}
@keyframes tourPulse{0%,100%{box-shadow:0 0 0 0 rgba(10,132,255,.5)}50%{box-shadow:0 0 0 8px rgba(10,132,255,0)}}
@keyframes bootLogo{from{opacity:0;transform:scale(.5)}to{opacity:1;transform:none}}
@keyframes bootLetter{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes bootBar{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes bootOut{to{opacity:0;transform:scale(1.04)}}
@keyframes bootGone{to{visibility:hidden;pointer-events:none}}
#app.fx>:not(.tabs){animation:fxIn .5s var(--ease) backwards}
#app.fx .grid>.card{animation:fxIn .5s var(--ease) backwards;animation-delay:calc(var(--n,0)*40ms)}
#app.fx .grid>.card:nth-child(1){--n:1}#app.fx .grid>.card:nth-child(2){--n:2}#app.fx .grid>.card:nth-child(3){--n:3}#app.fx .grid>.card:nth-child(4){--n:4}#app.fx .grid>.card:nth-child(5){--n:5}#app.fx .grid>.card:nth-child(6){--n:6}#app.fx .grid>.card:nth-child(n+7){--n:7}
#app.fx .req{animation:fxIn .4s var(--ease) backwards}
.card .img img,.combo-imgs img{animation:imgFade .5s ease backwards}
dialog[open]{animation:dlgIn .3s var(--ease)}dialog[data-kind=cart][open]{animation:drawerIn .35s var(--ease)}
#cartbar{animation:barIn .35s var(--ease)}.bump{animation:bump .35s var(--spring)}.qty b,.attn .stat{animation:popIn .25s ease backwards}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;scroll-behavior:auto!important}}
/* phones */
@media(max-width:560px){.row{grid-template-columns:1fr}.grid{grid-template-columns:repeat(2,1fr);gap:12px}}
@media(max-width:640px){
main{padding:4px 12px 96px}.panel{padding:18px}
.nav{position:relative;top:0;flex-wrap:nowrap;gap:10px;width:calc(100% - 24px);margin:12px auto 16px;padding:8px 10px 8px 14px}
.nav h1{order:1;margin-right:auto}.nav .tools{display:none!important}
#acct{display:block;order:2;max-width:34vw}#acct .pill{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:10px 12px}
#acct button,#cartq{min-height:44px;padding:10px 16px;white-space:nowrap}#cartq{display:inline-block;order:3}
#bottomnav{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:6px;position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:40;padding:8px;background:var(--glass);border:1px solid var(--edge);border-radius:999px;box-shadow:var(--sh3);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.6);backdrop-filter:blur(var(--blur)) saturate(1.6)}
#bottomnav button{min-height:46px;padding:8px 6px;font-size:.85rem;background:transparent;border-color:transparent;box-shadow:none}
#bottomnav button.on{color:#fff;background:var(--acc)}
#foot{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:4px 14px 110px}#foot button{padding:8px 14px;font-size:.8rem}
#helpfab{display:block;position:fixed;right:14px;bottom:calc(88px + env(safe-area-inset-bottom));z-index:35;min-height:44px;padding:10px 18px;color:#fff;background:var(--acc)}
body:has(#tour) #helpfab,body:has(#tour) #a2hs{display:none}
#a2hs{display:block;position:fixed;left:12px;right:12px;bottom:calc(156px + env(safe-area-inset-bottom));z-index:36;padding:14px 16px;background:var(--glass);border:1px solid var(--edge);border-radius:24px;box-shadow:var(--sh3)}#a2hs p{margin:4px 0 10px;color:var(--muted);font-size:.95rem}
#toast{bottom:104px}#tour{bottom:96px}.hero{padding:34px 22px 26px;border-radius:30px}
.tabs{flex-wrap:nowrap;overflow-x:auto;padding:0 6px 8px 0;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{flex:none;white-space:nowrap}
.ogrid{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}
.table-wrap table,.table-wrap tbody{display:block}.table-wrap tr{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:12px 0;border-bottom:1px solid var(--edge2)}.table-wrap tr:last-child{border-bottom:0}
.table-wrap td{display:block;padding:0;border:0}.table-wrap td:has(>b){flex:1 1 140px}.table-wrap td:last-child{flex:1 1 100%}.table-wrap th{display:none}
.card h3{margin:10px 6px 0;font-size:.95rem}.card p{margin:2px 6px 0}.card footer{margin:10px 6px 0}.card footer b{font-size:1.1rem}.add{width:40px;height:40px}
.cline>span{flex-basis:100%}.cline>b{margin-left:auto}
dialog,dialog[data-kind=cart][open]{padding:22px 20px 30px}
dialog[open],dialog[data-kind=cart][open]{margin:auto 0 0;width:100%;max-width:100%;height:auto;max-height:92vh;border-radius:32px 32px 0 0;animation:sheetUp .35s var(--ease)}
dialog[open]::before{content:'';display:block;width:44px;height:5px;margin:-8px auto 16px;background:var(--edge);border-radius:5px}
#cartbar{bottom:calc(86px + env(safe-area-inset-bottom));width:calc(100% - 24px);min-width:0}
body:has(#cartbar:not([hidden])) #toast{bottom:156px}body:has(#cartbar:not([hidden])) #helpfab{bottom:calc(152px + env(safe-area-inset-bottom))}}
/* ===== v1: dock + one big window + bento tiles ===== */
body::before{inset:-20%;background:radial-gradient(40% 40% at 20% 25%,rgba(10,132,255,.5),transparent 70%),radial-gradient(38% 38% at 80% 30%,rgba(191,90,242,.45),transparent 70%),radial-gradient(45% 45% at 55% 85%,rgba(94,92,230,.45),transparent 70%);animation:drift 28s ease-in-out infinite alternate}
:root[data-theme=light] body::before{opacity:.5}
@keyframes drift{to{transform:translate(4%,-3%) rotate(6deg) scale(1.08)}}
.nav{position:fixed;left:20px;top:50%;transform:translateY(-50%);width:auto;margin:0;padding:10px;flex-direction:column;flex-wrap:nowrap;gap:8px;border-radius:40px}
.nav h1{margin:0;font-size:0}.nav h1 .logo{width:44px;height:44px;margin:2px}
.nav .tools,.nav nav{flex-direction:column;flex-wrap:nowrap;gap:8px}
.nav button,.nav .pill{position:relative;display:grid;place-items:center;width:52px;height:52px;padding:0;color:var(--txt);background:transparent;border:0;border-radius:50%;box-shadow:none;font-weight:700}
.nav .pill::before{display:none}.nav .pill{background:var(--glass2)}
.nav button:hover:not(:disabled){background:var(--glass2);transform:scale(1.1);box-shadow:none}
.nav button.on,.nav button.primary{color:#fff;background:var(--acc)}
.nav svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.nav button i{position:absolute;top:4px;right:4px;min-width:18px;height:18px;padding:0 5px;font:700 .68rem/18px var(--font);font-style:normal;color:#fff;background:#ff5f7a;border-radius:9px}
#acct,#cartq,#bottomnav{display:none!important}
main{width:min(1100px,calc(100% - 140px));max-width:none;margin:28px max(28px,calc((100% - 1100px)/2 - 50px)) 40px auto;padding:34px;background:var(--glass);border:1px solid var(--edge);border-right-color:var(--edge2);border-bottom-color:var(--edge2);border-radius:52px;box-shadow:var(--sh3),inset 0 1px 0 var(--edge);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.7);backdrop-filter:blur(var(--blur)) saturate(1.7)}
main .panel,main .stat{-webkit-backdrop-filter:none;backdrop-filter:none}
.hero{display:grid;grid-template-columns:1fr auto;gap:8px 24px;align-items:end;margin:0 0 26px;padding:0;background:none;border:0;border-radius:0;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
.hero h2{grid-column:1;margin:0;max-width:9ch;font-size:clamp(3rem,9vw,6.4rem);line-height:.92;font-weight:800;letter-spacing:-.06em;background:linear-gradient(120deg,var(--txt) 20%,#7aa7ff 60%,#d08bff);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{grid-column:1;margin:0}.hero input{grid-column:2;grid-row:1/3;width:min(320px,100%)}
.cats{display:inline-flex;gap:4px;margin:0 0 22px;padding:5px;max-width:100%;background:var(--glass);border:1px solid var(--edge);border-radius:999px}
.tile{min-width:0;padding:10px 22px;color:var(--muted);background:transparent;border:0;border-radius:999px;box-shadow:none}
.tile.on,.tile.on:hover:not(:disabled){color:#fff;background:var(--acc);box-shadow:0 6px 20px rgba(10,132,255,.4)}
.grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:minmax(200px,auto);grid-auto-flow:dense;gap:16px}
.grid>.card:first-child{grid-column:span 2;grid-row:span 2}.grid>.card:nth-child(7n+4){grid-column:span 2}
.card{display:flex;flex-direction:column;justify-content:flex-end;min-height:200px;padding:0;border-radius:36px;cursor:default}
.card:hover{transform:scale(1.025)}
.card .img{position:absolute;inset:0;aspect-ratio:auto;border-radius:0}
.badge{z-index:2}
.cap{position:relative;margin:10px;z-index:2;display:flex;align-items:center;gap:10px;padding:10px 10px 10px 18px;color:#fff;background:rgba(12,14,40,.4);border:1px solid rgba(255,255,255,.2);border-radius:26px;-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px)}
.cap>div{flex:1;min-width:0}.cap h3,.card .cap h3{margin:0;font-size:.98rem;line-height:1.25;white-space:normal;overflow-wrap:break-word;word-break:normal;hyphens:manual}
.cap small{display:block;margin-top:2px;font-size:.8rem;line-height:1.3;opacity:.8;white-space:normal;overflow-wrap:break-word}
.cap .pr b{font-size:1.05rem;font-weight:800}.cap .was{color:rgba(255,255,255,.6)}
.cap .add{width:40px;height:40px;font-size:1.5rem}
.grid>.card:first-child .cap h3{font-size:1.3rem}
.stat b{font-size:3.4rem;font-weight:200;letter-spacing:-.06em}
@media(max-width:900px){
.nav{top:auto;bottom:calc(14px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);flex-direction:row;gap:4px;padding:8px;max-width:calc(100% - 24px);margin:0;border-radius:999px}
.nav .tools{display:flex!important;flex-direction:row;gap:4px}.nav nav{flex-direction:row;gap:4px}
.nav h1,#tour-btn,#theme{display:none}.nav button,.nav .pill{width:46px;height:46px}
main{width:calc(100% - 24px);margin:12px auto 110px;padding:22px 16px;border-radius:40px}
.hero{grid-template-columns:1fr}.hero input{grid-column:1;grid-row:auto;width:100%;margin-top:12px}
.grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:170px;gap:12px}.card{border-radius:28px}.cap{gap:6px;padding-left:12px}.cap h3{font-size:.88rem}.cap .add{width:34px;height:34px}
#helpfab{bottom:calc(100px + env(safe-area-inset-bottom))}#cartbar{bottom:calc(98px + env(safe-area-inset-bottom))}
.stat b{font-size:2.6rem}}
/* ===== fixes: headline clipping, light mode depth, field visibility ===== */
.hero h2{font-size:clamp(2.3rem,6vw,4.2rem);line-height:1.1;padding-bottom:.16em;max-width:15ch;letter-spacing:-.045em}
.hero{margin-bottom:22px}
:root[data-theme=light]{--bg:#dfe6ff;--o1:rgba(10,132,255,.5);--o2:rgba(191,90,242,.42);--o3:rgba(94,92,230,.38);--glass:rgba(255,255,255,.42);--glass2:rgba(255,255,255,.72);--field:rgba(255,255,255,.82);--edge:rgba(255,255,255,.95);--edge2:rgba(100,110,190,.2);--muted:#505886;--sh1:0 2px 8px rgba(60,70,160,.12);--sh2:0 10px 30px rgba(60,70,160,.16);--sh3:0 24px 64px rgba(60,70,160,.24)}
:root[data-theme=light] body::before{opacity:1}
:root[data-theme=light] input,:root[data-theme=light] select,:root[data-theme=light] textarea{border-color:rgba(90,100,180,.28);box-shadow:inset 0 1px 2px rgba(60,70,160,.08)}
:root[data-theme=light] .cats,:root[data-theme=light] .picks{border-color:rgba(90,100,180,.22)}
:root[data-theme=light] .tile.on,:root[data-theme=light] .tile.on:hover:not(:disabled){box-shadow:0 4px 12px rgba(10,132,255,.3)}
:root[data-theme=light] main .panel,:root[data-theme=light] main .stat{background:rgba(255,255,255,.6)}
:root[data-theme=light] .nav{background:rgba(255,255,255,.55)}
@media(max-width:900px){.hero input{margin-top:6px}.hero h2{font-size:clamp(2.1rem,10vw,3rem)}}
.nav h1 .logo{box-shadow:0 0 0 1px var(--edge),var(--sh1)}
@media(max-width:900px){
#helpfab{top:calc(14px + env(safe-area-inset-top));bottom:auto;right:20px;width:44px;height:44px;min-height:0;padding:0;font-size:0;border-radius:50%}
#helpfab::before{content:'?';font-size:1.2rem;font-weight:700}
}

/* ===== v2: full names, real phone layout, boot status ===== */
html{overflow-x:hidden}body{min-height:100vh;min-height:100dvh;overflow-x:clip;overflow-wrap:break-word}
img{max-width:100%}
.card h3,.cline>span,.panel b,td b,.pickrow,dialog h2{overflow-wrap:break-word}
.card .img img{background:transparent}
.cap .pr{flex:none;display:flex;flex-direction:column;align-items:flex-end;line-height:1.15;text-align:right}
.cap .pr .was{margin:0;font-size:.74rem}
/* the legibility scrim: long names stay readable on any picture */
.card .img::after{content:'';position:absolute;inset:auto 0 0 0;height:75%;background:linear-gradient(to top,rgba(8,10,30,.72),transparent);pointer-events:none}
.card .cap{background:rgba(12,14,40,.5)}
/* tablet and phone: two columns, no card ever gets a fixed height, so no word is ever clipped */
@media(max-width:900px){
.grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;gap:12px}
.grid>.card:first-child,.grid>.card:nth-child(7n+4){grid-column:auto;grid-row:auto}
.card{min-height:0;border-radius:24px}
.card .img{position:relative;inset:auto;aspect-ratio:4/3;flex:none;border-radius:24px 24px 0 0}
.card .img::after{display:none}
.card .cap{margin:0;border:0;border-radius:0 0 24px 24px;flex:1;flex-wrap:wrap;align-items:flex-end;align-content:space-between;gap:6px 8px;padding:10px 10px 10px 12px;color:var(--txt);background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
.card .cap>div{flex:1 1 100%}
.grid>.card.combo{grid-column:1/-1}
.grid>.card.combo .img{aspect-ratio:16/7}
.card .cap .pr{flex:1 1 auto;align-items:flex-start;text-align:left}
.cap .was{color:var(--muted)}
.cap h3,.card .cap h3,.grid>.card:first-child .cap h3{font-size:.92rem}
.cap small{opacity:1;color:var(--muted);font-size:.76rem}
.cap .pr b{font-size:1rem}
.card .cap .add{width:38px;height:38px}
.stat b{font-size:2.4rem}
main{padding:18px 12px}
.hero h2{max-width:100%}
}
@media(max-width:520px){
.card .img{aspect-ratio:1/1}
.card .cap{padding:8px 8px 10px 10px}
.cap h3,.card .cap h3,.grid>.card:first-child .cap h3{font-size:.86rem}
.cap small{font-size:.72rem}
.cap .pr b{font-size:.95rem}
.card .cap .add{width:36px;height:36px;font-size:1.4rem}
.badge{top:8px;left:8px;padding:4px 9px;font-size:.68rem}.badge.off{left:auto;right:8px}
.cat-title{margin:22px 0 12px}
.hero h2{font-size:clamp(1.9rem,9vw,2.6rem)}
}
@media(max-width:310px){
.grid{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:640px){
h2{font-size:1.4rem}
.panel{padding:16px}
.toolbar select,.toolbar input[type=date]{flex:1 1 140px}
.table-wrap{margin:0 -4px}
.actions button{padding:9px 14px}
.cline{gap:8px}
dialog{padding:20px 16px 28px}
.tile{padding:10px 18px}
.cats{max-width:100%;overflow-x:auto}
.ogrid{grid-template-columns:minmax(0,1fr)}
.stat{padding:14px 16px}
.stat b{font-size:2rem}
.nav{width:calc(100% - 20px)}
}
/* keep the fixed dock / sheet away from the iPhone home bar and notch */
@supports(padding:max(0px)){
main{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
}
/* boot screen: also tells people when the free server is still waking up */
.boot-msg{position:relative;min-height:1.4em;max-width:80vw;margin:0;text-align:center;font-size:.9rem;font-weight:600;color:var(--muted);opacity:0;transition:opacity .4s}
.boot-msg.on{opacity:1}
.boot-msg button{margin-top:10px}
#boot .boot-bar i{animation:bootBar 1.1s var(--ease) .25s backwards}
#boot.slow .boot-bar i{animation:bootSlide 1.4s ease-in-out infinite;width:40%}
@keyframes bootSlide{0%{transform:translateX(-100%)}100%{transform:translateX(250%)}}
#boot.go .boot-logo img{animation:bootLogo .8s var(--spring) backwards,bootBreath 2.4s ease-in-out .9s infinite}
@keyframes bootBreath{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
/* skeleton cards while the shop loads */
.sk{min-height:170px;border-radius:24px;background:linear-gradient(100deg,var(--glass) 30%,var(--glass2) 50%,var(--glass) 70%);background-size:300% 100%;animation:skel 1.4s linear infinite;border:1px solid var(--edge)}
@keyframes skel{from{background-position:100% 0}to{background-position:0 0}}

/* ===== v3: favorites heart, activity log ===== */
.fav{position:absolute;top:10px;right:10px;z-index:3;width:38px;height:38px;min-height:0;padding:0;border-radius:50%;display:grid;place-items:center;font-size:1.25rem;line-height:1;cursor:pointer;
  color:var(--txt);background:rgba(255,255,255,.78);border:1px solid var(--edge);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:transform .2s var(--spring),color .2s}
.fav:active{transform:scale(.88)}
.fav.on{color:#e0245e;transform:scale(1.05)}
.card.has-fav .badge.off{right:58px}
@media(max-width:520px){.fav{top:8px;right:8px;width:34px;height:34px;font-size:1.1rem}.card.has-fav .badge.off{right:50px}}

/* ===== descriptions stay out of the way until a tile is tapped ===== */
.cap small.desc,.grid>.card .cap small.desc{display:none}
.card.open .cap small.desc{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;margin-top:4px}
.card.t{cursor:pointer}
/* ===== new startup animation: aurora bloom, spinning glass ring, blur-in title ===== */
#boot{gap:26px}
#boot::before{animation:bsBloom 1.6s var(--ease) both;animation-play-state:paused}
#boot.go::before{animation-play-state:running}
.boot-logo{width:140px;height:140px}
.boot-logo::before,.boot-logo::after{content:'';position:absolute;border-radius:50%;animation-play-state:paused}
.boot-logo::before{inset:0;background:conic-gradient(from 0deg,transparent 0 50%,var(--a1),var(--a2),transparent);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));animation:bsSpin 1.7s linear infinite}
.boot-logo::after{inset:12px;background:var(--glass);border:1px solid var(--edge);box-shadow:var(--sh2),inset 0 1px 0 var(--edge);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);animation:bsDisc .9s var(--spring) backwards}
#boot.go .boot-logo::before,#boot.go .boot-logo::after{animation-play-state:running}
#boot .boot-logo img,#boot.go .boot-logo img{position:relative;z-index:1;width:72px;height:72px;animation:bsLogo .9s var(--ease) .15s backwards,bootBreath 2.6s ease-in-out 1.1s infinite}
#boot .boot-title{font-size:2rem;animation:bsSpace 1.5s var(--ease) .3s backwards;animation-play-state:paused}
#boot.go .boot-title{animation-play-state:running}
#boot .boot-title span{animation:bsLetter .7s var(--ease) backwards;animation-delay:calc(.35s + var(--i)*.06s)}
#boot .boot-bar{width:170px;height:3px;background:rgba(128,140,200,.25)}
#boot .boot-bar i{background:linear-gradient(90deg,transparent,var(--a1),var(--a2));animation:bootBar 1.3s var(--ease) .3s backwards}
@keyframes bsBloom{from{opacity:0;transform:scale(1.25)}to{opacity:1;transform:none}}
@keyframes bsSpin{to{transform:rotate(360deg)}}
@keyframes bsDisc{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
@keyframes bsLogo{from{opacity:0;transform:scale(.8);filter:blur(12px)}to{opacity:1;transform:none;filter:blur(0)}}
@keyframes bsSpace{from{letter-spacing:.4em;opacity:0}to{letter-spacing:-.01em;opacity:1}}
@keyframes bsLetter{from{opacity:0;transform:translateY(10px) scale(.9);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}

/* ===== v14: pin + arrange, motion ===== */
.sq{border-radius:14px!important}
/* featured (pinned) products: a pin that drops in, and a slow light sweep across the picture */
.pinmark{position:absolute;top:10px;left:10px;z-index:3;display:grid;place-items:center;width:30px;height:30px;color:#fff;background:var(--acc);border-radius:10px;box-shadow:0 6px 16px rgba(10,132,255,.45);animation:pinDrop .7s var(--spring) backwards}
.pinmark svg{width:16px;height:16px;fill:currentColor;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.card.pinned .badge:not(.off){left:48px}
.sheen{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none}
.sheen::before{content:'';position:absolute;top:-20%;bottom:-20%;left:0;width:45%;background:linear-gradient(105deg,transparent,rgba(255,255,255,.26),transparent);transform:translateX(-160%) skewX(-18deg);animation:sheen 7s ease-in-out 1.2s infinite}
.card.pinned:nth-child(2n) .sheen::before{animation-delay:4s}
@keyframes sheen{0%,72%{transform:translateX(-160%) skewX(-18deg)}100%{transform:translateX(330%) skewX(-18deg)}}
@keyframes pinDrop{0%{opacity:0;transform:translateY(-18px) rotate(-45deg) scale(.6)}60%{opacity:1;transform:translateY(2px) rotate(8deg)}100%{transform:none}}

/* arrange mode (Raven only) */
.arr-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0 0 18px;padding:14px 18px;border-radius:20px}
.arr-bar span{display:block;font-size:.88rem}
.arr-open{display:flex;justify-content:flex-end;margin:-8px 0 14px}
.arr-ctl{position:absolute;top:10px;left:50%;z-index:6;display:flex;gap:8px;transform:translateX(-50%)}
.grip{display:inline-grid;place-items:center;width:40px;height:40px;color:var(--txt);cursor:grab;touch-action:none;user-select:none;background:var(--glass2);border:1px solid var(--edge);border-radius:14px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.grip svg{width:18px;height:18px;fill:currentColor}
.grip:active{cursor:grabbing}
.arr-ctl .grip,.arr-ctl .pinbtn{color:#fff;background:rgba(12,14,40,.62);border-color:rgba(255,255,255,.3)}
.pinbtn{display:grid;place-items:center;width:40px;height:40px;padding:0}
.pinbtn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.arr-ctl .pinbtn.on{background:var(--acc)}.pinbtn.on svg{fill:currentColor}
.table-wrap .grip{width:34px;height:34px;border-radius:12px}
#grid.arrange .fav,#grid.arrange .add,#grid.arrange .badge,#grid.arrange .pinmark{display:none}
#app:has(#grid.arrange) .hero input{display:none}
#grid.arrange .grid>.card:not(.dragging){animation:jiggle .32s ease-in-out infinite alternate!important}
#grid.arrange .grid>.card:nth-child(2n):not(.dragging){animation-delay:-.16s!important}
html[data-glass=lite] #grid.arrange .grid>.card{animation:none!important}
@keyframes jiggle{from{rotate:-.35deg}to{rotate:.35deg}}
.card.dragging,tr.dragging{position:relative;z-index:30;cursor:grabbing;transition:none!important;animation:none!important;will-change:transform;box-shadow:0 30px 70px rgba(0,0,0,.5)}
tr.dragging{background:var(--glass2)}
body.dragmode{user-select:none;-webkit-user-select:none;cursor:grabbing}
.grip:focus-visible,.pinbtn:focus-visible{outline:2px solid var(--a1);outline-offset:2px}

/* cards that redraw in place (filter, search, pin, live update) glide instead of replaying the entrance */
#app.fx #grid.flip .card,#app.fx #grid.flip .card .img img,#grid.flip .card .img img{animation:none}
/* cards further down the page ease in as they scroll into view (browsers without scroll timelines keep the stagger above) */
@supports (animation-timeline:view()){
  #app.fx #grid:not(.flip) .grid>.card:nth-child(n+9){animation:revealIn linear both;animation-timeline:view();animation-range:entry 0% entry 65%;animation-delay:0s}
}
@keyframes revealIn{from{opacity:0;translate:0 38px;scale:.96}to{opacity:1;translate:0 0;scale:1}}

/* tilt under a mouse (the glow already follows it) */
@media(hover:hover) and (pointer:fine){
  .grid>.card:hover{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) scale(1.02)}
  .grid>.card.tilting{transition:transform .12s linear,box-shadow .3s}
  #grid.arrange .grid>.card:hover{transform:none}
}

/* picture flies into the cart */
.fly{position:fixed;z-index:300;border-radius:50%;background:var(--acc) center/cover no-repeat;border:2px solid rgba(255,255,255,.85);box-shadow:0 10px 30px rgba(10,132,255,.45);pointer-events:none;will-change:transform,opacity}

/* heart: pop and ring */
.fav.pop{animation:heartPop .55s var(--spring)}
@keyframes heartPop{0%{transform:scale(1);box-shadow:0 0 0 0 rgba(224,36,94,.55)}30%{transform:scale(1.35)}60%{transform:scale(.92)}100%{transform:scale(1.05);box-shadow:0 0 0 16px rgba(224,36,94,0)}}

/* bigger touch target for the + on phones */
@media(max-width:900px){.cap .add{width:42px;height:42px}.arr-bar{flex-direction:column;align-items:stretch}}
@media(prefers-reduced-motion:reduce){.sheen::before,.pinmark,.fly{animation:none!important}#grid.arrange .grid>.card{animation:none!important}}
/* ===== v15: liquid dock, ripples, theme wave, glass hero, dashboard, reveals ===== */
.nav h1{display:grid;place-items:center;width:52px;height:52px;margin:0}.nav h1 .logo{width:44px;height:44px;margin:0}
.nav button,.nav .pill{z-index:1}
.nav button.on:not(.primary){background:transparent;color:#fff}
.liquid{position:absolute;left:0;top:0;z-index:0;border-radius:999px;opacity:0;pointer-events:none;background:linear-gradient(135deg,var(--a1),#7d6bff 55%,var(--a2));box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 -6px 12px rgba(255,255,255,.12),0 8px 24px rgba(10,132,255,.4);transition:transform .6s var(--spring),width .6s var(--spring),height .6s var(--spring),opacity .3s}
.liquid.squish{animation:squish .6s var(--ease)}
@keyframes squish{0%{filter:blur(0);scale:1}30%{scale:1.22 .8;filter:blur(1px)}65%{scale:.94 1.08}100%{scale:1;filter:blur(0)}}
.nav button:active:not(:disabled){transform:scale(.84)}
button:active:not(:disabled){transform:scale(.95,.92)}
.rip{position:absolute;z-index:0;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(255,255,255,.6),rgba(255,255,255,.18) 45%,transparent 70%);transform:scale(0);animation:rip .75s var(--ease) forwards}
@keyframes rip{to{transform:scale(1);opacity:0}}
/* light/dark: a circle of the new colours grows from the button */
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}
::view-transition-new(root){animation:themeWave 1s cubic-bezier(.65,0,.35,1)}
@keyframes themeWave{from{clip-path:circle(0 at var(--tx,50%) var(--ty,50%))}to{clip-path:circle(var(--tr,150vmax) at var(--tx,50%) var(--ty,50%))}}
html.theme-anim *,html.theme-anim *::before{transition:background-color .6s,color .6s,border-color .6s,box-shadow .6s,fill .6s,stroke .6s!important}
/* transparent product pictures sit on white */
.img:has(img),.combo-imgs,.hp,.thumb{background:#fff}
.card .img img{object-fit:cover}
/* hero as a glass card with a photo collage */
.hero{position:relative;grid-template-columns:1.15fr .85fr;gap:10px 28px;align-items:center;margin:0 0 24px;padding:34px;overflow:hidden;background:var(--glass);border:1px solid var(--edge);border-right-color:var(--edge2);border-bottom-color:var(--edge2);border-radius:40px;box-shadow:var(--sh2),inset 0 1px 0 var(--edge);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.5);backdrop-filter:blur(var(--blur)) saturate(1.5)}
.hero::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,.22) 50%,transparent 65%);transform:translateX(-120%);animation:sheen 7s ease-in-out 1.5s infinite}
@keyframes sheen{0%,60%{transform:translateX(-120%)}100%{transform:translateX(120%)}}
.hero h2,.hero p,#herochips,.hero input{grid-column:1}.hero input{grid-row:auto;width:min(420px,100%)}
#herochips{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 8px}
.gchip{padding:7px 14px;font-size:.8rem;font-weight:600;background:var(--glass2);border:1px solid var(--edge);border-radius:999px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:fxIn .6s var(--ease) backwards}
.gchip:nth-child(2){animation-delay:.1s}.gchip:nth-child(3){animation-delay:.2s}
#heropics{position:relative;grid-column:2;grid-row:1/6;min-height:270px}#heropics.empty{display:none}
.hp{position:absolute;width:48%;aspect-ratio:4/5;margin:0;overflow:hidden;border:1px solid var(--edge);border-radius:26px;box-shadow:var(--sh3);animation:floaty 6s ease-in-out infinite}
.hp img{width:100%;height:100%;object-fit:cover;display:block}
.hp figcaption{position:absolute;left:8px;right:8px;bottom:8px;display:flex;justify-content:space-between;gap:8px;padding:7px 12px;font-size:.78rem;color:#fff;background:rgba(12,14,40,.5);border:1px solid rgba(255,255,255,.2);border-radius:16px;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.hp figcaption b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hp1{left:2%;top:6%;rotate:-6deg}.hp2{right:2%;top:0;rotate:5deg;animation-delay:-2s}.hp3{left:26%;bottom:0;rotate:-1.5deg;animation-delay:-4s;z-index:2}
@keyframes floaty{50%{translate:0 -10px}}
.hero h2{background-size:200% 100%;animation:shimmer 8s ease-in-out infinite alternate}
@keyframes shimmer{to{background-position:100% 0}}
/* dashboard */
.dash .panel h3{margin:0 0 10px;font-size:1.05rem;font-weight:600}.dash h3.sub{margin-top:18px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:16px}
.kpi{position:relative;display:flex;flex-direction:column;gap:2px;padding:18px 20px;border-radius:26px;overflow:hidden}
.kpi span{font-size:.8rem;font-weight:600;color:var(--muted)}.kpi b{font-size:2rem;font-weight:300;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.kpi small{color:var(--muted);font-size:.78rem}
.kpi:first-child{background:linear-gradient(145deg,rgba(10,132,255,.35),rgba(191,90,242,.3))}
.dgrid{display:grid;grid-template-columns:1.6fr 1fr;gap:16px}.dgrid .panel{margin:0}
.chart{width:100%;height:auto;display:block;overflow:visible}.chart .gl{stroke:var(--edge2);stroke-width:1}.chart .ax{fill:var(--muted);font:500 11px var(--font)}
.chart .ln{fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.4s var(--ease) forwards}
@keyframes draw{to{stroke-dashoffset:0}}.chart .area{animation:imgFade 1.2s ease .3s backwards}
.chart .bar{fill:url(#barg);fill:var(--a1);opacity:.9;transform-box:fill-box;transform-origin:50% 100%;animation:grow .7s var(--ease) backwards;animation-delay:calc(var(--i)*20ms)}
.chart .bar:hover{fill:var(--a2)}@keyframes grow{from{transform:scaleY(0)}}
.legendline{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:.8rem;color:var(--muted)}.legendline i,.legend i{display:inline-block;width:10px;height:10px;border-radius:50%}.legendline i+*{margin-right:10px}
.donutbox{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.donut{width:150px;height:150px;flex:none}.donut .dt{fill:var(--txt);font:300 22px var(--font)}
.arc{animation:arcIn 1s var(--ease) backwards;animation-delay:calc(var(--i)*90ms)}@keyframes arcIn{from{stroke-width:0;opacity:0}}
.legend{list-style:none;margin:0;padding:0;display:grid;gap:6px;font-size:.84rem;flex:1;min-width:140px}.legend li{display:flex;align-items:center;gap:8px}.legend b{margin-left:auto}
.hbars{display:grid;gap:12px}.hb{display:grid;grid-template-columns:minmax(80px,1.1fr) 2fr auto;align-items:center;gap:10px;font-size:.85rem;animation:fxIn .5s var(--ease) backwards;animation-delay:calc(var(--i)*70ms)}
.hl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ht{height:10px;background:var(--field);border-radius:6px;overflow:hidden}.ht i{display:block;height:100%;border-radius:6px;transform-origin:left;animation:barx 1s var(--ease) backwards}@keyframes barx{from{transform:scaleX(0)}}
.dnote{margin:14px 4px 0;font-size:.82rem}
@media(max-width:900px){.dgrid{grid-template-columns:1fr}}
/* scroll reveals and general life */
[data-rv]{opacity:0;transform:translateY(22px) scale(.985)}
[data-rv].rv-in{opacity:1;transform:none;transition:opacity .6s var(--ease) var(--rd,0ms),transform .7s var(--ease) var(--rd,0ms)}
.tabs button{animation:fxIn .5s var(--ease) backwards}.tabs button:nth-child(2){animation-delay:.04s}.tabs button:nth-child(3){animation-delay:.08s}.tabs button:nth-child(4){animation-delay:.12s}.tabs button:nth-child(5){animation-delay:.16s}.tabs button:nth-child(n+6){animation-delay:.2s}
tbody tr{transition:background .25s}tbody tr:hover{background:var(--glass)}
.pill{animation:popIn .4s var(--spring) backwards}.cat-title::before{animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{50%{transform:scale(1.5);opacity:.6}}
.panel,.stat,.kpi{transition:transform .4s var(--spring),box-shadow .3s}.panel:hover,.kpi:hover,.stat:hover{transform:translateY(-3px);box-shadow:var(--sh3),inset 0 1px 0 var(--edge)}
.nav button{transition:background .25s,transform .45s var(--spring)}
#toast{transition:.5s var(--spring)}
@media(max-width:900px){
.hero{grid-template-columns:1fr;padding:24px 18px;border-radius:32px}.hero input{width:100%}
#heropics{grid-column:1;grid-row:auto;min-height:0;display:flex;gap:10px;margin-top:10px}.hp{position:relative;inset:auto;flex:1;width:auto;rotate:0deg;translate:0}.hp3{left:auto}.hp figcaption{font-size:.7rem;padding:5px 8px}.hp figcaption span{display:none}
.nav{max-width:calc(100% - 16px);padding:7px;gap:2px}.nav .tools,.nav nav{gap:2px}.nav button,.nav .pill,.nav h1{width:44px;height:44px;flex:0 1 44px;min-width:0}.nav h1{display:none}
}
/* fixes found while testing */
.stat b{font-size:clamp(1.6rem,2.4vw,2.3rem);white-space:nowrap;letter-spacing:-.04em}
.donut .ax{fill:var(--muted);font:500 11px var(--font)}
@media(max-width:900px){
.nav{width:auto;justify-content:center}.nav .tools{flex:0 0 auto}.nav .pill{display:none}
#theme{display:grid!important}
}
/* category switch wraps instead of cutting a tab off */
.cats{flex-wrap:wrap;overflow:visible;max-width:100%}.tile{flex:1 1 auto;text-align:center}
@media(min-width:901px){.tile{flex:0 1 auto}}
/* ===== grouped admin tabs ===== */
.subtabs{display:inline-flex;flex-wrap:wrap;gap:4px;margin:0 0 16px;padding:5px;max-width:100%;background:var(--glass);border:1px solid var(--edge);border-radius:999px;animation:fxIn .45s var(--ease) backwards}
.subtabs button{padding:9px 18px;font-size:.85rem;color:var(--muted);background:transparent;border-color:transparent;box-shadow:none}
.subtabs button.primary{color:#fff;background:var(--acc);box-shadow:0 6px 18px rgba(10,132,255,.35)}
/* ===== new logo animation: glass drops merge, the logo pops out, a shine passes over it ===== */
#boot .boot-bar{display:none}#boot.slow .boot-bar{display:block}
#boot .boot-logo{width:180px;height:180px}
#boot .boot-orbs{position:absolute;inset:0;filter:url(#goo)}
#boot .boot-orbs i{position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px;border-radius:50%;animation:lgOrb 1.05s cubic-bezier(.65,0,.35,1) .1s both}
#boot .boot-logo::before{content:'';position:absolute;inset:46px;border:2px solid rgba(255,255,255,.7);border-radius:28%;opacity:0;animation:lgRing 1.2s var(--ease) 1s backwards}
#boot .boot-logo::after{content:'';position:absolute;inset:46px;z-index:3;border-radius:28%;pointer-events:none;background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.8) 50%,transparent 70%) 160% 0/260% 100% no-repeat;mix-blend-mode:overlay;-webkit-backdrop-filter:none;backdrop-filter:none;border:0;box-shadow:none;animation:lgSweep 2.6s ease-in-out 1.35s infinite}
#boot .boot-logo img,#boot.go .boot-logo img{position:relative;z-index:2;width:88px;height:88px;animation:lgPop .85s var(--spring) .8s backwards,lgFloat 3.2s ease-in-out 1.8s infinite}
#boot::after{content:'';position:absolute;width:460px;height:460px;max-width:120vw;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(125,107,255,.38),transparent 65%);animation:lgGlow 1.8s var(--ease) .5s backwards}
#boot .boot-title{animation:none}
#boot .boot-title span{background:linear-gradient(120deg,var(--txt) 10%,#7aa7ff 55%,#c07cff);-webkit-background-clip:text;background-clip:text;color:transparent;animation:bsLetter .7s var(--ease) backwards;animation-delay:calc(1.05s + var(--i)*.05s)}
#boot .boot-orbs i,#boot .boot-logo::before,#boot .boot-logo::after,#boot::after{animation-play-state:paused}
#boot.go .boot-orbs i,#boot.go .boot-logo::before,#boot.go .boot-logo::after,#boot.go::after{animation-play-state:running}
@keyframes lgOrb{from{transform:translate(var(--x),var(--y)) scale(.55)}55%{transform:translate(0,0) scale(1.15)}100%{transform:translate(0,0) scale(0)}}
@keyframes lgPop{from{opacity:0;transform:scale(.35) rotate(-14deg);filter:blur(12px)}to{opacity:1;transform:none;filter:blur(0)}}
@keyframes lgFloat{50%{transform:translateY(-6px)}}
@keyframes lgSweep{0%,35%{background-position:160% 0}100%{background-position:-60% 0}}
@keyframes lgRing{0%{transform:scale(1);opacity:0}12%{opacity:.9}100%{transform:scale(2.7);opacity:0}}
@keyframes lgGlow{from{opacity:0;transform:scale(.4)}to{opacity:1;transform:none}}
.subtabs{display:flex;width:fit-content}
/* ===== liquid pills for tab bars + the accounts download ===== */
.subrow{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 16px}.subrow .subtabs{margin:0}
.subtabs,#app .cats,#app .chips{position:relative}
@media(max-width:900px){#app>.tabs{position:relative}}
.subtabs>button,.tabs>button,.cats>button,.chips>button{position:relative;z-index:1}
.lq{position:absolute;left:0;top:0;z-index:0;opacity:0;pointer-events:none;background:var(--acc);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 -6px 12px rgba(255,255,255,.12),0 8px 22px rgba(10,132,255,.38);transition:transform .6s var(--spring),width .6s var(--spring),height .6s var(--spring),opacity .3s}
.lq.squish{animation:squish .6s var(--ease)}
.subtabs button.primary,.tabs>button.primary,.cats .tile.on,.cats .tile.on:hover:not(:disabled),.chips>button.primary{background:transparent;border-color:transparent;box-shadow:none;color:#fff}
.subtabs button.primary:hover:not(:disabled),.tabs>button.primary:hover:not(:disabled),.chips>button.primary:hover:not(:disabled){background:transparent;filter:none}


/* ===== v19: calmer boot (no logo, no square), animations stay inside their boxes, marketing visuals ===== */
#boot .boot-bar{display:block;width:190px}
#boot .boot-title{font-size:2.4rem}
/* a click ripple never leaves the button it started in */
button:has(> .rip){overflow:hidden}
/* the sliding pill squeezes only a little, so it never stretches over its neighbours */
@keyframes squish{0%{scale:1}35%{scale:1.05 .94}70%{scale:.98 1.03}100%{scale:1}}
@keyframes heartPop{0%{transform:scale(1);box-shadow:0 0 0 0 rgba(224,36,94,.5)}30%{transform:scale(1.22)}60%{transform:scale(.95)}100%{transform:scale(1.05);box-shadow:0 0 0 7px rgba(224,36,94,0)}}
@media(hover:hover) and (pointer:fine){.grid>.card:hover{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) scale(1.012)}}
.card .img{contain:paint}

/* "New" and "Best seller" tags */
.tag{position:absolute;top:10px;left:10px;z-index:3;padding:5px 11px;border-radius:999px;font-size:.72rem;font-weight:800;letter-spacing:.03em;color:#fff;box-shadow:0 6px 16px rgba(0,0,0,.25);pointer-events:none}
.tag.hot{background:linear-gradient(135deg,#ff9f0a,#ff375f)}
.tag.new{background:linear-gradient(135deg,var(--a1),#5e5ce6)}
.card.pinned .tag{top:52px}
@media(max-width:520px){.tag{top:8px;left:8px;padding:4px 9px;font-size:.66rem}.card.pinned .tag{top:46px}}

/* scrolling announcement strip: the words slide inside the strip and never leave it */
.ticker{overflow:hidden;margin:0 0 22px;padding:11px 0;border-radius:999px;background:var(--glass);border:1px solid var(--edge);box-shadow:var(--sh2);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.ticker-track{display:flex;gap:34px;width:max-content;animation:tick 32s linear infinite}
.ticker-track span{white-space:nowrap;font-weight:700;font-size:.9rem;color:var(--txt)}
.ticker-track span::first-letter{color:var(--a1)}
.ticker:hover .ticker-track{animation-play-state:paused}
@keyframes tick{to{transform:translateX(calc(-50% - 17px))}}
@media(prefers-reduced-motion:reduce){.ticker-track{animation:none;flex-wrap:wrap;width:auto;justify-content:center;gap:8px 22px}}

/* glow when an order is placed */
.glow-burst{position:fixed;inset:0;z-index:400;pointer-events:none;background:radial-gradient(circle at 50% 58%,rgba(10,132,255,.42),rgba(191,90,242,.28) 38%,transparent 68%);box-shadow:inset 0 0 140px rgba(10,132,255,.5),inset 0 0 60px rgba(191,90,242,.4);animation:glowBloom 1.6s var(--ease) forwards}
@keyframes glowBloom{0%{opacity:0}28%{opacity:1}100%{opacity:0}}

/* friendly picture when a list is empty */
.empty{display:grid;justify-items:center;gap:8px;text-align:center;padding:34px 18px}
.empty svg{width:140px;height:auto;animation:floaty 3.4s ease-in-out infinite}
.empty p{margin:0;font-weight:600;color:var(--muted)}

/* ===== v15: dark-mode contrast, carousel, sellers, recently viewed, small touches ===== */
/* badges and tags: every label now clears 4.5:1 against its own background */
.tag.hot{background:linear-gradient(135deg,#c2410c,#be123c)}
.tag.new{background:linear-gradient(135deg,#0056c7,#4a47c9)}
.badge.off{background:linear-gradient(135deg,#d62e55,#b5174f)}
.badge.low{left:10px;right:auto;color:#2b1500;background:linear-gradient(135deg,#ffc247,#ff9a3c);border-color:rgba(255,255,255,.5);text-shadow:none}
.badge.low.stack{top:44px}
.card.pinned .tag{left:48px}.card.pinned .badge.low.stack{left:10px}
.badge.chip{pointer-events:auto;cursor:default;overflow:hidden;display:inline-grid}
.badge.chip i,.badge.chip u{grid-area:1/1;font-style:normal;text-decoration:none;transition:opacity .25s var(--ease),transform .25s var(--ease)}
.badge.chip u{opacity:0;transform:translateY(8px)}
.badge.chip:hover i,.badge.chip:focus-visible i{opacity:0;transform:translateY(-8px)}
.badge.chip:hover u,.badge.chip:focus-visible u{opacity:1;transform:none}
.stag{display:inline-block;padding:2px 9px;border-radius:8px;font-size:.74rem;font-weight:700;color:hsl(var(--h) 85% 76%);background:hsl(var(--h) 70% 50%/.2);border:1px solid hsl(var(--h) 70% 60%/.5)}
:root[data-theme=light] .stag{color:hsl(var(--h) 75% 28%);background:hsl(var(--h) 80% 55%/.16)}
.pill.st-packed,.pill.st-completed{color:#8ff0b8}.pill.st-cancelled{color:#ffb3c0}.pill.st-pending{color:#ffd980}
:root[data-theme=light] .pill.st-packed,:root[data-theme=light] .pill.st-completed{color:#146c43}:root[data-theme=light] .pill.st-cancelled{color:#a4243b}:root[data-theme=light] .pill.st-pending{color:#8a5a00}

/* hero divider, sticky chips */
.divider{height:1px;margin:2px 8% 18px;background:linear-gradient(90deg,transparent,var(--edge),transparent)}
#app .cats{position:sticky;top:calc(env(safe-area-inset-top,0px) + 8px);z-index:20;margin-bottom:10px;padding:8px 8px 8px;border-radius:26px;background:var(--glass);-webkit-backdrop-filter:blur(var(--blur));backdrop-filter:blur(var(--blur))}

/* highlights carousel */
.slides{position:relative;margin:0 0 22px;padding:0;border-radius:28px;overflow:hidden}
.sl-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.sl-track::-webkit-scrollbar{display:none}
.slide{position:relative;display:flex;align-items:flex-end;flex:0 0 100%;min-height:240px;scroll-snap-align:start;background:var(--solid)}
.slide>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.slide::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(7,10,28,.9),rgba(7,10,28,.62) 70%,rgba(7,10,28,.2))}
.sl-txt{position:relative;z-index:1;max-width:min(540px,86%);padding:26px 28px 44px;color:#fff}
.sl-k{display:inline-block;margin-bottom:8px;padding:4px 11px;border-radius:999px;font-size:.7rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#fff;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.4)}
.sl-txt h3{margin:0 0 6px;font-size:clamp(1.3rem,3.6vw,2rem);line-height:1.1;letter-spacing:-.03em;color:#fff}
.sl-txt p{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0 0 14px;color:rgba(255,255,255,.92)}
.sl-dots{position:absolute;left:0;right:0;bottom:14px;z-index:2;display:flex;justify-content:center;gap:8px}
.sl-dots button{min-width:0;min-height:0;width:8px;height:8px;padding:0;border:0;border-radius:8px;background:rgba(255,255,255,.55);box-shadow:none;transition:width .3s var(--ease),background .3s}
.sl-dots button.on{width:24px;background:#fff}

/* seller spotlight, recently viewed */
.spot,.rv{display:flex;gap:12px;overflow-x:auto;padding:2px 2px 18px;scrollbar-width:none}.spot::-webkit-scrollbar,.rv::-webkit-scrollbar{display:none}
.sp{flex:0 0 min(310px,84%);display:flex;align-items:center;gap:14px;padding:12px;border-radius:24px}
.sp img{flex:none;width:86px;height:86px;object-fit:cover;border-radius:18px}
.sp b{display:block;text-transform:capitalize}.sp small{display:block;margin:2px 0 9px;color:var(--muted)}
.rv-card{position:relative;flex:0 0 150px;overflow:hidden;border-radius:20px;background:var(--glass);border:1px solid var(--edge)}
.rv-card img,.rv-card .ph{display:block;width:100%;height:110px;object-fit:cover;background:var(--glass2)}
.rv-b{padding:9px 44px 11px 12px}.rv-b b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.88rem}.rv-b span{font-size:.82rem;color:var(--muted)}
.rv-card .add{position:absolute;right:8px;bottom:8px;width:32px;height:32px;min-height:0;padding:0}
.sfilter{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 14px;padding:10px 14px;border-radius:18px}

/* cart bulk-discount ring, empty cart */
.bulk{display:inline-flex;align-items:center;gap:6px}
.ring{width:22px;height:22px;flex:none;fill:none;stroke-width:3;stroke-linecap:round}
.ring circle{stroke:var(--edge)}.ring .v{stroke:var(--ok);transform:rotate(-90deg);transform-origin:center;transition:stroke-dasharray .6s var(--ease)}
.ring path{stroke:var(--ok);stroke-width:2.4;stroke-linejoin:round}
#dlg .empty{padding:10px 0 18px}

/* paid tick, skeletons, tooltip, quick jumps */
.chk{display:inline-block;width:14px;height:14px;margin:0 5px -2px 0;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.chk circle{stroke-dasharray:63;stroke-dashoffset:63;animation:chkDraw .5s var(--ease) forwards}
.chk path{stroke-dasharray:20;stroke-dashoffset:20;animation:chkDraw .35s .3s var(--ease) forwards}
@keyframes chkDraw{to{stroke-dashoffset:0}}
.skel i{position:relative;display:block;height:56px;margin:10px 0;overflow:hidden;border-radius:16px;background:var(--glass)}
.skel i::after{content:'';position:absolute;inset:0;background:linear-gradient(100deg,transparent 20%,var(--glass2) 50%,transparent 80%);transform:translateX(-100%);animation:skel 1.4s ease-in-out infinite}
@keyframes skel{to{transform:translateX(100%)}}
.tip{position:fixed;z-index:400;max-width:240px;padding:9px 13px;border-radius:14px;font-size:.8rem;line-height:1.35;color:var(--txt);background:var(--solid);border:1px solid var(--edge);box-shadow:var(--sh2);opacity:0;pointer-events:none;transform:translate(-50%,-100%) translateY(4px);transition:opacity .2s,transform .2s var(--ease)}
.tip.on{opacity:1;transform:translate(-50%,-100%)}
.quick{margin-right:4px}.quick button{border-radius:14px}

/* the cart button squashes when pressed, then springs back (scale is separate from the bar's own transform) */
@keyframes cartPress{0%{scale:1}22%{scale:.86}58%{scale:1.14}100%{scale:1}}
.bump{animation:cartPress .5s var(--spring)!important}
@media(max-width:700px){.sl-txt{padding:20px 20px 40px}.slide{min-height:220px}.sp img{width:72px;height:72px}}
@media(prefers-reduced-motion:reduce){.skel i::after,.chk circle,.chk path{animation:none;stroke-dashoffset:0}}

:root{--acc:linear-gradient(135deg,#0070e0,#6a5cf0 55%,#a63fe0)} /* white text on the brand gradient now clears 4.5:1 */
@media(max-width:700px){.slide::after{background:rgba(7,10,28,.68)}}

/* ===== phones / Android: one-row bars, no overlaps, steady cart sheet, calm touch behaviour ===== */
html:has(dialog[open]),body:has(dialog[open]){overflow:hidden}
dialog{overscroll-behavior:contain}
body:has(dialog[open]) #cartbar{display:none}
.sl-dots button{position:relative}.sl-dots button::after{content:'';position:absolute;inset:-14px -6px}
html.theme-anim *,html.theme-anim *::before,html.theme-anim *::after{transition:background-color .7s ease,color .7s ease,border-color .7s ease,box-shadow .7s ease,fill .7s ease,stroke .7s ease!important}
html.theme-anim body::before{animation:auroraIn .9s ease both}
html.theme-anim #theme svg{animation:themeSpin .8s var(--ease)}
@keyframes auroraIn{from{opacity:0}to{opacity:1}}
@keyframes themeSpin{from{transform:rotate(-200deg) scale(.4)}to{transform:none}}
@media(hover:none){
  button:hover:not(:disabled),.nav button:hover:not(:disabled){transform:none}
  .panel:hover,.kpi:hover,.stat:hover{transform:none;box-shadow:var(--sh2),inset 0 1px 0 var(--edge)}
}
@media(max-width:900px){
  header.nav,header.nav .tools,header.nav nav{flex-wrap:nowrap}
  header.nav{width:auto;max-width:calc(100% - 16px)}
  header.nav button,header.nav .pill{flex:1 1 40px;min-width:34px;max-width:48px;height:44px}
  #helpfab{display:none!important}
  #tour-btn{display:grid!important}
  dialog[open],dialog[data-kind=cart][open]{max-height:92dvh}
  .subrow{flex-wrap:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none}.subrow::-webkit-scrollbar{display:none}
  .subtabs{flex:none;flex-wrap:nowrap}
  .subtabs button,.subrow>button{flex:none;white-space:nowrap}
  #app>.tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}#app>.tabs::-webkit-scrollbar{display:none}#app>.tabs>button{flex:none;white-space:nowrap}
  .stat{padding:14px}.stat b{white-space:normal;overflow-wrap:anywhere;font-size:clamp(1.25rem,5.6vw,1.9rem)}
  .kpi b{font-size:clamp(1.4rem,7vw,2rem)}
}
/* ===== phone tap sizes and wrapping text in buttons ===== */
@media(max-width:900px){
  main button,dialog button{white-space:normal;overflow-wrap:anywhere;min-height:40px}
  .subtabs button,.subrow>button,#app>.tabs>button,.cats>button{white-space:nowrap}
  .qty button{min-width:42px;min-height:42px;padding:6px 12px}
  .qty b{min-width:2ch}
  .sl-dots button{min-height:0}
}
/* ===== admin group tabs share the row equally (no cut-off words); the sub-buttons never wrap ===== */
@media(max-width:900px){
  #app>.tabs{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:2px;padding:5px;overflow:visible}
  #app>.tabs>button{min-width:0;padding:10px 2px;min-height:40px;font-size:clamp(.66rem,3vw,.84rem);text-align:center;overflow:hidden;text-overflow:clip}
  .subrow{flex-wrap:wrap;overflow:visible}
  .subtabs{max-width:100%;overflow-x:auto;scrollbar-width:none}.subtabs::-webkit-scrollbar{display:none}
}

/* ===== the theme wave: old colours stay underneath, the new ones grow out of the button ===== */
::view-transition{background:var(--vt-old,transparent)}
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}
::view-transition-old(root){z-index:1}
::view-transition-new(root){z-index:2;animation:themeWave 1s cubic-bezier(.45,0,.2,1) both}
/* ===== the cart and every popup stay pinned to the screen (they had slipped into the page and scrolled away with it) ===== */
html{scrollbar-gutter:stable}
dialog:modal,dialog[open]{position:fixed;inset:0}

/* ===== Lenis smooth scrolling (base rules) ===== */
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:clip}
.lenis.lenis-smooth iframe{pointer-events:none}

/* ===== Cart: phones keep the old sheet exactly; desktop gets a structured drawer ===== */
@media(max-width:640px){
  .cart-head,.cart-head>div,.cart-body,.cart-extra,.cart-foot{display:contents}
  .cart-count,.cart-x,.sum-d{display:none}
}
@media(min-width:641px){
  .sum-m{display:none}
  dialog[data-kind=cart][open]{display:flex;flex-direction:column;padding:0;overflow:hidden}
  dialog[data-kind=cart] .cart-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:none;padding:24px 28px 16px;border-bottom:1px solid var(--edge2)}
  dialog[data-kind=cart] .cart-head>div{display:flex;align-items:center;gap:12px;min-width:0}
  dialog[data-kind=cart] .cart-head h2{margin:0;font-size:1.45rem;font-weight:700;letter-spacing:-.01em}
  .cart-count{padding:3px 11px;font-size:.78rem;font-weight:600;color:var(--muted);background:var(--field);border:1px solid var(--edge);border-radius:999px}
  .cart-x{display:grid;place-items:center;width:36px;height:36px;padding:0;font-size:1.35rem;line-height:1;border-radius:50%}
  dialog[data-kind=cart] .cart-body{flex:1;min-height:0;overflow-y:auto;padding:4px 28px 20px;overscroll-behavior:contain}
  dialog[data-kind=cart] .cline{display:grid;grid-template-columns:1fr auto;grid-template-areas:"t p" "q r";align-items:center;gap:10px 16px;padding:16px 0}
  .cline .cl-t{grid-area:t;font-weight:600;line-height:1.35}
  .cline .cl-t small{display:flex;margin-top:4px;font-weight:500}
  .cline .cl-p{grid-area:p;margin:0;font-size:1.02rem;font-variant-numeric:tabular-nums;text-align:right}
  .cline .qty{grid-area:q;justify-self:start;gap:2px;padding:3px;background:var(--field);border:1px solid var(--edge);border-radius:999px}
  .cline .qty button{width:30px;min-width:30px;height:30px;padding:0;line-height:1;border-radius:50%}
  .cline .qty b{min-width:2.6ch}
  .cline .cl-r{grid-area:r;justify-self:end;padding:4px 10px;font-size:.78rem;color:var(--muted);background:transparent;border-color:transparent;box-shadow:none}
  .cline .cl-r:hover:not(:disabled){color:var(--bad)}
  .cart-extra{margin-top:8px;padding-top:18px;border-top:1px solid var(--edge2)}
  .cart-extra label{font-size:.82rem;font-weight:600;color:var(--muted)}
  dialog[data-kind=cart] .cart-foot{flex:none;padding:18px 28px 24px;background:var(--field);border-top:1px solid var(--edge)}
  .sum-d{display:grid;gap:6px;margin:0 0 12px;font-variant-numeric:tabular-nums}
  .sum-d>div{display:flex;justify-content:space-between;gap:12px;font-size:.92rem;color:var(--muted)}
  .sum-d .sum-off b{color:var(--ok)}
  .sum-d .sum-total{margin-top:6px;padding-top:12px;border-top:1px dashed var(--edge);font-size:1.3rem;font-weight:700;color:var(--txt)}
  .cart-foot>p.muted{margin:0 0 8px;font-size:.84rem}
  .cart-foot .notice{margin:10px 0 14px;padding:10px 14px;font-size:.8rem;border-radius:14px}
  .cart-foot button.primary{width:100%;min-height:48px;font-size:1rem}
  .cart-foot .close-btn{display:none}
  dialog[data-kind=cart] .empty{padding:36px 0 20px;text-align:center}
}

/* ===== Desktop polish (wide screens with a mouse only) + admin bar fixes ===== */
@media(min-width:901px) and (pointer:fine){
  /* scrollbars */
  html{scrollbar-width:thin;scrollbar-color:rgba(125,107,255,.5) transparent}
  ::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}
  ::-webkit-scrollbar-thumb{background:rgba(125,107,255,.4);background-clip:padding-box;border:3px solid transparent;border-radius:10px}
  ::-webkit-scrollbar-thumb:hover{background:rgba(125,107,255,.75);background-clip:padding-box}
  /* buttons: hover lift, press glow */
  button{transition:transform .35s var(--spring),background .2s,box-shadow .25s,border-color .2s}
  button:hover:not(:disabled){border-color:rgba(255,255,255,.4)}
  button:active:not(:disabled){box-shadow:0 0 0 3px rgba(10,132,255,.22),0 0 22px rgba(10,132,255,.45),var(--sh1),inset 0 1px 0 var(--edge)}
  button.primary:hover:not(:disabled){box-shadow:0 12px 34px rgba(10,132,255,.55),0 0 0 1px rgba(255,255,255,.25),inset 0 1px 0 rgba(255,255,255,.5)}
  button.primary:active:not(:disabled){box-shadow:0 0 0 4px rgba(10,132,255,.3),0 0 32px rgba(125,107,255,.7),inset 0 1px 0 rgba(255,255,255,.4)}
  button.danger:active:not(:disabled){box-shadow:0 0 0 3px rgba(255,95,122,.28),0 0 26px rgba(255,95,122,.6)}
  /* fields */
  input,select,textarea{transition:box-shadow .25s,border-color .2s,background .2s}
  input:focus,select:focus,textarea:focus{outline:none;border-color:var(--a1);box-shadow:0 0 0 3px rgba(10,132,255,.25),0 0 20px rgba(10,132,255,.25)}
  /* header, cards, panels, dialogs, toast */
  .nav{transition:box-shadow .4s var(--ease)}
  .scrolled .nav{box-shadow:0 22px 60px -10px rgba(10,132,255,.35),var(--sh3),inset 0 1px 0 var(--edge)}
  .grid>.card{transition:transform .45s var(--spring),box-shadow .35s}
  .grid>.card:hover{box-shadow:var(--sh3),0 0 0 1px rgba(125,107,255,.35),0 22px 60px -18px rgba(10,132,255,.5)}
  .panel:hover,.kpi:hover,.stat:hover{box-shadow:var(--sh3),0 0 0 1px rgba(125,107,255,.28),inset 0 1px 0 var(--edge)}
  dialog{box-shadow:var(--sh3),0 0 0 1px var(--edge),0 30px 80px -24px rgba(10,132,255,.4),inset 0 1px 0 var(--edge)}
  #toast.show{box-shadow:var(--sh3),0 0 28px rgba(10,132,255,.35)}
  #cartbar:hover{box-shadow:0 14px 40px rgba(10,132,255,.55)}
  /* tables */
  th{padding:10px 12px;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase}
  td{padding:14px 12px;font-variant-numeric:tabular-nums}
  tbody tr{transition:background .2s,box-shadow .2s}
  tbody tr:hover{background:var(--glass);box-shadow:inset 3px 0 0 var(--a1)}
  /* admin tab bars */
  #app:has(>.tabs)>.tabs{gap:6px;max-height:calc(100vh - 116px);overflow-x:hidden;overflow-y:auto}
  .tabs button{padding:12px 16px;font-size:.9rem}
  .tabs>button:not(.primary):hover,.subtabs button:not(.primary):hover{color:var(--txt);background:var(--glass2)}
  /* admin bars: the horizontal bars used to start and end at different places on every row (each row sized its own number column) */
  .hbars{gap:14px}
  .hb{grid-template-columns:minmax(96px,1.2fr) 3fr 96px;gap:14px;font-size:.86rem}
  .hb b{text-align:right}
  .hl{color:var(--muted);transition:color .2s}.hb:hover .hl{color:var(--txt)}
  .ht{height:12px;border-radius:8px;box-shadow:inset 0 1px 2px rgba(0,0,0,.25)}
  .ht i{min-width:6px;border-radius:8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4),0 0 14px -2px rgba(125,107,255,.55);transition:filter .25s}
  .ht i[style*="width:0%"]{min-width:0}
  .hb:hover .ht i{filter:brightness(1.15)}
  /* admin column chart: real gradient, glow on hover, softer grid */
  .chart .bar{fill:url(#barg);opacity:1;transition:filter .2s}
  .chart .bar:hover{fill:url(#barg);filter:drop-shadow(0 0 8px rgba(10,132,255,.85))}
  .chart .gl{stroke-dasharray:3 6}
}

/* ===== Ad backgrounds: every highlight slide gets its own moving colour glow ===== */
.slide::before{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.55;background:radial-gradient(46% 70% at 88% 18%,var(--ad1,var(--a1)),transparent 70%),radial-gradient(40% 60% at 72% 100%,var(--ad2,var(--a2)),transparent 70%);background-size:150% 150%;animation:adDrift 12s ease-in-out infinite alternate}
@keyframes adDrift{to{background-position:100% 100%}}
.slide[data-kind="Announcement"]{--ad1:var(--a1);--ad2:#7d6bff}
.slide[data-kind="Promo"]{--ad1:#ff9f0a;--ad2:#ff375f}
.slide[data-kind="New arrival"]{--ad1:#30d158;--ad2:#64d2ff}
.slide[data-kind="Best seller"]{--ad1:#ffd60a;--ad2:#ff453a}
.slide .sl-k{background:linear-gradient(135deg,var(--ad1,var(--a1)),var(--ad2,var(--a2)));border-color:rgba(255,255,255,.55);box-shadow:0 0 18px -2px var(--ad1,var(--a1));animation:adPulse 2.8s ease-in-out infinite}
@keyframes adPulse{50%{box-shadow:0 0 26px 2px var(--ad2,var(--a2))}}
.banner.glass{background-image:linear-gradient(110deg,rgba(10,132,255,.28),rgba(191,90,242,.28),rgba(255,159,10,.22),rgba(10,132,255,.28));background-size:300% 100%;animation:adSlide 10s linear infinite}
@keyframes adSlide{to{background-position:-300% 0}}
:root[data-glass=lite] .slide::before,:root[data-glass=lite] .banner.glass,:root[data-glass=lite] .slide .sl-k{animation:none}

/* ===== Sound switch ===== */
#sfx-btn{display:grid;place-items:center;width:40px;height:40px;padding:0}
#sfx-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ===== Order placed animation (phones and desktop) ===== */
#ordfx{position:fixed;inset:0;z-index:500;display:grid;place-items:center;padding:24px;background:rgba(5,7,22,.55);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);animation:ofIn .3s var(--ease)}
#ordfx.out{opacity:0;transition:opacity .35s}
.ordfx-card{position:relative;width:min(320px,90vw);padding:30px 24px 26px;text-align:center;color:var(--txt);background:var(--solid);border:1px solid var(--edge);border-radius:28px;box-shadow:var(--sh3),0 0 60px rgba(10,132,255,.45);animation:ofPop .6s var(--spring)}
.ordfx-card h3{margin:14px 0 4px;font-size:1.35rem}.ordfx-card p{margin:0;font-size:.9rem;color:var(--muted)}
.ordfx-check{width:84px;height:84px;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.ordfx-check circle{stroke:var(--ok);stroke-dasharray:145;stroke-dashoffset:145;animation:ofDraw .6s .1s var(--ease) forwards}
.ordfx-check path{stroke:var(--ok);stroke-dasharray:40;stroke-dashoffset:40;animation:ofDraw .4s .55s var(--ease) forwards}
.ordfx-burst{position:absolute;left:50%;top:72px;width:0;height:0}
.ordfx-burst i{position:absolute;left:-4px;top:-6px;width:8px;height:12px;border-radius:2px;background:var(--c);opacity:0;animation:ofBit 1.1s .45s var(--ease) forwards}
@keyframes ofIn{from{opacity:0}}
@keyframes ofPop{from{opacity:0;transform:scale(.7) translateY(20px)}}
@keyframes ofDraw{to{stroke-dashoffset:0}}
@keyframes ofBit{0%{opacity:1;transform:rotate(var(--a)) translateY(0) rotate(var(--r))}100%{opacity:0;transform:rotate(var(--a)) translateY(calc(var(--d) * -1)) rotate(calc(var(--r) + 540deg))}}
@media(prefers-reduced-motion:reduce){.ordfx-check circle,.ordfx-check path{stroke-dashoffset:0}}

/* ===== Startup: stacks of glass wipes (replaces the old logo intro) ===== */
#gw{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;overflow:hidden;background:var(--bg);color:var(--txt)}
#gw.out,#gw.skip{background:transparent}
#gw.skip{animation:gwFade .35s ease forwards}
@keyframes gwFade{to{opacity:0}}
#gw:not(.go) *{animation-play-state:paused!important} /* nothing starts until the first frame is painted */
.gw-cols,.gw-rows{position:absolute;inset:0;pointer-events:none}
/* layers: horizontal bars at the bottom, vertical strips lined up on top of them, shine/ribbons/wipes above both, title on top */
.gw-rows{z-index:0}.gw-cols{z-index:1}.gw-shine,.gw-ribbons,.gw-wipe{z-index:2}
.gw-cols,.gw-rows{display:flex}.gw-rows{flex-direction:column}
/* wave 1: tall glass strips slide in from above and below, one after another */
.gw-cols i{flex:1;margin-right:-1px;background:linear-gradient(180deg,rgba(255,255,255,.18),rgba(255,255,255,0) 42%,rgba(125,107,255,.22)),var(--bg);border-left:1px solid rgba(255,255,255,.16);box-shadow:inset 1px 0 0 rgba(255,255,255,.12),inset -24px 0 40px -28px rgba(10,132,255,.55);animation:gwColIn .8s var(--ease) calc(var(--i)*45ms) backwards}
@keyframes gwColIn{from{transform:translateY(calc(var(--s) * -105%))}}
/* wave 2: wide frosted bars slide across from left and right */
.gw-rows i{flex:1;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.13) 50%,rgba(255,255,255,0)),rgba(125,107,255,.07);border-top:1px solid rgba(255,255,255,.2);animation:gwRowIn .8s var(--ease) calc(.35s + var(--i)*50ms) backwards}
@keyframes gwRowIn{from{transform:translateX(calc(var(--s) * 105%))}}
/* a bright diagonal shine keeps passing over everything */
.gw-shine{position:absolute;inset:-20% -40%;pointer-events:none;background:linear-gradient(105deg,transparent 40%,rgba(255,255,255,.26) 50%,transparent 60%);transform:translateX(-100%);animation:gwShine 2.8s ease-in-out 1s infinite}
@keyframes gwShine{0%{transform:translateX(-60%)}60%,100%{transform:translateX(60%)}}
.gw-wipe{position:absolute;top:-10%;bottom:-10%;left:-50%;width:34%;pointer-events:none;opacity:0;transform:skewX(-18deg);background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.4),rgba(255,255,255,0))}
/* centre: title, progress, message */
.gw-center{position:relative;z-index:3;padding:0 24px;text-align:center}
.gw-title{display:flex;justify-content:center;font-size:clamp(2.4rem,9vw,4.2rem);font-weight:800;letter-spacing:-.04em;line-height:1}
.gw-title span{background:linear-gradient(120deg,var(--txt) 10%,#7aa7ff 55%,#c07cff);-webkit-background-clip:text;background-clip:text;color:transparent;animation:gwLetter .7s var(--ease) calc(.9s + var(--i)*.05s) backwards}
@keyframes gwLetter{from{opacity:0;transform:translateY(24px) scale(.9)}}
.gw-msg{max-width:340px;margin:16px auto 0;font-size:.9rem;color:var(--muted);opacity:0;transition:opacity .4s}.gw-msg.on{opacity:1}
/* leaving: the bars shoot away, then the strips push through, with three bright wipes crossing on top */
#gw.out .gw-rows i{animation:gwRowOut .55s cubic-bezier(.7,0,.3,1) calc(var(--i)*35ms) forwards}
@keyframes gwRowOut{to{transform:translateX(calc(var(--s) * -105%))}}
#gw.out .gw-cols i{animation:gwColOut .7s cubic-bezier(.7,0,.3,1) calc(.15s + (13 - var(--i))*40ms) forwards}
@keyframes gwColOut{to{transform:translateY(calc(var(--s) * 105%))}}
#gw.out .gw-center{animation:gwCenterOut .45s ease-in forwards}
@keyframes gwCenterOut{to{opacity:0;transform:scale(1.08)}}
#gw.out .gw-shine{animation:gwShineOut .9s ease-in forwards}
@keyframes gwShineOut{from{transform:translateX(-60%)}to{transform:translateX(120%)}}
#gw.out .gw-wipe{animation:gwWipe .9s cubic-bezier(.6,0,.3,1) calc(var(--w)*.18s) forwards}
@keyframes gwWipe{0%{opacity:1;transform:translateX(0) skewX(-18deg)}100%{opacity:1;transform:translateX(480%) skewX(-18deg)}}
:root[data-glass=lite] .gw-rows{display:none}

/* ===== v20: desktop cart covers the whole screen (two columns: items left, summary right); phones unchanged ===== */
@media(min-width:641px){
  dialog[data-kind=cart][open]{margin:0;width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:none;border-radius:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,32vw);grid-template-rows:auto minmax(0,1fr);animation:cartFull .45s var(--ease)}
  dialog[data-kind=cart]::backdrop{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
  @keyframes cartFull{from{opacity:0;transform:scale(1.03)}}
  dialog[data-kind=cart] .cart-head{grid-column:1/-1;padding:28px 6vw 20px}
  dialog[data-kind=cart] .cart-head h2{font-size:2rem}
  dialog[data-kind=cart] .cart-body{grid-column:1;grid-row:2;padding:8px 3vw 40px 6vw}
  dialog[data-kind=cart] .cart-foot{grid-column:2;grid-row:2;display:flex;flex-direction:column;justify-content:flex-start;padding:32px 3vw 32px 2.4vw;border-top:0;border-left:1px solid var(--edge);overflow-y:auto}
  dialog[data-kind=cart] .cline{grid-template-columns:72px 1fr auto auto;grid-template-areas:"i t q p" "i t r r";gap:6px 20px;padding:18px 0;border-bottom:1px solid var(--edge2)}
  .cline .cl-i{grid-area:i;width:72px;height:72px;object-fit:cover;border-radius:18px;background:var(--field)}
  .cline .cl-u{display:block;margin-top:2px;font-size:.8rem;font-weight:500;color:var(--muted)}
  .cline .qty{justify-self:end}
  .cart-foot .sum-total{font-size:1.7rem}
}
.cart-undo{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:10px 0;padding:10px 14px;font-size:.88rem;background:var(--field);border:1px solid var(--edge);border-radius:16px;animation:popIn .25s ease backwards}
.cart-tools{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 4px}
.cart-tools button,.cart-chips button{min-height:36px;padding:6px 14px;font-size:.82rem}
.cart-chips{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 0}
.cart-sug{margin-top:22px}.cart-sug h3{margin:0 0 10px;font-size:.95rem}
.cart-sug .sug-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.sug{display:flex;align-items:center;gap:10px;padding:8px;background:var(--field);border:1px solid var(--edge);border-radius:18px}
.sug img,.sug .ph{width:46px;height:46px;object-fit:cover;border-radius:12px;flex:none}
.sug b{display:block;font-size:.88rem;line-height:1.25}.sug span{font-size:.8rem;color:var(--muted)}
.sug button{margin-left:auto;width:36px;min-width:36px;height:36px;padding:0;border-radius:50%}
.cart-save{margin:0 0 12px;padding:8px 12px;font-size:.84rem;font-weight:600;color:var(--ok);background:var(--field);border:1px dashed var(--edge);border-radius:14px}
.cart-keys{margin:10px 0 0;font-size:.74rem;color:var(--muted)}
@media(max-width:640px){.cline .cl-i,.cart-keys{display:none}}

/* ===== v21: liquid glass. Header, popups (cart), toast and cart bar bend what is behind them (Chrome/Edge; other browsers keep the normal frost). ===== */
.glass,dialog,.stat{box-shadow:var(--sh2),inset 0 1px 0 rgba(255,255,255,.6),inset 1px 0 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1),inset 0 0 24px rgba(255,255,255,.08)}
header.glass,dialog,#toast,.glass.panel{-webkit-backdrop-filter:blur(calc(var(--blur) * .6)) saturate(1.8) brightness(1.04);backdrop-filter:blur(calc(var(--blur) * .6)) saturate(1.8) brightness(1.04) url(#liquid-lens)}
header.glass,dialog,.glass.panel{background-image:linear-gradient(135deg,rgba(255,255,255,.22),rgba(255,255,255,0) 38%,rgba(255,255,255,0) 62%,rgba(255,255,255,.1))}
.card:hover,button:hover:not(:disabled){box-shadow:var(--sh2),inset 0 1px 0 rgba(255,255,255,.7),inset 0 0 0 1px rgba(255,255,255,.18)}
:root[data-glass=lite] header.glass,:root[data-glass=lite] dialog,:root[data-glass=lite] #toast,:root[data-glass=lite] .glass.panel{-webkit-backdrop-filter:blur(var(--blur)) saturate(1.6);backdrop-filter:blur(var(--blur)) saturate(1.6)}
@media(prefers-reduced-transparency:reduce){header.glass,dialog,#toast,.glass.panel{-webkit-backdrop-filter:none;backdrop-filter:none}}

/* ===== v22: order ring, rewarding presses, leaving animations ===== */
#ordfx[popover]{margin:0;border:0;max-width:none;max-height:none;overflow:hidden;color:var(--txt)}
.ordfx-ring{width:92px;height:92px;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;transition:filter .5s}
.ordfx-ring .rt,.ordfx-ring .rp{transform:rotate(-90deg);transform-origin:26px 26px}
.ordfx-ring .rt{stroke:rgba(128,140,200,.28)}
.ordfx-ring .rp{stroke:var(--a1);stroke-dasharray:145;stroke-dashoffset:145;animation:ofProg 2.8s cubic-bezier(.1,.7,.2,1) forwards;transition:fill .4s,stroke .3s}
.ordfx-ring path{stroke:var(--ok);stroke-dasharray:40;stroke-dashoffset:40}
.prog.done .ordfx-ring .rp{stroke:var(--ok);fill:rgba(48,209,88,.18)}
.prog.done .ordfx-ring path{animation:ofDraw .45s .1s var(--ease) forwards}
.prog.done .ordfx-ring{filter:drop-shadow(0 0 10px rgba(48,209,88,.9))}
.prog.done .ordfx-card{animation:ofGlow 1.5s ease-out forwards}
@keyframes ofProg{to{stroke-dashoffset:42}}
@keyframes ofGlow{0%{box-shadow:var(--sh3),0 0 0 0 rgba(48,209,88,.8)}35%{box-shadow:var(--sh3),0 0 70px 16px rgba(48,209,88,.6)}100%{box-shadow:var(--sh3),0 0 38px 4px rgba(48,209,88,.32)}}
.reward{animation:rwPop .55s var(--spring),rwRing .7s ease-out!important}
@keyframes rwPop{0%{scale:1}30%{scale:1.09}60%{scale:.97}100%{scale:1}}
@keyframes rwRing{0%{box-shadow:0 0 0 0 rgba(10,132,255,.7),0 0 0 0 rgba(191,90,242,.5)}100%{box-shadow:0 0 0 16px rgba(10,132,255,0),0 0 34px 10px rgba(191,90,242,0)}}
.rip{position:absolute;width:14px;height:14px;margin:-7px;border-radius:50%;pointer-events:none;background:rgba(255,255,255,.6);animation:ripOut .65s ease-out forwards}
@keyframes ripOut{to{transform:scale(22);opacity:0}}
.pfx{position:fixed;z-index:2000;width:0;height:0;pointer-events:none}
.pfx i{position:absolute;left:-3px;top:-3px;width:6px;height:6px;border-radius:50%;background:#fff;box-shadow:0 0 8px #7aa7ff,0 0 14px var(--a2);animation:pfxOut .6s ease-out forwards}
@keyframes pfxOut{from{transform:rotate(var(--a)) translateY(0);opacity:1}to{transform:rotate(var(--a)) translateY(calc(var(--d) * -1)) scale(.3);opacity:0}}
button{transition:transform .45s var(--spring),box-shadow .3s ease,background .25s,filter .25s,color .25s,border-color .25s}
@keyframes dlgOut{to{opacity:0;transform:scale(.95) translateY(8px)}}
@keyframes drawerOut{to{opacity:0;transform:translateX(46px)}}
@keyframes sheetDown{to{opacity:0;transform:translateY(80px)}}
@keyframes cartFullOut{to{opacity:0;transform:scale(1.03)}}
@keyframes bdOut{to{opacity:0}}
dialog[open].closing{animation:dlgOut .22s ease-in forwards}
dialog[open].closing::backdrop{animation:bdOut .22s ease-in forwards}
dialog[data-kind=cart][open].closing{animation:cartFullOut .26s ease-in forwards}
@media(max-width:640px){dialog[open].closing,dialog[data-kind=cart][open].closing{animation:sheetDown .26s ease-in forwards}}
.cline.leaving{animation:lineOut .26s ease-in forwards;overflow:hidden;pointer-events:none}
@keyframes lineOut{to{opacity:0;transform:translateX(60px) scale(.96)}}
@media(prefers-reduced-motion:reduce){.ordfx-ring .rp{animation:none;stroke-dashoffset:0}}

/* ===== v23: TV-style boot (no loading bar): colour ribbons sweep behind, four dots bounce and morph while the shop loads ===== */
.gw-ribbons{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.gw-ribbons i{position:absolute;left:-30%;width:160%;height:24vmin;border-radius:999px;filter:blur(30px);opacity:0;transform:translateX(-60%) rotate(-14deg);animation:gwRib 4.8s cubic-bezier(.4,0,.2,1) infinite}
.gw-ribbons i:nth-child(1){top:14%;background:#4f8cff;animation-delay:.2s}
.gw-ribbons i:nth-child(2){top:40%;background:#ff5c9a;animation-delay:.6s}
.gw-ribbons i:nth-child(3){top:64%;background:#ffc83d;animation-delay:1s}
@keyframes gwRib{0%{opacity:0;transform:translateX(-60%) rotate(-14deg)}25%,60%{opacity:.42}100%{opacity:0;transform:translateX(40%) rotate(-14deg)}}
.gw-tv{display:flex;justify-content:center;align-items:flex-end;gap:14px;height:64px;margin:0 0 22px}
.gw-tv i{display:block;width:18px;height:18px;border-radius:999px;box-shadow:0 0 18px currentColor;animation:gwDotIn .6s var(--spring) calc(.15s + var(--k)*.1s) backwards,gwDotMorph 1.7s ease-in-out calc(.9s + var(--k)*.14s) infinite}
.gw-tv i:nth-child(1){background:#4f8cff;color:#4f8cff}.gw-tv i:nth-child(2){background:#ff5c9a;color:#ff5c9a}.gw-tv i:nth-child(3){background:#ffc83d;color:#ffc83d}.gw-tv i:nth-child(4){background:#3ddc84;color:#3ddc84}
@keyframes gwDotIn{from{opacity:0;transform:scale(0) translateY(30px)}}
@keyframes gwDotMorph{0%,100%{transform:none;border-radius:999px}35%{transform:translateY(-30px) scale(.9,1.5)}65%{transform:scale(2.1,.62);border-radius:12px}85%{transform:scale(.95,1.1)}}
#gw.out .gw-tv i{animation:gwDotOut .4s ease-in calc(var(--k)*40ms) forwards}
@keyframes gwDotOut{to{opacity:0;transform:scale(0) translateY(-20px)}}
#gw.out .gw-ribbons{opacity:0;transition:opacity .4s}
:root[data-glass=lite] .gw-ribbons{display:none}
.gw-title{animation:gwTitleGlow 3s ease-in-out 1.6s infinite alternate}
@keyframes gwTitleGlow{from{filter:drop-shadow(0 0 0 rgba(122,167,255,0))}to{filter:drop-shadow(0 0 22px rgba(122,167,255,.55))}}

/* ===== v23: random pop-up card ===== */
.site-pop{position:fixed;right:24px;bottom:24px;z-index:120;width:min(370px,calc(100vw - 32px));padding:22px 22px 18px;border-radius:26px;animation:spIn .55s var(--spring)}
.site-pop.out{animation:spOut .32s ease-in forwards}
.site-pop h3{margin:0 28px 6px 0;font-size:1.15rem}.site-pop p{margin:0 0 14px;color:var(--muted);line-height:1.45}
.sp-x{position:absolute;right:12px;top:12px;display:grid;place-items:center;width:34px;height:34px;padding:0;font-size:1.3rem;border-radius:50%}
.sp-act{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
.sp-go{display:inline-flex;align-items:center;min-height:42px;padding:8px 18px;font-weight:700;text-decoration:none;color:#fff;background:var(--acc);border-radius:14px}
.sp-no{min-height:36px;padding:6px 12px;font-size:.8rem;color:var(--muted);background:transparent;border-color:transparent;box-shadow:none}
@keyframes spIn{from{opacity:0;transform:translateY(40px) scale(.92)}}
@keyframes spOut{to{opacity:0;transform:translateY(30px) scale(.94)}}
@media(max-width:640px){.site-pop{left:12px;right:12px;width:auto;bottom:calc(96px + env(safe-area-inset-bottom))}}

/* v24: no grid in the boot (the strips and bars are gone); the whole screen just fades out after the wipes */
#gw.out{background:var(--bg);animation:gwFade .7s ease .12s forwards}

/* ===== v25 ===== */
.share{position:absolute;top:54px;right:10px;z-index:3;width:34px;height:34px;min-height:0;padding:0;border-radius:50%;display:grid;place-items:center}
.share svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:520px){.share{top:48px;right:8px}}
.flash-badge{position:absolute;left:10px;bottom:10px;z-index:3;display:flex;align-items:center;gap:8px;padding:5px 12px;font-size:.78rem;font-weight:700;color:#fff;background:linear-gradient(120deg,#ff375f,#ff9f0a);border-radius:999px;box-shadow:0 6px 18px rgba(255,55,95,.45);animation:flashPulse 1.6s ease-in-out infinite}
.flash-badge i{font-style:normal;font-variant-numeric:tabular-nums;opacity:.95}
@keyframes flashPulse{50%{box-shadow:0 6px 26px rgba(255,159,10,.75)}}
.deep-hi{animation:deepHi 1.4s ease 3}
@keyframes deepHi{50%{box-shadow:0 0 0 4px rgba(10,132,255,.7),0 0 40px rgba(10,132,255,.55)}}
.cancel-why{margin:8px 0;padding:8px 12px;font-size:.88rem;color:var(--bad);background:var(--field);border:1px solid var(--edge);border-radius:14px}
.stamps{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0;font-size:inherit;letter-spacing:0}
.stp{width:24px;height:24px;border-radius:50%;border:2px solid var(--edge);background:var(--field)}
.stp.on{border-color:transparent;background:linear-gradient(135deg,var(--a1),var(--a2));box-shadow:0 0 14px rgba(125,107,255,.6);animation:stpPop .55s var(--spring) calc(var(--i) * 70ms) backwards}
.stamps.ready .stp{animation:stpPop .55s var(--spring) calc(var(--i) * 70ms) backwards,stpGlow 1.8s ease-in-out calc(1s + var(--i) * 90ms) infinite}
@keyframes stpPop{from{transform:scale(0) rotate(-90deg);opacity:0}}
@keyframes stpGlow{50%{box-shadow:0 0 24px rgba(48,209,88,.9);filter:brightness(1.2)}}
#sfxpanel{position:fixed;z-index:300;width:230px;padding:14px 16px;border-radius:20px;animation:dlgIn .2s var(--ease)}
.sp-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;font-size:.9rem;font-weight:600}
.sp-row input[type=range]{width:110px;margin:0}.sp-row input[type=checkbox]{width:20px;height:20px;margin:0}
#offline{position:fixed;left:50%;top:12px;z-index:400;transform:translateX(-50%);padding:10px 20px;font-size:.88rem;font-weight:600;border-radius:999px;animation:spIn .4s var(--spring)}
#offline[hidden]{display:none}
/* boot colours follow the theme */
:root[data-theme=dark] .gw-ribbons i{mix-blend-mode:screen}
:root:not([data-theme=dark]) .gw-ribbons i{mix-blend-mode:multiply;opacity:0}
:root:not([data-theme=dark]) .gw-tv i{box-shadow:0 6px 16px currentColor}

/* ===== v26 ===== */
.sortbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;margin:0 0 18px}
.sb-f{display:flex;align-items:center;gap:8px;font-weight:600}.sb-f select{width:auto;margin:0;min-height:40px}
.sb-c{display:flex;align-items:center;gap:8px;font-weight:600}.sb-c input{width:20px;height:20px;margin:0}
.sb-s{min-height:40px;padding:8px 18px}
#cutoffpill.urgent{color:#fff;background:linear-gradient(120deg,#ff375f,#ff9f0a);animation:flashPulse 1.6s ease-in-out infinite}
.qv-img{width:100%;max-height:300px;object-fit:cover;border-radius:22px;margin-bottom:14px}
.qv-price{font-size:1.2rem;white-space:nowrap}.qv-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.stk{display:inline-flex;align-items:center;gap:6px;margin-left:10px;vertical-align:middle}
.stk button{width:28px;min-width:28px;min-height:28px;height:28px;padding:0;border-radius:50%;line-height:1}.stk b{min-width:2ch;text-align:center}
.sws{display:flex;gap:6px}.sw{width:26px;min-width:26px;height:26px;min-height:26px;padding:0;border-radius:50%;border:2px solid transparent}.sw.on{border-color:var(--txt)}
.fzs{display:flex;align-items:center;gap:6px}.fzs button{min-height:32px;padding:4px 10px}
#sfxpanel{width:270px}
#totop{position:fixed;left:16px;bottom:24px;z-index:44;width:48px;height:48px;min-height:0;padding:0;border-radius:50%;display:grid;place-items:center;opacity:0;pointer-events:none;transform:translateY(14px) scale(.9);transition:opacity .3s,transform .4s var(--spring)}
#totop.show{opacity:1;pointer-events:auto;transform:none}
#totop svg{position:absolute;inset:0;width:100%;height:100%;fill:none}
#totop .tt-bg{stroke:var(--edge);stroke-width:3}#totop .tt-fg{stroke:var(--a1);stroke-width:3;stroke-linecap:round;stroke-dasharray:132;stroke-dashoffset:132;transform:rotate(-90deg);transform-origin:24px 24px}
#totop .tt-arrow{inset:12px;width:24px;height:24px;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
body:has(dialog[open]) #totop{display:none}
@media(max-width:640px){#totop{bottom:calc(96px + env(safe-area-inset-bottom))}}

/* ===== Colour refresh: calmer deep-navy dark, clean soft light, higher contrast ===== */
:root{--bg:#080b1f;--txt:#f5f7ff;--muted:#b0b6d4;--solid:#12172f;--glass:rgba(255,255,255,.08);--glass2:rgba(255,255,255,.15);--edge:rgba(255,255,255,.2);--ok:#5fd68f;--warn:#f5c451;--bad:#ff7088;--info:#82aeff}
:root[data-theme=light]{--bg:#f1f4ff;--txt:#141838;--muted:#4f5680;--solid:#fff;--glass:rgba(255,255,255,.72);--glass2:rgba(255,255,255,.9);--edge:rgba(255,255,255,.95);--edge2:rgba(90,100,180,.16);--field:#fff;--o1:rgba(10,132,255,.24);--o2:rgba(191,90,242,.2);--o3:rgba(94,92,230,.18)}
::selection{background:rgba(10,132,255,.35)}

/* ===== Sound panel: centered, never out of bounds ===== */
#sfxpanel{position:fixed;left:0;right:0;margin:0 auto;transform:none;width:min(300px,calc(100vw - 24px));max-width:calc(100vw - 24px);box-sizing:border-box;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
#sfxpanel .sp-row{flex-wrap:wrap}
#sfxpanel .sws{flex-wrap:wrap}

/* ===== Performance ===== */
.card,.panel,.stat{content-visibility:auto;contain-intrinsic-size:auto 320px}
img{content-visibility:auto}
@media(max-width:700px){:root{--blur:14px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

/* ===== Admin+ ===== */
#ap-banner{position:sticky;top:0;z-index:60;padding:8px 14px;text-align:center;font-weight:700;font-size:.9rem;color:#fff;background:var(--acc)}
#ap-fab{position:fixed;right:16px;bottom:24px;z-index:45;display:inline-flex;align-items:center;gap:8px;min-height:0;padding:11px 18px;border-radius:999px;font-weight:700;color:#fff;background:var(--acc);border:0;box-shadow:var(--sh2),0 0 24px rgba(125,107,255,.4)}
#ap-fab svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.ap-b{padding:6px 4px 10px;display:flex;flex-direction:column;gap:8px}.ap-b[hidden]{display:none}
.ap-b input,.ap-b textarea{width:100%;box-sizing:border-box}
.ap-tbl{overflow-x:auto;border-radius:14px;border:1px solid var(--edge2)}.ap-tbl table{width:100%;border-collapse:collapse;font-size:.85rem}.ap-tbl th,.ap-tbl td{padding:6px 8px;text-align:left;border-bottom:1px solid var(--edge2)}.ap-tbl th{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.ap-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.ap-stats div{padding:10px;border-radius:14px;background:var(--glass2);border:1px solid var(--edge);font-size:.8rem;color:var(--muted)}.ap-stats b{display:block;font-size:1.15rem;color:var(--txt)}
.ap-bars{display:flex;align-items:flex-end;gap:4px;height:120px;padding-bottom:16px}.ap-bars i{position:relative;flex:1;background:var(--acc);border-radius:4px 4px 0 0}.ap-bars span{position:absolute;bottom:-16px;left:0;right:0;text-align:center;font-size:.6rem;font-style:normal;color:var(--muted)}
.ap-hbars{display:flex;flex-direction:column;gap:6px}.ap-hbars>div{position:relative;display:flex;align-items:center;gap:8px;min-height:28px;padding:2px 8px;border-radius:10px;background:var(--glass);overflow:hidden;font-size:.82rem}
.ap-hbars i{position:absolute;left:0;top:0;bottom:0;z-index:0;background:var(--acc);opacity:.28;border-radius:10px}.ap-hbars span,.ap-hbars b{position:relative;z-index:1}.ap-hbars span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ===== Security switches ===== */
.sh-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:10px}.sh-head h2{margin:0}
.sh-pill{padding:6px 14px;border-radius:999px;font-weight:700;font-size:.8rem;background:var(--glass2);border:1px solid var(--edge);color:var(--ok)}.sh-pill.hot{color:#fff;background:linear-gradient(135deg,#ff375f,#ff9f0a);border-color:transparent;animation:flashPulse 1.6s ease-in-out infinite}
.sh-row{display:flex;align-items:center;gap:14px;margin:10px 0;padding:14px 16px;border-radius:20px;cursor:pointer;background:var(--glass);border:1px solid var(--edge);transition:border-color .3s,box-shadow .3s,transform .3s var(--spring)}
.sh-row:hover{transform:translateY(-1px)}.sh-row.on{border-color:var(--a2);box-shadow:0 0 24px rgba(191,90,242,.22)}
.sh-row em{display:grid;place-items:center;flex:none;width:44px;height:44px;border-radius:14px;font-style:normal;background:linear-gradient(135deg,rgba(10,132,255,.28),rgba(191,90,242,.28));border:1px solid var(--edge)}
.sh-txt{flex:1;min-width:0}.sh-txt b{display:block}.sh-txt small{display:block;color:var(--muted);line-height:1.35}
.sh-sw{position:relative;flex:none;width:54px;height:32px}
.sh-sw input{position:absolute;inset:0;z-index:2;width:100%;height:100%;min-height:0;margin:0;padding:0;opacity:0;cursor:pointer}
.sh-sw i{position:absolute;inset:0;border-radius:999px;background:var(--glass2);border:1px solid var(--edge);box-shadow:inset 0 1px 3px rgba(0,0,0,.25);transition:background .3s}
.sh-sw i::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,.35);transition:transform .35s var(--spring)}
.sh-sw input:checked+i{background:var(--acc);border-color:transparent}.sh-sw.danger input:checked+i{background:linear-gradient(135deg,#ff375f,#ff9f0a)}
.sh-sw input:checked+i::after{transform:translateX(22px)}.sh-sw input:focus-visible+i{outline:2px solid var(--a1);outline-offset:2px}
.sh-ips{display:flex;flex-direction:column;gap:6px;margin:14px 0}.sh-ips small{color:var(--muted)}.sh-ips textarea{width:100%;box-sizing:border-box;font-family:ui-monospace,monospace}.sh-ips button{align-self:flex-start}
.sh-btns{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.sh-warn{color:#fff;background:linear-gradient(135deg,#ff375f,#ff9f0a);border-color:transparent}

.sh-ic svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ===== Admin+ dashboard (HyperOS style) ===== */
#ap-dlg{position:fixed;inset:0;z-index:600;display:grid;place-items:center;padding:12px;background:rgba(5,7,22,.55);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:ofIn .25s var(--ease)}
.hy-sheet{position:relative;width:min(1080px,100%);height:min(92dvh,900px);display:flex;flex-direction:column;gap:14px;padding:22px 20px 0;border-radius:36px;overflow:hidden;color:var(--txt);background:var(--bg);border:1px solid var(--edge);box-shadow:var(--sh3);animation:hyPop .45s var(--spring)}
.hy-sheet::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(60% 35% at 10% 0%,var(--o1),transparent 70%),radial-gradient(50% 35% at 95% 8%,var(--o2),transparent 70%)}
.hy-sheet>*{position:relative;z-index:1}
@keyframes hyPop{from{opacity:0;transform:translateY(24px) scale(.97)}}
.hy-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex:none;padding:0 6px}
.hy-bar h2{margin:0;font-size:2rem;font-weight:800;letter-spacing:-.03em;line-height:1.1}.hy-bar p{margin:4px 0 0;color:var(--muted);font-size:.9rem}
.hy-sheet .hy-x{flex:none;display:grid;place-items:center;width:42px;height:42px;min-height:0;padding:0;border-radius:50%;background:var(--glass2);border:1px solid var(--edge);color:var(--txt)}
.hy-x svg,.hy-search svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.hy-search{display:flex;align-items:center;gap:10px;flex:none;height:46px;padding:0 16px;border-radius:999px;background:var(--glass2);border:1px solid var(--edge);color:var(--muted)}
.hy-search input{flex:1;min-width:0;height:100%;padding:0;border:0;background:none;box-shadow:none;color:var(--txt);outline:none}
.hy-chips{display:flex;gap:8px;flex:none;overflow-x:auto;scrollbar-width:none}.hy-chips::-webkit-scrollbar{display:none}
.hy-sheet .hy-chips button{flex:none;min-height:0;padding:8px 16px;border-radius:999px;white-space:nowrap;background:var(--glass2);border:1px solid var(--edge2);color:var(--txt)}
.hy-sheet .hy-chips button.on{background:var(--acc);color:#fff;border-color:transparent}
.hy-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:2px 2px calc(24px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch}
.hy-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-bottom:22px}
.hy-kpi{padding:16px 18px;border-radius:28px;background:linear-gradient(160deg,hsl(var(--h) 90% 60%/.26),hsl(var(--h) 90% 60%/.07));border:1px solid var(--edge2)}
.hy-kpi small{display:block;color:var(--muted);font-size:.78rem;font-weight:600}.hy-kpi b{display:block;margin-top:4px;font-size:1.5rem;letter-spacing:-.02em}
.hy-groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr));gap:22px 18px;align-items:start}
.hy-group h3{display:flex;align-items:center;gap:8px;margin:0 0 8px 14px;font-size:.85rem;font-weight:700;color:var(--muted)}.hy-group h3 span{padding:1px 8px;border-radius:999px;background:var(--glass2);font-size:.7rem}
.hy-card{border-radius:28px;overflow:hidden;background:var(--glass2);border:1px solid var(--edge2);box-shadow:var(--sh1)}
.hy-item+.hy-item{border-top:1px solid var(--edge2)}
.hy-sheet .hy-row{display:flex;align-items:center;gap:12px;width:100%;min-height:60px;margin:0;padding:10px 16px;border:0;border-radius:0;background:none;box-shadow:none;color:var(--txt);text-align:left;font-weight:600}
.hy-sheet .hy-row:hover{background:hsl(var(--h) 85% 56%/.1)}
.hy-ic{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:50%;background:hsl(var(--h) 80% 54%);color:#fff;box-shadow:0 4px 10px hsl(var(--h) 80% 54%/.35)}
.hy-ic svg,.hy-chev svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.hy-row b{flex:1;min-width:0;font-weight:600;font-size:.95rem}
.hy-chev{display:grid;flex:none;color:var(--muted);transition:transform .3s var(--ease)}.hy-item.open .hy-chev{transform:rotate(90deg)}
.hy-body{padding:2px 16px 16px}
.hy-seg{display:flex;gap:4px;padding:4px;overflow-x:auto;border-radius:999px;background:var(--glass2);border:1px solid var(--edge2);scrollbar-width:none}.hy-seg::-webkit-scrollbar{display:none}
.hy-sheet .hy-seg button{flex:1 0 auto;min-height:0;padding:9px 14px;border-radius:999px;border:0;background:none;box-shadow:none;color:var(--txt);white-space:nowrap}
.hy-sheet .hy-seg button.on{background:var(--acc);color:#fff}
.hy-num{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.9rem;font-weight:600}.hy-num input{width:110px}
.hy-body .sh-row{margin:6px 0;padding:12px 14px;border-radius:20px}
@media(min-width:900px){.hy-sheet{padding:26px 26px 0}}
@media(max-width:600px){.hy-sheet{height:calc(100dvh - 12px);border-radius:28px}.hy-bar h2{font-size:1.6rem}}

/* ===== Site-wide performance modes (set from Admin+) ===== */
html.ap-lite{--blur:0px;--glass:var(--solid);--glass2:var(--solid)}
html.ap-lite *{-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
html.ap-nomotion *,html.ap-nomotion *::before,html.ap-nomotion *::after{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
html.ap-noglow body::before,html.ap-noglow .gw-ribbons{display:none!important}
html.ap-nohover *:hover{transform:none!important}
