/* Self-hosted VT323 (the CRT theme terminal face) - no external font hosts;
   subsets vendored under /assets/fonts/. */
@font-face{font-family:'VT323';font-style:normal;font-weight:400;font-display:swap;
  src:url('/assets/fonts/vt323-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'VT323';font-style:normal;font-weight:400;font-display:swap;
  src:url('/assets/fonts/vt323-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}

/* Shared skin-studio controls. Creator palette variables are applied by lab.js
   only to lab-local containers, leaving the Arkadia navigation chrome ember. */
:root{--display-f:'Bebas Neue',system-ui,sans-serif;--panel-w:380px}
html,body{height:100%;overflow:hidden}
body{display:grid;grid-template-rows:100px minmax(0,1fr);grid-template-columns:minmax(0,1fr);margin:0;padding:0 !important}
body.atmosphere{padding-top:0 !important}
header#sky-topbar{grid-row:1;grid-column:1}

#workspace{grid-row:2;grid-column:1;position:relative;min-width:0;min-height:0;height:100%;overflow:hidden}
#viewport-wrap{position:relative;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;overscroll-behavior:contain;background:#070610}
#viewport-wrap::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.012) 0 1px,transparent 1px 3px)}
canvas#viewport{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:2;cursor:grab;touch-action:none}
canvas#viewport:active{cursor:grabbing}
.vp-overlay{position:absolute;inset:0;z-index:3;pointer-events:none}
.vp-corner{position:absolute;width:26px;height:26px;border:1px solid var(--accent-45);pointer-events:none}
.vp-corner.tl{top:14px;left:14px;border-right:0;border-bottom:0}.vp-corner.tr{top:14px;right:14px;border-left:0;border-bottom:0}
.vp-corner.bl{bottom:14px;left:14px;border-right:0;border-top:0}.vp-corner.br{bottom:14px;right:14px;border-left:0;border-top:0}
.vp-corner::after{content:"";position:absolute;width:4px;height:4px;border-radius:50%;background:var(--accent);box-shadow:0 0 7px var(--accent-glow)}
.vp-corner.tl::after{top:-2px;left:-2px}.vp-corner.tr::after{top:-2px;right:-2px}.vp-corner.bl::after{bottom:-2px;left:-2px}.vp-corner.br::after{bottom:-2px;right:-2px}
.vp-loading,.vp-mesh-status{position:absolute;z-index:7;font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;background:rgba(8,6,10,.78);border:1px solid var(--glass-border);backdrop-filter:blur(12px);color:var(--bone-62)}
.vp-loading{left:50%;top:50%;transform:translate(-50%,-50%);padding:10px 16px;border-radius:10px;transition:opacity .3s ease}.vp-loading.hide{opacity:0;pointer-events:none}
.vp-mesh-status{left:18px;top:18px;padding:5px 10px;border-radius:6px}.vp-mesh-status.ok{color:var(--accent);border-color:var(--accent-45)}.vp-mesh-status.fail{color:var(--amber-hot);border-color:var(--amber)}
.vp-readout{position:absolute;left:18px;bottom:18px;display:flex;flex-direction:column;gap:3px;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--bone-62);font-variant-numeric:tabular-nums}.vp-readout .k{color:var(--accent)}
.vp-rot{position:absolute;right:18px;bottom:18px;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--bone-34)}

/* Drawer: all editor controls remain in this initial DOM; only its presentation moves. */
#lab-drawer-scrim{position:fixed;inset:100px 0 0;z-index:30;opacity:0;pointer-events:none;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);transition:opacity .24s ease}
#lab-drawer-scrim.open{opacity:1;pointer-events:auto}
#panel{position:fixed;z-index:31;top:100px;right:0;width:min(380px,calc(100vw - 20px));height:calc(100dvh - 100px);box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;padding:18px 20px 42px;transform:translateX(100%);visibility:hidden;transition:transform .25s var(--ease),visibility 0s linear .25s;background:linear-gradient(180deg,rgba(8,6,10,.94),rgba(4,3,7,.98));border-left:1px solid var(--accent-28);box-shadow:-20px 0 52px -26px rgba(0,0,0,.9);backdrop-filter:blur(14px) saturate(1.1)}
#panel.open{transform:translateX(0);visibility:visible;transition:transform .25s var(--ease)}
#panel::-webkit-scrollbar{width:6px}#panel::-webkit-scrollbar-track{background:transparent}#panel::-webkit-scrollbar-thumb{background:var(--bone-18);border-radius:4px}
.drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:14px;margin-bottom:18px;border-bottom:1px solid var(--glass-border)}
.drawer-head strong{display:block;font-family:var(--display-f);font-size:21px;line-height:.9;letter-spacing:.22em;color:var(--bone)}
.micro-label{font-family:var(--mono);font-size:10.5px;line-height:1;letter-spacing:.22em;color:var(--bone-62);text-transform:uppercase;white-space:nowrap}
#drawer-close{width:40px;height:40px;border-radius:9px;border:1px solid var(--glass-border);background:var(--glass-2);color:var(--bone-80);font:24px/1 var(--mono);cursor:pointer}
#drawer-close:hover{border-color:var(--accent);color:var(--bone);box-shadow:0 0 12px -5px var(--accent-glow)}
#panel h2{display:flex;align-items:center;gap:8px;margin:0 0 11px;font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--bone-62);font-variant-numeric:tabular-nums}
#panel h2::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-glow)}#panel h2 .right{margin-left:auto;font-size:10.5px;font-weight:400;color:var(--bone-34)}
#panel .section{margin-bottom:20px}#panel .section+.section{padding-top:20px;border-top:1px solid rgba(255,255,255,.05)}

