.live-note{position:relative;z-index:2;background:var(--ai-soft);color:var(--ai);font-family:var(--mono);font-size:.72rem;text-align:center;padding:5px 10px;border-bottom:1px solid var(--border)}
.auth-name{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notice{border:1px solid var(--border);background:var(--surface-2);border-radius:12px;padding:13px 14px;color:var(--muted);font-size:.88rem;margin:0 0 14px}
.notice.warn{background:var(--warn-soft);border-color:color-mix(in srgb,var(--warn) 32%,var(--border));color:var(--warn)}
.notice.good{background:var(--good-soft);border-color:color-mix(in srgb,var(--good) 28%,var(--border));color:var(--good)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.form-grid .full{grid-column:1/-1}@media(max-width:640px){.form-grid{grid-template-columns:1fr}}
input[type=file]{width:100%;font:inherit;font-size:.86rem;padding:9px;border:1px dashed var(--border-strong);border-radius:10px;background:var(--surface)}
input[type=datetime-local],input[type=date],select{width:100%;font:inherit;padding:9px 10px;border:1px solid var(--border-strong);border-radius:10px;background:var(--surface);color:var(--ink)}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:14px}.toolbar .sub{margin:0}
.stack{display:grid;gap:12px}.mini{font-size:.78rem;color:var(--muted)}.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.actions .btn{flex:0 0 auto}.preview-actions{align-items:center;margin-top:8px}.preview-actions .hint{margin:0}
.cover-img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}.work-cover{aspect-ratio:4/3;position:relative;display:grid;place-items:center;overflow:hidden;color:#fff}.work-cover::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 45%,rgba(0,0,0,.2))}.work-cover.ai{background:linear-gradient(135deg,#0E7C7B,#0fa8a6)}.work-cover.draw{background:linear-gradient(135deg,#db5127,#f6a13c)}.work-cover.gen{background:linear-gradient(135deg,#6a45c9,#9b6ef0)}.work-cover .big{font-size:2.2rem;z-index:1}.work-cover .run{position:absolute;inset:0;border:0;background:rgba(9,10,18,.32);color:#fff;opacity:0;transition:opacity .2s;z-index:2}.work-cover:hover .run,.work-cover:focus-within .run{opacity:1}.work-cover .run span{display:inline-block;background:rgba(0,0,0,.62);padding:8px 14px;border-radius:999px}
.status-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.status-line .pill{margin-left:auto}.assignment-row{display:flex;gap:10px;align-items:flex-start;justify-content:space-between}.assignment-row h3{margin:0;font-size:1rem}.assignment-row p{margin:4px 0 0}.empty p{margin:6px 0 0}.admin-split{display:grid;grid-template-columns:1.1fr .9fr;gap:14px}@media(max-width:760px){.admin-split{grid-template-columns:1fr}}
.profile-warning{font-size:.82rem;color:var(--warn);margin-top:4px}.image-preview{display:block;width:100%;max-height:190px;object-fit:cover;border-radius:10px;margin-top:9px;border:1px solid var(--border)}
.danger{color:#ff9b9b;border-color:color-mix(in srgb,#ff6b6b 40%,var(--border))}.p5-draft{margin-top:10px;border:1px solid var(--border);border-radius:12px;overflow:hidden;background:#10131c}.p5-draft-head,.p5-pane-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;background:#171b26;border-bottom:1px solid #2c3242;color:#d9ddef;font:500 .78rem var(--mono)}.p5-draft-head span,.p5-pane-head span{color:#8992aa;font-size:.7rem}.p5-source{display:block;width:100%;min-height:280px;resize:vertical;border:0!important;border-radius:0!important;background:#10131c!important;color:#edf1ff!important;font:13px/1.55 var(--mono)!important;tab-size:2}.p5-box{width:min(1160px,calc(100vw - 28px))!important;max-width:none!important}.p5-workbench{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:450px;background:#10131c}.p5-editor-pane,.p5-preview-pane{min-width:0;display:flex;flex-direction:column}.p5-editor-pane{border-right:1px solid #2c3242}.p5-editor-pane .p5-source{height:100%;min-height:400px;flex:1}.p5-runner-host{position:relative;flex:1;min-height:400px;background:#0a0d14;display:grid;place-items:center}.p5-runner-host iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.p5-canvas-empty{color:#8f99b4;font:13px var(--mono);padding:22px;text-align:center}.p5-workbench-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:11px 14px;background:#171b26;border-top:1px solid #2c3242}.p5-security{margin-left:auto;color:#a9b2ca;font-size:.78rem}.p5-console-wrap{border-top:1px solid #2c3242;background:#0b0e15}.p5-console-head{padding:7px 12px;color:#aab3ca;font:600 .72rem var(--mono);border-bottom:1px solid #252b39}.p5-console{min-height:48px;max-height:150px;overflow:auto;margin:0;padding:10px 12px;color:#c9d2e9;font:12px/1.5 var(--mono);white-space:pre-wrap}.p5-console[data-tone="ok"]{color:#80e0bd}.p5-console[data-tone="error"]{color:#ffb0b0}@media(max-width:760px){.p5-workbench{grid-template-columns:1fr;min-height:0}.p5-editor-pane{border-right:0;border-bottom:1px solid #2c3242}.p5-editor-pane .p5-source,.p5-runner-host{min-height:300px}.p5-security{width:100%;margin-left:0}}

/* ThreeUI catalog layout with a restrained liquid-glass surface. */
:root{--ground:#070911;--surface:#101521;--surface-2:#151b29;--ink:#f4f6ff;--muted:#9da8be;--faint:#6e7890;--border:#283245;--border-strong:#3a4760;--ai:#5ce3dd;--ai-soft:#102c32;--art:#ff946f;--art-soft:#372018;--gen:#bda2ff;--gen-soft:#211a3d;--accent:#84f5ea;--glass:rgba(16,21,33,.66);--glass-border:rgba(196,214,255,.13);--shadow:0 10px 30px rgba(0,0,0,.2);--shadow-lg:0 22px 60px rgba(0,0,0,.42)}
body{background:radial-gradient(circle at 82% -8%,rgba(104,83,255,.2),transparent 32%),radial-gradient(circle at -10% 28%,rgba(39,199,193,.13),transparent 34%),var(--ground);}
body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.18;background-image:linear-gradient(rgba(174,197,255,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(174,197,255,.06) 1px,transparent 1px);background-size:42px 42px;mask-image:linear-gradient(to bottom,black,transparent 68%)}
.live-note{background:rgba(7,9,17,.82);border-color:rgba(189,162,255,.16);color:#bda2ff;letter-spacing:.08em}
header.app{background:rgba(7,9,17,.72);border-color:rgba(196,214,255,.1);backdrop-filter:blur(24px) saturate(1.25)}
.bar,nav.tabs,main{max-width:1180px}.bar{padding:14px 22px}.brand{font-family:var(--mono);font-size:1rem;letter-spacing:.02em;white-space:normal}.brand-copy{display:flex;align-items:center;gap:12px;min-width:0}.brand-title{font-family:var(--serif);font-size:1.42rem;line-height:1;letter-spacing:.05em;background:linear-gradient(120deg,#fff 10%,#c8fff8 52%,#bda2ff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 18px rgba(132,245,234,.18);white-space:nowrap}.brand-tagline{color:#9da8be;font:500 .68rem/1.35 var(--sans);letter-spacing:.01em;padding-left:12px;margin-left:0;border-left:1px solid rgba(196,214,255,.22);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand .dot{border-radius:9px;width:28px;height:28px}.btn{border-radius:999px;background:rgba(255,255,255,.045);border-color:rgba(196,214,255,.16)}
nav.tabs{gap:6px;padding:0 16px 8px}nav.tabs button{border:1px solid transparent;border-radius:999px;padding:7px 12px}nav.tabs button.active{background:rgba(132,245,234,.1);border-color:rgba(132,245,234,.17);color:#9ff9ef}nav.tabs button:hover:not(.active){background:rgba(255,255,255,.05)}.brand .brand-logo{width:30px;height:30px;object-fit:contain;flex:none;filter:drop-shadow(0 2px 7px rgba(255,255,255,.12))}
main{padding:28px 22px 96px}.catalog-kicker{margin:0 0 8px;color:#8ff5ed;font:600 .69rem/1.2 var(--mono);letter-spacing:.14em}.catalog-hero{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,.92fr) minmax(360px,1.08fr);min-height:410px;margin-bottom:20px;border-radius:28px;border:1px solid rgba(205,218,255,.14);isolation:isolate}.liquid-surface{background:linear-gradient(135deg,rgba(24,30,46,.8),rgba(12,16,27,.55));box-shadow:inset 0 1px rgba(255,255,255,.1),var(--shadow-lg);backdrop-filter:blur(22px) saturate(1.35)}.liquid-surface::before{content:'';position:absolute;width:360px;height:360px;border-radius:50%;z-index:-1;background:radial-gradient(circle at 38% 32%,rgba(120,255,239,.34),rgba(134,103,255,.2) 38%,transparent 70%);filter:blur(18px);right:-120px;top:-180px;animation:liquidDrift 14s ease-in-out infinite alternate}@keyframes liquidDrift{to{transform:translate(-78px,122px) scale(1.22)}}
.catalog-copy{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:42px 20px 42px 42px}.catalog-copy h1{margin:0;font:800 clamp(2.6rem,5vw,5.4rem)/.97 var(--serif);letter-spacing:-.08em}.catalog-copy h1 em{font-style:normal;background:linear-gradient(110deg,#9cf8ef,#b59cff 52%,#ffb48f);-webkit-background-clip:text;background-clip:text;color:transparent}.catalog-copy>p:not(.catalog-kicker){max-width:440px;margin:20px 0;color:#b8c1d4;font-size:.98rem}.catalog-stat{display:flex;align-items:center;gap:9px;color:#aeb8ce;font-size:.78rem}.catalog-stat b{font:700 1.42rem/1 var(--mono);color:#fff}.catalog-stat i{width:1px;height:16px;background:rgba(255,255,255,.24);margin:0 2px}.catalog-scene{position:relative;min-height:410px;border-left:1px solid rgba(196,214,255,.1);background:linear-gradient(135deg,rgba(7,9,17,.06),rgba(122,91,255,.1))}.catalog-scene #heroMount{height:100%;min-height:410px}.scene-label{position:absolute;inset:auto 22px 19px;display:flex;align-items:center;justify-content:space-between;gap:12px;color:#b7c2dc;font:500 .64rem var(--mono);letter-spacing:.1em;pointer-events:none}.scene-label b{font-weight:500;color:#fff}
.gallery-toolbar{position:relative;display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;margin:0 0 18px;padding:18px 20px;border:1px solid rgba(196,214,255,.13);border-radius:18px;overflow:hidden}.gallery-toolbar h2{margin:0;font:700 1.25rem var(--serif)}.gallery-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.filters{margin:0;gap:6px}.fchip{background:rgba(255,255,255,.045);border-color:rgba(196,214,255,.15);padding:6px 11px}.work-search{display:flex;align-items:center;gap:8px;width:220px;padding:7px 11px;border:1px solid rgba(196,214,255,.16);border-radius:999px;background:rgba(4,6,12,.28);color:#84f5ea}.work-search input{min-width:0;width:100%;border:0!important;outline:0!important;padding:0!important;background:transparent!important;box-shadow:none!important;color:var(--ink);font:inherit}.work-search input::placeholder{color:#71809a}.gallery-count{margin:0;white-space:nowrap;color:#9da8be;font-size:.8rem}.gallery-count b{color:#fff;font:600 .9rem var(--mono)}
.catalog-wall{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.art{border-color:rgba(196,214,255,.14);border-radius:18px;background:linear-gradient(145deg,rgba(25,31,47,.76),rgba(12,16,27,.67));box-shadow:inset 0 1px rgba(255,255,255,.08),var(--shadow);backdrop-filter:blur(18px)}.art:hover{transform:translateY(-7px);border-color:rgba(159,249,239,.35);box-shadow:0 26px 56px rgba(0,0,0,.36),0 0 0 1px rgba(132,245,234,.1)}.work-cover{aspect-ratio:16/10}.art .body{padding:16px;gap:8px}.art .ttl{font-size:1.03rem}.art .desc{line-height:1.55}.tool-link{align-self:flex-start;margin-top:4px;text-decoration:none}.work-cover .run{display:grid;place-items:center;text-decoration:none}.art[hidden]{display:none!important}
.card,.hwitem{background:linear-gradient(145deg,rgba(25,31,47,.74),rgba(12,16,27,.64));border-color:rgba(196,214,255,.13);box-shadow:inset 0 1px rgba(255,255,255,.07),var(--shadow)}.modal{background:rgba(3,5,10,.82)}.modal .box{border:1px solid rgba(196,214,255,.17);background:#111724}.p5-workbench,.p5-draft{background:#0b0f18}.p5-draft-head,.p5-pane-head,.p5-workbench-actions{background:#121827}.p5-console-wrap{background:#090d15}
@media(max-width:820px){.catalog-hero{grid-template-columns:1fr}.catalog-copy{padding:38px 28px 30px}.catalog-scene{min-height:285px;border-left:0;border-top:1px solid rgba(196,214,255,.1)}.catalog-scene #heroMount{min-height:285px}.gallery-toolbar{grid-template-columns:1fr auto}.gallery-controls{grid-column:1/-1;justify-content:flex-start}.catalog-wall{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){main{padding:18px 14px 72px}.bar{padding:12px 14px}.brand{flex-wrap:wrap;row-gap:1px}.brand-copy{gap:7px;flex-wrap:wrap}.brand-title{font-size:1.18rem}.brand-tagline{flex-basis:100%;border-left:0;padding-left:0;margin-left:0;margin-top:-2px;font-size:.62rem;white-space:normal;color:#8995aa}.catalog-hero{border-radius:22px}.catalog-copy{padding:32px 22px 26px}.catalog-copy h1{font-size:2.65rem}.catalog-scene,.catalog-scene #heroMount{min-height:235px}.gallery-toolbar{grid-template-columns:1fr;padding:16px}.gallery-count{display:none}.work-search{width:100%}.gallery-controls{width:100%}.catalog-wall{grid-template-columns:1fr}.scene-label{inset:auto 16px 14px}.auth-name{display:none}}

/* Teacher-selected featured artwork carousel. */
.featured-stage{position:absolute;inset:0;overflow:hidden;background:#080b14}.featured-stage #heroMount{height:100%;min-height:410px}.featured-image{display:block;width:100%;height:100%;object-fit:cover;animation:featuredIn .7s ease both}.featured-p5-host{position:absolute;inset:0;background:#080b14}.featured-p5-host iframe{width:100%;height:100%;border:0;display:block}.featured-empty{height:100%;display:grid;place-items:center;padding:28px;text-align:center;color:#aeb8ce;font:.82rem/1.7 var(--mono);background:radial-gradient(circle at 50% 45%,rgba(102,78,223,.24),transparent 58%)}.featured-caption{position:absolute;inset:auto 18px 54px;display:flex;align-items:center;gap:9px;color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.65);z-index:2}.featured-caption span{padding:5px 8px;border:1px solid rgba(255,255,255,.25);border-radius:999px;background:rgba(7,9,17,.62);font:.65rem var(--mono);letter-spacing:.08em}.featured-caption b{font:700 1.1rem var(--serif);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.featured-caption em{margin-left:auto;font:500 .68rem var(--mono);font-style:normal;white-space:nowrap}.featured-dots{position:absolute;right:18px;top:18px;display:flex;gap:5px;z-index:2}.featured-dot{width:7px;height:7px;border-radius:99px;background:rgba(255,255,255,.35)}.featured-dot.on{width:20px;background:#9ff9ef}@keyframes featuredIn{from{opacity:.15;transform:scale(1.025)}to{opacity:1;transform:scale(1)}}
.featured-admin{margin-top:14px}.featured-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}.featured-option{display:flex;gap:9px;align-items:flex-start;padding:10px;border:1px solid var(--border);border-radius:11px;background:rgba(4,6,12,.2);cursor:pointer}.featured-option:hover{border-color:rgba(159,249,239,.4)}.featured-option input{accent-color:#84f5ea;margin-top:3px}.featured-option b,.featured-option small{display:block}.featured-option b{font-size:.9rem}.featured-option small{margin-top:3px;color:var(--muted);font-size:.76rem}@media(max-width:820px){.featured-stage #heroMount{min-height:285px}}@media(max-width:560px){.featured-stage #heroMount{min-height:235px}.featured-caption{inset:auto 14px 46px}.featured-caption b{font-size:1rem}.featured-options{grid-template-columns:1fr}}

.site-footer{position:relative;z-index:1;max-width:1180px;margin:0 auto;padding:0 22px 34px;display:flex;align-items:center;justify-content:center;gap:10px;color:#768299;text-align:left}.site-footer img{width:34px;height:34px;filter:drop-shadow(0 4px 10px rgba(132,245,234,.2))}.site-footer div{display:grid;gap:2px}.site-footer b{color:#b9c5d9;font:600 .72rem var(--mono);letter-spacing:.04em}.site-footer span{font-size:.68rem;color:#68748b}@media(max-width:560px){.site-footer{padding:0 16px 28px}.site-footer b{font-size:.65rem}.site-footer span{font-size:.62rem}}
.brand .brand-mark-shell{width:48px;height:48px;display:grid;place-items:center;flex:none;border:1px solid rgba(132,245,234,.34);border-radius:10px;background:linear-gradient(145deg,rgba(66,81,102,.68),rgba(18,23,33,.96));box-shadow:0 0 0 1px rgba(255,255,255,.06) inset,0 4px 14px rgba(83,203,224,.18)}
.brand .brand-logo{width:46px;height:46px;object-fit:contain;filter:brightness(1.35) saturate(1.2) drop-shadow(0 0 3px rgba(122,234,225,.55));image-rendering:pixelated}
.site-footer img{width:48px;height:48px;padding:6px;object-fit:contain;border-radius:14px;background:#fff;border:1px solid rgba(255,255,255,.55);filter:drop-shadow(0 4px 12px rgba(0,0,0,.28))}
.p5-viewer-box{width:min(1040px,calc(100vw - 28px))!important;max-width:none!important}.p5-viewer-meta{padding:18px 20px;background:#151b26;border-bottom:1px solid #2c3242}.p5-viewer-meta h2{margin:0;color:#f3f6ff;font:700 1.35rem var(--serif)}.p5-viewer-meta p{margin:8px 0 0;color:#b4bfd4;line-height:1.65}.p5-viewer-meta .p5-interaction-help{margin:10px 0 0}.p5-viewer-stage{background:#0a0d14}.p5-viewer-stage .p5-pane-head{border-top:0}.p5-viewer-stage .p5-runner-host{min-height:560px;height:min(64vh,640px)}.p5-viewer-note{margin:0;padding:10px 18px;background:#10141e;color:#8f9ab3;font-size:.78rem}@media(max-width:760px){.p5-viewer-stage .p5-runner-host{min-height:360px;height:58vh}}



/* ═══ Liquid Glass Enhancement ═══
   Only visual effects — no layout changes.
   Adds: edge lighting, saturated blur, surface reflection, category glow.
*/
:root {
  --lg-blur: blur(18px) saturate(1.8);
  --lg-edge-top: rgba(255,255,255,0.25);
  --lg-edge-bot: rgba(255,255,255,0.04);
  --lg-reflect: linear-gradient(135deg, rgba(255,255,255,0.15) 0%, transparent 38%, transparent 62%, rgba(255,255,255,0.05) 100%);
  --ai-glow: rgba(92,227,221,0.13);
  --art-glow: rgba(255,148,111,0.13);
  --gen-glow: rgba(189,162,255,0.13);
}

/* Header — sharper glass with edge lighting */
header.app {
  backdrop-filter: blur(24px) saturate(1.8);
  -webkit-backdrop-filter: blur(24px) saturate(1.8);
  box-shadow: inset 0 -1px 0 var(--lg-edge-bot), 0 4px 24px rgba(0,0,0,0.28);
}

/* Art cards — full liquid glass surface */
.art {
  position: relative;
  backdrop-filter: var(--lg-blur);
  -webkit-backdrop-filter: var(--lg-blur);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 10px 30px rgba(0,0,0,0.22),
    0 2px 8px rgba(0,0,0,0.12);
}
/* Surface reflection gradient — simulates curved glass */
.art::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: var(--lg-reflect);
  pointer-events: none;
  z-index: 3;
}

/* Category glow — colored inner light through glass */
.art.glow-ai {
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 10px 30px rgba(0,0,0,0.22),
    0 0 32px var(--ai-glow),
    inset 0 0 22px var(--ai-glow);
}
.art.glow-ai:hover {
  border-color: rgba(92,227,221,0.38);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    0 26px 56px rgba(0,0,0,0.36),
    0 0 48px rgba(92,227,221,0.22),
    inset 0 0 28px rgba(92,227,221,0.15);
}
.art.glow-gen {
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 10px 30px rgba(0,0,0,0.22),
    0 0 32px var(--gen-glow),
    inset 0 0 22px var(--gen-glow);
}
.art.glow-gen:hover {
  border-color: rgba(189,162,255,0.38);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    0 26px 56px rgba(0,0,0,0.36),
    0 0 48px rgba(189,162,255,0.22),
    inset 0 0 28px rgba(189,162,255,0.15);
}
.art.glow-art {
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 10px 30px rgba(0,0,0,0.22),
    0 0 32px var(--art-glow),
    inset 0 0 22px var(--art-glow);
}
.art.glow-art:hover {
  border-color: rgba(255,148,111,0.38);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    0 26px 56px rgba(0,0,0,0.36),
    0 0 48px rgba(255,148,111,0.22),
    inset 0 0 28px rgba(255,148,111,0.15);
}

/* General panels — liquid glass edge lighting */
.card, .hwitem {
  backdrop-filter: var(--lg-blur);
  -webkit-backdrop-filter: var(--lg-blur);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 10px 30px rgba(0,0,0,0.20);
}

/* Gallery toolbar — liquid glass */
.gallery-toolbar {
  backdrop-filter: var(--lg-blur);
  -webkit-backdrop-filter: var(--lg-blur);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    0 8px 24px rgba(0,0,0,0.18);
}

/* Filter chips — subtle liquid edge */
.fchip {
  backdrop-filter: blur(8px) saturate(1.5);
  -webkit-backdrop-filter: blur(8px) saturate(1.5);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.10);
}
.fchip:hover {
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.16), 0 4px 16px rgba(0,0,0,0.18);
}
.fchip.on.ai {
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.12), 0 0 18px var(--ai-glow);
}
.fchip.on.draw {
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.12), 0 0 18px var(--art-glow);
}
.fchip.on.gen {
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.12), 0 0 18px var(--gen-glow);
}

/* Hero liquid surface — enhanced */
.catalog-hero .liquid-surface {
  backdrop-filter: blur(22px) saturate(1.8);
  -webkit-backdrop-filter: blur(22px) saturate(1.8);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    inset 0 -1px 0 var(--lg-edge-bot),
    var(--shadow-lg);
}

/* Nav tabs — glass on active */
nav.tabs button.active {
  backdrop-filter: blur(10px) saturate(1.5);
  -webkit-backdrop-filter: blur(10px) saturate(1.5);
  box-shadow: inset 0 1px 0 rgba(132,245,234,0.12);
}

/* Modal — liquid glass */
.modal .box {
  backdrop-filter: blur(20px) saturate(1.6);
  -webkit-backdrop-filter: blur(20px) saturate(1.6);
  box-shadow:
    inset 0 1px 0 var(--lg-edge-top),
    0 24px 70px rgba(0,0,0,0.5);
}

/* Big button — edge lighting */
.bigbtn {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.22),
    0 4px 20px rgba(14,124,123,0.30);
}

/* Toast — liquid glass */
.toast {
  backdrop-filter: blur(16px) saturate(1.6);
  -webkit-backdrop-filter: blur(16px) saturate(1.6);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.10),
    0 8px 30px rgba(0,0,0,0.35);
}

/* ═══ 學習連結 — 收納手風琴 ═══ */
.link-accordion {
  border-radius: 14px;
  overflow: hidden;
  margin-bottom: 12px;
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(12px) saturate(1.4);
  -webkit-backdrop-filter: blur(12px) saturate(1.4);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.08),
    0 2px 8px rgba(0,0,0,0.18);
  transition: box-shadow .2s;
}
.link-accordion[open] {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.12),
    0 4px 16px rgba(0,0,0,0.22);
}
.link-accordion-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  cursor: pointer;
  list-style: none;
  user-select: none;
  font-weight: 600;
  font-size: 1.05rem;
  color: var(--fg, #e8e8e8);
  transition: background .15s;
}
.link-accordion-header::-webkit-details-marker { display: none; }
.link-accordion-header::marker { content: ''; }
.link-accordion-header:hover {
  background: rgba(255,255,255,0.05);
}
.link-accordion-icon {
  font-size: 1.3rem;
  flex-shrink: 0;
}
.link-accordion-title {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
.link-accordion-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 22px;
  height: 22px;
  padding: 0 6px;
  border-radius: 11px;
  background: rgba(255,255,255,0.12);
  font-size: .75rem;
  font-weight: 500;
  color: var(--fg, #ccc);
}
.link-accordion-desc {
  flex: 1;
  font-size: .82rem;
  font-weight: 400;
  color: var(--fg-dim, #999);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.link-accordion-arrow {
  flex-shrink: 0;
  font-size: .9rem;
  transition: transform .2s;
  color: var(--fg-dim, #888);
}
.link-accordion[open] > .link-accordion-header .link-accordion-arrow {
  transform: rotate(180deg);
}
.link-accordion-body {
  padding: 0 12px 12px;
}
.link-accordion-body .hwitem {
  border-radius: 10px;
}
/* 亮色主題微調 */
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .link-accordion {
    background: rgba(0,0,0,0.03);
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,0.5),
      0 2px 6px rgba(0,0,0,0.08);
  }
  :root:not([data-theme="dark"]) .link-accordion-count {
    background: rgba(0,0,0,0.08);
    color: #555;
  }
}
:root[data-theme="light"] .link-accordion {
  background: rgba(0,0,0,0.03);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    0 2px 6px rgba(0,0,0,0.08);
}
:root[data-theme="light"] .link-accordion-count {
  background: rgba(0,0,0,0.08);
  color: #555;
}