select.species-select,input[type=text],input[type=number],input[type=search],textarea{box-sizing:border-box;width:100%;font:inherit;font-size:14px;padding:9px 12px;border-radius:8px;background:var(--bg-1);color:var(--bone);border:1px solid var(--glass-border);outline:0;transition:border-color .15s,box-shadow .15s}
select.species-select{appearance:none;cursor:pointer;padding-right:30px;background-image:linear-gradient(45deg,transparent 50%,var(--bone-62) 50%),linear-gradient(135deg,var(--bone-62) 50%,transparent 50%);background-position:calc(100% - 14px) center,calc(100% - 9px) center;background-size:5px 5px;background-repeat:no-repeat}
select.species-select:focus,input:focus,textarea:focus,button:focus-visible,a:focus-visible{outline:1px solid var(--accent);outline-offset:2px;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-14)}
input[type=number]{font-family:var(--mono);text-align:right;font-variant-numeric:tabular-nums}textarea{font-family:var(--mono);font-size:12px;min-height:78px;resize:vertical}

.toggle{display:flex;align-items:center;gap:10px;min-height:42px;box-sizing:border-box;padding:9px 12px;border-radius:9px;background:var(--glass-2);border:1px solid var(--glass-border);cursor:pointer;font-size:12px;transition:border-color .15s}.toggle:hover{border-color:var(--accent-45)}.toggle input{display:none}.toggle .switch{width:34px;height:18px;border-radius:10px;background:rgba(255,255,255,.08);border:1px solid var(--glass-border);position:relative;transition:background .25s}.toggle .switch::after{content:"";position:absolute;left:2px;top:1px;width:12px;height:12px;border-radius:50%;background:var(--bone-62);transition:all .25s var(--ease)}.toggle input:checked+.switch{background:var(--accent);border-color:var(--accent-hot)}.toggle input:checked+.switch::after{left:18px;background:#fff;box-shadow:0 0 8px var(--accent-glow)}.drawer-show-all{margin-bottom:9px}

.btn{box-sizing:border-box;font:inherit;font-size:11.5px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;padding:10px 13px;border-radius:8px;cursor:pointer;text-align:center;transition:.18s var(--ease);text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--glass-border);background:var(--glass-2);color:var(--bone-80);min-height:40px}.btn:hover{border-color:var(--accent-45);background:var(--accent-06);color:var(--bone)}.btn.primary{background:linear-gradient(180deg,var(--accent-22),var(--accent-08));border-color:var(--accent);color:var(--bone);box-shadow:0 8px 22px -8px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.06)}.btn.primary:hover{background:linear-gradient(180deg,var(--accent-32),var(--accent-14))}.btn.save{background:var(--accent-10);border-color:var(--accent);color:var(--bone);box-shadow:0 6px 18px -9px var(--accent-glow)}.btn.flex{flex:1}

.mode-tabs,.ss-tabs{display:flex;gap:4px;padding:4px;background:var(--glass);border:1px solid var(--glass-border);border-radius:10px;margin-bottom:16px}.mode-tab,.ss-tab{flex:1;font:inherit;font-size:11.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;padding:9px 10px;border-radius:7px;background:transparent;color:var(--bone-62);border:0;cursor:pointer;transition:.18s var(--ease);display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:38px}.mode-tab:hover,.ss-tab:hover{color:var(--bone)}.mode-tab.active,.ss-tab.active{color:var(--bone);background:var(--accent-10);box-shadow:inset 0 0 0 1px var(--accent),0 0 16px -7px var(--accent-glow)}.mode-tab .tier-lock{font-size:11.5px;color:var(--crimson)}.mode-pane{display:none;position:relative}.mode-pane.active{display:block}

.ss-lede{font-size:12px;color:var(--bone-62);line-height:1.6;margin:0 0 12px;letter-spacing:.04em}.ss-gallery-tools{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;align-items:center}.ss-filter-tabs{display:flex;gap:4px;flex:1;flex-wrap:wrap}.ss-filter-tab{font:inherit;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;padding:6px 9px;border-radius:6px;background:var(--glass-2);border:1px solid var(--glass-border);color:var(--bone-62);cursor:pointer}.ss-filter-tab:hover{color:var(--bone);border-color:var(--accent-45)}.ss-filter-tab.active{color:var(--bone);background:var(--accent-10);border-color:var(--accent)}.ss-filter-tab .n{color:var(--bone-34);font-weight:400;margin-left:5px}.ss-filter-tab.active .n{color:var(--accent)}.ss-search{flex-basis:100%;font-size:12px;padding:8px 12px}.ss-count{font-family:var(--mono);font-size:10.5px;color:var(--bone-34);letter-spacing:.14em;text-transform:uppercase;margin-left:auto}
.ss-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:12px}.gcard{position:relative;display:flex;flex-direction:column;gap:9px;padding:11px;border-radius:12px;background:linear-gradient(160deg,rgba(255,255,255,.07),rgba(0,0,0,.2));border:1px solid var(--glass-border);backdrop-filter:blur(10px);cursor:pointer;transition:.2s var(--ease);overflow:hidden}.gcard:hover{transform:translateY(-2px);border-color:var(--accent-45);box-shadow:0 18px 36px -22px var(--accent-glow)}.gcard.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 18px 36px -16px var(--accent-glow);background:linear-gradient(160deg,var(--accent-10),rgba(0,0,0,.2))}.gcard.selected::after{content:"◆ SELECTED";position:absolute;top:10px;right:10px;font-family:var(--mono);font-size:8px;letter-spacing:.14em;padding:3px 6px;border-radius:4px;background:var(--accent);color:#001126;font-weight:700;z-index:3}.gframe{position:relative;aspect-ratio:5/4;border-radius:9px;overflow:hidden;background:radial-gradient(ellipse at 50% 60%,var(--card-glow,var(--accent-22)),transparent 65%),linear-gradient(180deg,rgba(255,255,255,.04),rgba(0,0,0,.2));box-shadow:inset 0 0 0 1px rgba(255,255,255,.05)}/* THE COLOUR PROXIMITY PLATE - no glitch skin ships a render since 2026-08-11. Seven bands, engine order, inset in the frame so the frame's own glow and scanlines still read. */
.gframe .gprox{position:absolute;inset:6%;display:flex;border-radius:6px;overflow:hidden;box-shadow:0 14px 18px rgba(0,0,0,.55),0 0 24px var(--card-glow,rgba(255,255,255,.30))}
.gframe .gprox i{flex:1 1 0;min-width:0;display:block;box-shadow:inset 0 0 0 1px rgba(0,0,0,.35)}
.gframe .gprox:empty{display:none}.gframe .id{position:absolute;left:8px;top:7px;font-family:var(--mono);font-size:8px;letter-spacing:.14em;color:var(--bone-34);text-transform:uppercase;z-index:2}.gname{font-family:var(--display-f);font-size:16px;letter-spacing:.14em;color:var(--bone);line-height:1.05}.gmeta{display:flex;align-items:center;justify-content:space-between;gap:6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--bone-34);text-transform:uppercase}.gmeta .swatch{width:10px;height:10px;border-radius:2px;box-shadow:0 0 6px currentColor}.gmeta .sig{display:inline-flex;align-items:center;gap:6px;color:var(--bone-62)}
.scrim{position:absolute;left:0;right:0;bottom:0;padding:6px 8px;backdrop-filter:blur(4px);font-family:var(--mono);font-size:8px;letter-spacing:.14em;text-transform:uppercase;display:none;align-items:center;justify-content:space-between;gap:4px;z-index:4}.scrim.lock{background:linear-gradient(180deg,rgba(196,32,33,0),rgba(196,32,33,.42));color:#ffb1b6;border-top:1px solid rgba(196,32,33,.4)}.scrim.warn{background:linear-gradient(180deg,rgba(255,179,71,0),rgba(255,179,71,.42));color:var(--amber-hot);border-top:1px solid rgba(255,179,71,.4)}.scrim a{color:inherit;text-decoration:underline}body[data-state="anon"] .gcard .scrim.warn,body[data-state="locked"] .gcard .scrim.lock,.gcard.tier-locked .scrim.lock{display:flex}
.ss-preview-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:9px;background:var(--glass);border:1px solid var(--accent);box-shadow:0 0 0 1px var(--accent),0 14px 36px -18px var(--accent-glow);margin-bottom:12px}.ss-preview-bar .label,.ss-row-label,.ss-lab-field label,.ss-lab-label{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;color:var(--bone-62);text-transform:uppercase}.ss-preview-bar strong{display:block;font-family:var(--display-f);font-size:14px;letter-spacing:.14em;color:var(--bone);margin-top:2px;text-transform:uppercase}.ss-preview-bar .sp{flex:1}.ss-preview-bar button{font:inherit;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;padding:9px 10px;border-radius:7px;border:1px solid var(--glass-border);background:var(--glass-2);color:var(--bone-80);cursor:pointer;font-weight:600}.ss-preview-bar button.apply{background:linear-gradient(180deg,var(--accent-22),var(--accent-08));border-color:var(--accent);color:var(--bone);box-shadow:0 6px 18px -8px var(--accent-glow)}

.ss-builder-row{margin-bottom:12px}.ss-row-label{display:block;margin-bottom:6px}.ss-num-help{font-size:12px;color:var(--bone-62);line-height:1.55;padding:8px 10px;border-radius:7px;background:rgba(0,0,0,.3);border:1px solid var(--glass-border);margin-bottom:12px}.ss-seg{display:flex;gap:4px;padding:3px;background:var(--glass-2);border:1px solid var(--glass-border);border-radius:7px;width:fit-content}.ss-seg-btn{font:inherit;font-size:11.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:6px 14px;border-radius:5px;background:transparent;color:var(--bone-62);border:0;cursor:pointer}.ss-seg-btn.active{color:var(--bone);background:var(--accent-12);box-shadow:inset 0 0 0 1px var(--accent)}.ss-import{display:flex;flex-direction:column;gap:6px}.ss-import-actions{display:flex;gap:6px}.ss-import-actions button{font:inherit;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;padding:8px 12px;border-radius:7px;border:1px solid var(--glass-border);background:var(--glass-2);color:var(--bone-80);cursor:pointer;font-weight:600;flex:1}.ss-import-actions button.primary{background:linear-gradient(180deg,var(--accent-22),var(--accent-08));border-color:var(--accent);color:var(--bone);box-shadow:0 6px 18px -8px var(--accent-glow)}.ss-import-note{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--bone-34);line-height:1.6}.ss-lab-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.ss-lab-field{display:flex;flex-direction:column;gap:5px}.ss-lab-field.full{grid-column:1/-1}.ss-chip-row{display:flex;flex-wrap:wrap;gap:4px}.ss-chip-row button{font:inherit;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;padding:6px 9px;border-radius:5px;background:var(--glass-2);border:1px solid var(--glass-border);color:var(--bone-62);cursor:pointer;transition:.15s var(--ease);font-weight:600}.ss-chip-row button:hover{border-color:var(--accent-45);color:var(--bone)}.ss-chip-row button.active{background:var(--accent-12);border-color:var(--accent);color:var(--bone)}
.ss-mix-grid{display:flex;flex-direction:column;gap:6px}.ss-mix-row{display:grid;gap:6px;align-items:center;padding:8px 10px;background:var(--glass-2);border:1px solid var(--glass-border);border-radius:8px}.ss-mix-grid.glitch-only .ss-mix-row{grid-template-columns:90px 24px repeat(4,minmax(0,1fr))}.ss-mix-grid.glitch-only .ss-mix-row .mode-dot,.ss-mix-grid.glitch-only .ss-mix-row input[type=color]{display:none}.ss-mix-grid.hybrid .ss-mix-row{grid-template-columns:84px 24px 24px repeat(4,minmax(0,1fr))}.ss-mix-grid.hybrid .ss-mix-row.row-color input[type=number]{display:none}.ss-mix-grid.hybrid .ss-mix-row.row-color input[type=color]{display:block;grid-column:3/-1;height:34px;opacity:1!important}.ss-mix-grid.hybrid .ss-mix-row.row-glitch input[type=color]{display:none}.ss-mix-row .nm{font-family:var(--display-f);font-size:14px;letter-spacing:.12em;color:var(--bone)}.ss-mix-row .mode-dot{width:18px;height:18px;border-radius:50%;background:var(--glass-border);display:inline-flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:8px;color:var(--bone-62);font-weight:700;cursor:pointer}.ss-mix-row .mode-dot.glitch{background:var(--accent-20,var(--accent-22));color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.ss-mix-row input[type=number]{font:inherit;font-family:var(--mono);font-size:11.5px;padding:6px 7px;border-radius:5px;background:var(--bg-1);color:var(--bone);border:1px solid var(--glass-border);width:100%;text-align:right;font-variant-numeric:tabular-nums}.ss-mix-row input[type=color]{width:100%;height:28px;padding:0;border:1px solid var(--glass-border);border-radius:5px;background:var(--glass-2);cursor:pointer}.ss-builder-actions{display:flex;gap:6px;margin-top:14px;flex-wrap:wrap}.ss-builder-actions .btn{flex:1;min-width:90px}
.lockcover{position:absolute;inset:0;background:linear-gradient(180deg,rgba(8,6,10,.86),rgba(8,6,10,.98));backdrop-filter:blur(8px);display:none;align-items:center;justify-content:center;flex-direction:column;gap:14px;text-align:center;padding:32px;z-index:5}.lockcover .lock-mark{font-family:var(--display-f);font-size:24px;letter-spacing:.18em;color:var(--crimson);text-shadow:0 0 14px var(--crimson-glow)}.lockcover .copy{font-size:14px;color:var(--bone-80);max-width:320px;line-height:1.6}body[data-state="locked"] #studio-shade,body[data-state="anon"] #studio-shade{display:flex}
.preset-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;background:var(--glass-2);border:1px solid var(--glass-border);border-radius:8px;margin-bottom:6px}.preset-row .pinfo{min-width:0;flex:1;overflow:hidden}.preset-row .pn{font-size:14px;color:var(--bone);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preset-row .pm{font-family:var(--mono);font-size:10.5px;color:var(--bone-34);letter-spacing:.12em;text-transform:uppercase;margin-top:2px}.preset-row .pm.mismatch{color:var(--amber-hot)}.preset-row .pact{display:flex;gap:4px;flex:0 0 auto}.preset-row .pact button{padding:5px 8px;font-size:10.5px;min-height:30px}.preset-row .pact .del{color:#ff7c84;border-color:rgba(196,32,33,.35)}.preset-empty{font-family:var(--mono);font-size:11.5px;letter-spacing:.12em;color:var(--bone-34);text-transform:uppercase;text-align:center;padding:14px 8px}
/* Glitch derived-hue swatches: the chip shows the ratio-derived base hue the
   payload will produce in game; the animated ring marks slots that render
   iridescent (out-of-range values). Hidden outside glitch rows. */
.ss-mix-row .gsw{position:relative;display:none;width:24px;height:24px;border-radius:6px;border:1px solid var(--glass-border);background:#8a8a8a;box-shadow:inset 0 1px 4px rgba(0,0,0,.35);z-index:0;flex:0 0 auto}
.ss-mix-grid.glitch-only .ss-mix-row .gsw,.ss-mix-grid.hybrid .ss-mix-row.row-glitch .gsw{display:block}
.ss-mix-row .gsw.iridescent::after{content:"";position:absolute;inset:-3px;border-radius:9px;background:conic-gradient(#ff5df0,#5df0ff,#f0ff5d,#ff5df0);filter:blur(3px) saturate(1.35);opacity:.7;z-index:-1;animation:gswhue 3.2s linear infinite}
@keyframes gswhue{to{filter:blur(3px) saturate(1.35) hue-rotate(360deg)}}
.toast-host{position:fixed;left:50%;bottom:150px;transform:translateX(-50%);z-index:80;display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none}.toast{padding:10px 16px;border-radius:8px;font-size:12px;letter-spacing:.04em;font-family:var(--mono);background:rgba(8,6,10,.94);border:1px solid var(--glass-border);color:var(--bone);box-shadow:0 12px 28px -12px rgba(0,0,0,.7);min-width:220px;text-align:center}.toast.ok{border-color:var(--accent);color:var(--bone)}.toast.err{border-color:var(--crimson);color:#ffb1b6}.toast.warn{border-color:var(--amber);color:var(--amber-hot)}

@media (max-width:820px),(pointer:coarse){
  #lab-drawer-scrim{inset:0}.drawer-head{position:sticky;top:-18px;z-index:2;padding-top:18px;background:rgba(8,6,10,.96)}
  #panel{top:0;width:100%;height:100dvh;padding:18px 16px calc(30px + env(safe-area-inset-bottom));border-left:0;transform:translateX(100%)}
  #panel.open{transform:translateX(0)}
  .toggle,.btn,.mode-tab,.ss-tab,.ss-import-actions button{min-height:44px}.toggle .switch{width:40px;height:22px}.toggle .switch::after{width:16px;height:16px}.toggle input:checked+.switch::after{left:20px}
  .ss-gallery{grid-template-columns:1fr}.ss-lab-grid{grid-template-columns:1fr}.ss-preview-bar{flex-wrap:wrap}.ss-preview-bar .sp{flex-basis:100%}.ss-preview-bar button.apply{flex-basis:100%;min-height:44px}.ss-mix-grid.glitch-only .ss-mix-row{grid-template-columns:72px 24px repeat(4,minmax(0,1fr))}.ss-mix-grid.hybrid .ss-mix-row{grid-template-columns:72px 22px 24px repeat(4,minmax(0,1fr))}
}
@media (max-width:520px){.ss-mix-grid.glitch-only .ss-mix-row,.ss-mix-grid.hybrid .ss-mix-row{grid-template-columns:1fr 1fr}.ss-mix-grid.hybrid .ss-mix-row .nm,.ss-mix-grid.glitch-only .ss-mix-row .nm{grid-column:1/-1}.ss-mix-grid.hybrid .ss-mix-row.row-color input[type=color]{grid-column:1/-1;height:44px}.ss-mix-row .mode-dot{width:24px;height:24px}}


/* ══ Shop publish drawer (FI-ECON-W3) ══════════════════════════════
   Ember-glass dialog in the lab language: opened from the deck's
   "Publish to Shop" action; wiring in /skin/fi-publish.module.js. */
#fi-publish-wrap{display:none;position:fixed;inset:0;z-index:340}
#fi-publish-scrim{position:absolute;inset:0;background:rgba(4,3,2,.72);backdrop-filter:blur(3px)}
#fi-publish{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(520px,94vw);
  max-height:88vh;overflow:auto;border-radius:14px;border:1px solid var(--glass-border,rgba(255,170,90,.25));
  background:linear-gradient(165deg,rgba(28,16,9,.97),rgba(12,7,4,.98));box-shadow:0 30px 80px -30px rgba(0,0,0,.9);
  padding:18px 18px 16px;color:var(--bone,#e8e4d8)}
#fi-publish .fp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}
#fi-publish .fp-head strong{display:block;font-size:19px;letter-spacing:.06em}
#fi-publish-close{background:none;border:0;color:inherit;opacity:.6;font-size:22px;line-height:1;cursor:pointer}
#fi-publish-close:hover{opacity:1}
#fi-publish .fp-row{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
#fi-publish .fp-split{display:grid;grid-template-columns:1fr 1fr;gap:12px}
#fi-publish .fp-split>div{display:flex;flex-direction:column;gap:5px}
#fi-publish input[type=text],#fi-publish input[type=number]{width:100%;box-sizing:border-box;
  background:rgba(0,0,0,.35);border:1px solid var(--glass-border,rgba(255,170,90,.25));border-radius:8px;
  color:inherit;padding:9px 11px;font:inherit}
#fi-publish .fp-static{padding:9px 11px;border-radius:8px;background:rgba(255,170,90,.08);
  border:1px solid var(--glass-border,rgba(255,170,90,.25));font-size:14px}
#fi-publish .fp-note{font-size:11.5px;opacity:.72;line-height:1.55;margin-bottom:12px}
#fi-publish .fp-actions{display:flex;gap:8px;justify-content:flex-end;margin-bottom:6px}
#fi-publish .fp-status{font-size:12px;padding:9px 11px;border-radius:8px;margin-top:4px;
  background:rgba(90,180,90,.1);border:1px solid rgba(120,200,120,.35)}
#fi-publish .fp-status.err{background:rgba(200,70,50,.12);border-color:rgba(230,110,80,.4)}
#fi-publish .fp-existing{margin-top:16px;border-top:1px solid var(--glass-border,rgba(255,170,90,.2));padding-top:12px}
#fi-publish .fp-existing-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
#fi-publish .fp-item{display:flex;align-items:center;gap:10px;padding:8px 6px;border-bottom:1px solid rgba(255,255,255,.05)}
#fi-publish .fp-item:last-child{border-bottom:0}
#fi-publish .fp-art{flex:0 0 56px;height:40px;border-radius:6px;overflow:hidden;background:rgba(0,0,0,.4);
  display:flex;align-items:center;justify-content:center}
#fi-publish .fp-art img{width:100%;height:100%;object-fit:cover;display:block}
#fi-publish .fp-noart{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;opacity:.5}
#fi-publish .fp-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
#fi-publish .fp-meta b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#fi-publish .fp-meta i{font-style:normal;font-size:12px;opacity:.6}
#fi-publish .fp-empty{padding:14px 6px;font-size:12px;opacity:.6}


/* ══ Publish surface visibility (FNF-WEB-W3b) ═══════════════════════════
   Always-visible publish pin on the stage + the capture preview pane in
   the dialog. The deck publish button remains; these make the flow obvious. */
#fi-publish-fab{position:absolute;top:172px;left:16px;z-index:60;cursor:pointer;
  font-family:'VT323',ui-monospace,monospace;font-size:16px;letter-spacing:.1em;
  color:#ffd9ae;padding:10px 16px;border-radius:10px;
  background:linear-gradient(180deg,rgba(255,170,90,.26),rgba(255,140,60,.1));
  border:1px solid rgba(255,190,110,.55);
  box-shadow:0 6px 26px -10px rgba(255,150,60,.55), inset 0 0 18px rgba(255,170,90,.08);
  transition:transform .15s, box-shadow .2s, background .2s}
#fi-publish-fab:hover{transform:translateY(-1px);
  background:linear-gradient(180deg,rgba(255,180,100,.36),rgba(255,150,70,.16));
  box-shadow:0 10px 32px -10px rgba(255,160,70,.7), inset 0 0 22px rgba(255,180,100,.12)}
@media (max-width:760px){#fi-publish-fab{top:auto;left:10px;bottom:118px;font-size:14px;padding:8px 12px}}

#fi-publish .fp-shot{position:relative;width:100%;aspect-ratio:1100/860;max-height:260px;
  border-radius:10px;overflow:hidden;background:#060404;border:1px solid rgba(255,170,90,.28);
  display:flex;align-items:center;justify-content:center}
#fi-publish .fp-shot img{width:100%;height:100%;object-fit:contain;display:block}
#fi-publish .fp-shot-empty{font-size:12px;opacity:.6;padding:0 14px;text-align:center}
#fi-publish .fp-shot-actions{display:flex;align-items:center;gap:10px;margin-top:8px}
#fi-publish .fp-shot-note{font-size:12px;opacity:.6;line-height:1.5}


/* ===== Administration section (admin-only apply-to-player, IDRP donor) =====
   Visible only after /api/me reports is_admin; the markup ships hidden and
   non-admin sessions never trigger the reveal. */
.admin-section{border:1px solid rgba(208,138,47,.30);border-radius:12px;padding:14px;background:linear-gradient(180deg,rgba(208,138,47,.07),rgba(208,138,47,.015))}
.admin-badge{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:var(--accent);text-transform:uppercase}
#admin-player-search{margin-bottom:8px}
.admin-player-list{max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin}
.admin-player-list::-webkit-scrollbar{width:6px}
.admin-player-list::-webkit-scrollbar-thumb{background:var(--bone-18);border-radius:3px}
.admin-player-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;border-radius:9px;background:var(--glass-2,rgba(255,255,255,.03));border:1px solid var(--glass-border);cursor:pointer;transition:border-color .15s,background .15s,transform .15s var(--ease)}
.admin-player-row:hover{border-color:var(--accent);background:rgba(208,138,47,.09);transform:translateX(2px)}
.admin-player-row .apr-name{font-size:14px;color:var(--bone);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.admin-player-row .apr-species{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;color:var(--bone-62);text-transform:uppercase;flex:none}
.admin-player-empty{font-family:var(--mono);font-size:11.5px;letter-spacing:.10em;color:var(--bone-34);padding:12px;text-align:center}
.admin-target-chip{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 12px;border-radius:10px;border:1px solid var(--accent);background:linear-gradient(180deg,rgba(208,138,47,.16),rgba(208,138,47,.05));margin-bottom:10px;animation:atcIn .28s var(--ease)}
@keyframes atcIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.admin-target-chip .atc-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.admin-target-chip .atc-label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--accent);text-transform:uppercase}
.admin-target-chip .atc-name{font-size:15px;font-weight:600;color:var(--bone);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.admin-target-chip .atc-meta{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;color:var(--bone-62);text-transform:uppercase}
.admin-target-chip .atc-clear{flex:none;padding:8px 12px}

/* Dock banner shown while an administrator target is armed. The hidden
   attribute needs an explicit display:none backstop (display beats the
   hidden attribute - proven fleet-wide). */
#dock-admin-banner[hidden]{display:none !important}
.dock-admin-banner{display:flex;align-items:center;justify-content:center;gap:8px;font-family:var(--mono);font-size:11.5px;letter-spacing:.10em;color:var(--bone);text-transform:uppercase;padding:8px 12px;border-radius:8px;border:1px solid var(--accent);background:linear-gradient(180deg,rgba(208,138,47,.18),rgba(208,138,47,.06));margin-top:8px}
.dock-admin-banner .dab-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-glow,rgba(208,138,47,.6));animation:dabPulse 1.6s ease-in-out infinite}
.dock-admin-banner strong{color:#ffb347}
@keyframes dabPulse{0%,100%{opacity:1}50%{opacity:.45}}


/* ── Shop publish tier picker (FI-ECON-W3) ────────────────────────────── */
.fp-tiers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.fp-tier{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border-radius:10px;border:1px solid var(--glass-border);background:var(--glass-2,rgba(255,255,255,.04));color:var(--bone-62);cursor:pointer;text-align:left;transition:border-color .16s,background .16s}
.fp-tier b{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--bone)}
.fp-tier i{font-style:normal;font-size:11px;color:var(--bone-62)}
.fp-tier:hover{border-color:var(--glass-border-lit)}
.fp-tier.is-active{border-color:var(--glass-border-lit);background:rgba(57,201,119,.08)}
.fp-tier.is-active[data-tier=common]{border-color:rgba(167,176,164,.55);background:rgba(167,176,164,.10)}
.fp-tier.is-active[data-tier=rare]{border-color:rgba(255,179,71,.60);background:rgba(255,179,71,.10)}
.fp-tier.is-active[data-tier=epic]{border-color:rgba(150,110,230,.62);background:rgba(150,110,230,.12)}
.fp-tier.is-active[data-tier=legendary]{border-color:rgba(255,214,140,.75);background:rgba(255,206,106,.12)}
.fp-item .fp-actions-inline{display:flex;gap:6px;margin-left:auto}

/* ── Skins wave 2026-07-17: publish-list rows + suggest dialog + my-suggestions ── */
#fi-publish .fp-item-thumb{width:64px;height:50px;object-fit:cover;border-radius:8px;border:1px solid var(--glass-border,rgba(255,255,255,.12));background:rgba(0,0,0,.25);flex:0 0 auto}
#fi-publish .fp-item-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
#fi-publish .fp-item-meta strong{font-size:13px;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#fi-publish .fp-item-meta span{font-size:11px;opacity:.62}
#fi-publish .fp-item-actions{display:flex;gap:6px;margin-left:auto;flex:0 0 auto}
#fi-publish .fp-item-actions .btn{font-size:11px;padding:6px 10px}

/* ── Uses + species scope (2026-07-25) ────────────────────────────────────
 * Both controls reuse the .fp-tier segmented recipe above, so the dialog
 * keeps one visual language. The count input only exists while "Limited" is
 * selected; the per-row editor below drops out of the flex row onto its own
 * line so a long skin name never squeezes it. */
/* .micro-label is white-space:nowrap globally, and these two new captions are
   full sentences -- let every caption in this dialog wrap so a 320px phone
   never scrolls sideways. */
#fi-publish .fp-row>.micro-label{white-space:normal;overflow-wrap:anywhere}
#fi-publish .fp-uses-count{display:flex;flex-direction:column;gap:5px;margin-top:8px}
#fi-publish .fp-uses-count[hidden]{display:none}
/* Three buttons now (Unpublish / Limits / Recapture card): let the row wrap
   instead of clipping the last one off a 320px screen. */
#fi-publish .fp-item{flex-wrap:wrap}
#fi-publish .fp-item-actions{flex-wrap:wrap;justify-content:flex-end;min-width:0}
@media (max-width:430px){
  /* On a phone the three buttons cannot share a line with the skin name --
     give them their own full-width row instead of clipping the last one. */
  #fi-publish .fp-item-actions{flex:1 0 100%;margin-left:0;justify-content:flex-start;margin-top:8px}
}
#fi-publish .fp-item-limits{flex:1 0 100%;display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  margin-top:8px;padding:9px 10px;border-radius:9px;background:rgba(255,255,255,.035);
  border:1px solid var(--glass-border,rgba(255,170,90,.2))}
#fi-publish .fp-item-limits[hidden]{display:none}
#fi-publish .fp-item-limits .fp-mini-label{font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;opacity:.6}
#fi-publish .fp-item-limits select,#fi-publish .fp-item-limits input[type=number]{
  padding:6px 8px;border-radius:7px;border:1px solid var(--glass-border,rgba(255,170,90,.25));
  background:rgba(0,0,0,.28);color:inherit;font-size:12px;font-family:inherit}
#fi-publish .fp-item-limits input[type=number]{width:74px}
#fi-publish .fp-item-limits input[type=number][hidden]{display:none}
#fi-publish .fp-item-limits .btn{font-size:11px;padding:6px 10px;margin-left:auto}
#fi-publish .fp-item-limits .fp-limits-note{flex:1 0 100%;font-size:11px;opacity:.6;line-height:1.5}

.sg-wrap{position:fixed;inset:0;z-index:340}
.sg-scrim{position:absolute;inset:0;background:rgba(4,3,2,.72);backdrop-filter:blur(3px)}
.sg-dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(460px,94vw);max-height:88vh;overflow:auto;background:var(--panel,#14110d);border:1px solid var(--glass-border,rgba(255,170,90,.25));border-radius:14px;padding:18px 18px 14px;box-shadow:0 24px 80px rgba(0,0,0,.55)}
.sg-dialog .fp-head strong{display:block;font-size:19px;letter-spacing:.06em}
.sg-dialog .fp-row{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
.sg-dialog .fp-static{padding:9px 11px;border-radius:8px;background:rgba(255,170,90,.08);font-size:13px}
.sg-dialog .fp-note{font-size:11.5px;opacity:.72;line-height:1.55;margin-bottom:12px}
.sg-dialog .fp-actions{display:flex;gap:8px;justify-content:flex-end;margin-bottom:6px}
.sg-dialog input[type=text],.sg-dialog textarea{width:100%;padding:9px 11px;border-radius:8px;border:1px solid var(--glass-border,rgba(255,255,255,.14));background:rgba(0,0,0,.28);color:inherit;font:inherit;font-size:13px;resize:vertical}
.sg-close{background:none;border:0;color:inherit;font-size:20px;line-height:1;cursor:pointer;opacity:.7;padding:2px 6px}
.sg-close:hover{opacity:1}

#my-suggestions .sugg-row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) auto;gap:4px 10px;align-items:center;padding:7px 4px;border-bottom:1px solid rgba(255,255,255,.05);font-size:12px}
#my-suggestions .sugg-row:last-child{border-bottom:0}
#my-suggestions .sugg-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#my-suggestions .sugg-species{opacity:.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#my-suggestions .sugg-status{font-family:var(--mono,monospace);font-size:10px;letter-spacing:.12em;padding:3px 8px;border-radius:999px;border:1px solid rgba(255,255,255,.16);justify-self:end;white-space:nowrap}
#my-suggestions .sugg-status.pending{color:#e8c268;border-color:rgba(232,194,104,.45)}
#my-suggestions .sugg-status.published{color:#5fd4a8;border-color:rgba(95,212,168,.45)}
#my-suggestions .sugg-status.rejected{color:#e08585;border-color:rgba(224,133,133,.4)}
#my-suggestions .sugg-note{grid-column:1 / -1;font-size:11px;opacity:.55;line-height:1.4}
#my-suggestions .sugg-note:empty{display:none}

.sg-dialog .fp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}

/* Copy-skin visibility wave (2026-08-03): saved skins from other species stay
   visible — chip marks the species, divider separates the groups, flash
   spotlights a row opened from the admin Copy Skin console deep link. */
.preset-divider{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--bone-34);margin:10px 2px 6px;padding-top:8px;border-top:1px dashed var(--glass-border)}
.preset-row .pm .species-chip{display:inline-block;padding:1px 7px;border:1px solid rgba(240,200,120,.4);border-radius:9px;color:var(--amber-hot);background:rgba(240,200,120,.08);font-size:10px;letter-spacing:.1em}
.preset-row.preset-flash{animation:presetFlash 1.6s ease-out 2}
@keyframes presetFlash{0%{background:var(--glass-2);border-color:var(--glass-border)}30%{background:rgba(240,200,120,.16);border-color:var(--amber-hot)}100%{background:var(--glass-2);border-color:var(--glass-border)}}
