:root{color-scheme:light;--bg: #fff8f2;--surface: #ffffff;--surface-2: #fdf1e6;--ink: #2b2015;--muted: #8a7a6a;--border: #f0e2d2;--border-2: #e6d3ba;--accent: #ff6b47;--accent-ink: #ffffff;--accent-soft: #ffe4d9;--success: #1f9d63;--success-soft: #dff5e8;--warn: #e2962a;--warn-soft: #fbead0;--self: #7d6bb0;--self-soft: #ece7f7;--danger: #e0524a;--danger-soft: #fbe1de;--radius: 16px;--radius-sm: 10px;--shadow-1: 0 1px 3px rgba(60, 40, 20, .08);--shadow-2: 0 10px 30px rgba(60, 40, 20, .1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--bg: #1c1712;--surface: #251e17;--surface-2: #2d251c;--ink: #f7ede1;--muted: #b3a08c;--border: #3a2f24;--border-2: #4a3c2c;--accent: #ff8a63;--accent-ink: #2b1006;--accent-soft: #4a2c1c;--success: #4fce93;--success-soft: #1d3b2a;--warn: #f0b653;--warn-soft: #3d2f14;--self: #b1a2e6;--self-soft: #322a4a;--danger: #f0847c;--danger-soft: #402320;--shadow-1: 0 1px 3px rgba(0, 0, 0, .35);--shadow-2: 0 10px 30px rgba(0, 0, 0, .4)}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{line-height:1.15;margin:0 0 .5em;letter-spacing:-.015em;font-weight:800;color:var(--ink)}h1{font-size:2.25rem}h2{font-size:1.4rem}h3{font-size:1.1rem}p{margin:0 0 .75em;color:var(--ink)}a{color:var(--accent);font-weight:600}small,.small{font-size:.85rem}button{font:inherit;cursor:pointer;background:var(--accent);color:var(--accent-ink);border:0;border-radius:var(--radius-sm);padding:12px 20px;font-weight:700;box-shadow:var(--shadow-1);transition:filter .12s,transform .05s,box-shadow .12s}button:hover{filter:brightness(1.06);box-shadow:var(--shadow-2)}button:active{transform:translateY(1px);box-shadow:var(--shadow-1)}button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}button.secondary{background:var(--surface);color:var(--ink);border:1.5px solid var(--border-2);box-shadow:none}button.secondary:hover{border-color:var(--accent);filter:none;box-shadow:none}button.ghost{background:transparent;color:var(--muted);border:1.5px solid transparent;padding:9px 13px;font-weight:600;box-shadow:none}button.ghost:hover{color:var(--ink);background:var(--surface-2);box-shadow:none}button.danger{background:var(--danger);color:#fff}button.block{width:100%}button.small-btn{padding:8px 14px;font-size:.85rem;min-height:44px;min-width:44px}input,textarea,select{font:inherit;color:var(--ink);background:var(--surface);border:1.5px solid var(--border-2);border-radius:var(--radius-sm);padding:10px 12px;width:100%}input:focus,textarea:focus,select:focus,button:focus-visible,a:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent)}label{font-size:.85rem;font-weight:700;display:block;margin-bottom:4px;color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:calc(var(--radius) + 4px);padding:24px;box-shadow:var(--shadow-1)}.muted{color:var(--muted)}.center{text-align:center}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.row.between{justify-content:space-between}.col{display:flex;flex-direction:column;gap:10px}.stack{display:flex;flex-direction:column;gap:16px}.spacer{flex:1}.chip{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:700;padding:6px 12px;border-radius:999px;background:var(--surface-2);border:1px solid var(--border-2);color:var(--muted);white-space:nowrap}.chip.on{color:var(--success);border-color:color-mix(in srgb,var(--success) 40%,var(--border-2));background:var(--success-soft)}.chip.warn-chip{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,var(--border-2));background:var(--warn-soft)}.chip.guest{cursor:pointer}.chip.guest:hover{color:var(--ink)}.chip.selected{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.tooltip-wrap{position:relative;display:inline-flex}.tooltip-wrap .tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--ink);border:1px solid var(--ink);color:var(--bg);padding:8px 10px;border-radius:8px;font-size:.8rem;width:220px;opacity:0;pointer-events:none;transition:opacity .15s;z-index:30;box-shadow:var(--shadow-2)}.tooltip-wrap:hover .tooltip,.tooltip-wrap:focus-within .tooltip{opacity:1}.container{max-width:880px;margin:0 auto;padding:20px 20px 60px}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:14px;padding:12px 20px;background:color-mix(in srgb,var(--bg) 90%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}.brand{font-weight:800;font-size:1.1rem;letter-spacing:-.01em;display:flex;align-items:center;gap:9px;color:var(--ink)}.brand-mark{width:30px;height:30px;border-radius:10px;background:linear-gradient(150deg,var(--accent),#ff8f6b);display:inline-flex;align-items:center;justify-content:center;color:#fff;font-weight:900;font-size:.95rem;box-shadow:var(--shadow-1)}.nav-links{display:flex;gap:4px;margin-left:8px}.nav-links button{background:transparent;color:var(--muted);font-weight:700;padding:8px 12px;border-radius:10px;box-shadow:none}.nav-links button.active{color:var(--accent);background:var(--accent-soft)}.nav-links button:hover{color:var(--ink);background:var(--surface-2)}@media (max-width: 700px){.topbar{flex-wrap:wrap;gap:8px;padding:10px 12px}.nav-links{order:3;width:100%;margin-left:0;overflow-x:auto}.chip.guest{max-width:50vw;overflow:hidden;text-overflow:ellipsis;display:inline-block}}.honesty-line{font-size:.82rem;color:var(--muted);text-align:center;padding:10px 12px;border-top:1px dashed var(--border-2)}.home-hero{background:linear-gradient(155deg,var(--accent-soft),var(--surface) 70%);border:1px solid var(--border);border-radius:calc(var(--radius) + 8px);padding:28px 26px;box-shadow:var(--shadow-1)}.home-hero h1{margin-bottom:6px}.home-hero-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap;justify-content:space-between}.streak-badge{display:flex;align-items:center;gap:12px}.streak-badge-num{font-size:1.9rem;font-weight:900;line-height:1;color:var(--ink)}.streak-badge-label{font-size:.8rem;color:var(--muted);font-weight:700}.hero-btn{font-size:1.05rem;padding:16px 28px;border-radius:14px}.section-label{text-transform:uppercase;letter-spacing:.08em;font-size:.75rem;color:var(--muted);font-weight:800;margin:26px 0 12px}.mode-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.mode-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;text-align:left;color:var(--ink);font-weight:800;cursor:pointer;box-shadow:var(--shadow-1);display:flex;align-items:flex-start;gap:14px}.mode-card:hover{border-color:var(--accent);box-shadow:var(--shadow-2);filter:none;transform:translateY(-1px)}.mode-card:active{transform:translateY(0)}.mode-card .mode-icon{flex:0 0 auto;width:44px;height:44px;border-radius:12px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center}.mode-card .mode-text{min-width:0}.mode-card .desc{font-weight:500;color:var(--muted);font-size:.85rem;margin-top:4px;line-height:1.4}.mastery-strip{display:grid;grid-template-columns:repeat(13,1fr);gap:8px}@media (max-width: 480px){.mastery-strip{grid-template-columns:repeat(6,1fr)}}.mastery-cell{aspect-ratio:1;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:800;border:2px solid var(--border-2);background:var(--surface);color:var(--muted)}.mastery-cell.lvl-1{border-color:color-mix(in srgb,var(--accent) 35%,var(--border-2));color:var(--ink)}.mastery-cell.lvl-2,.mastery-cell.lvl-3{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}.mastery-cell.lvl-4,.mastery-cell.lvl-5{border-color:var(--success);color:var(--ink);background:var(--success-soft)}.skeleton-row{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--surface-2),var(--border),var(--surface-2));background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sign-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.sign-tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 10px 14px;text-align:center;cursor:pointer;color:var(--ink);position:relative;display:flex;flex-direction:column;align-items:center;box-shadow:var(--shadow-1)}.sign-tile:hover,.sign-tile:focus-visible{border-color:var(--accent);filter:none;box-shadow:var(--shadow-2)}.sign-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tile-badge-row{width:100%;min-height:20px;display:flex;justify-content:flex-end}.motion-badge{font-size:.6rem;background:var(--warn-soft);color:var(--warn);border-radius:6px;padding:2px 6px;font-weight:800;white-space:nowrap}.tile-drawing{height:64px;width:100%;display:flex;align-items:center;justify-content:center;margin-bottom:8px;flex:0 0 auto}.schematic{opacity:.62;transform:scale(.8);transform-origin:center}.sign-tile .glyph{font-size:1.4rem;font-weight:800;line-height:1.2;width:100%;min-height:2.4em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.sign-tile .glyph.glyph-long{font-size:.92rem}.sign-tile .pips{display:flex;justify-content:center;gap:3px;margin-top:10px;min-height:8px;flex:0 0 auto}.pip{width:7px;height:7px;border-radius:50%;background:var(--border-2)}.pip.filled{background:var(--accent)}.detail-hero{display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:center}@media (max-width: 620px){.detail-hero{grid-template-columns:1fr}}.skeleton-frame{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);aspect-ratio:1;padding:8px}.sign-art-img{width:100%;height:100%;object-fit:contain;display:block}@media (prefers-color-scheme: dark){.sign-art-img{filter:invert(1) brightness(1.6)}}.chip-row{display:flex;flex-wrap:wrap;gap:8px}.confusion-chip{background:var(--surface-2);border:1px solid var(--border-2);border-radius:999px;padding:7px 14px;font-weight:700;font-size:.85rem;color:var(--ink);cursor:pointer}.confusion-chip:hover{border-color:var(--accent)}.check-block{background:var(--surface-2);border-radius:var(--radius);padding:16px 18px;font-size:.9rem}.not-scored-badge{display:inline-block;background:var(--self-soft);color:var(--self);border:1px solid color-mix(in srgb,var(--self) 40%,var(--border-2));border-radius:999px;padding:3px 10px;font-size:.75rem;font-weight:800}.practice-layout{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}@media (max-width: 720px){.practice-layout{grid-template-columns:1fr}}.detail-box{border:1px solid var(--border);border-radius:10px;padding:10px 12px;font-size:.82rem;color:var(--muted);display:grid;gap:6px;background:var(--surface-2)}.detail-row{display:grid;grid-template-columns:6.5rem 1fr 2.5rem;align-items:center;gap:8px}.detail-head{grid-template-columns:1fr auto;color:var(--muted);opacity:.85;font-size:.75rem}.detail-row.is-target{color:var(--ink);font-weight:700}.detail-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-bar{background:var(--border-2);border-radius:3px;height:6px;overflow:hidden}.detail-bar i{display:block;height:100%;background:var(--accent)}.detail-num{text-align:right;font-variant-numeric:tabular-nums}.detail-warn{color:var(--warn)}.prompt-card{text-align:center;padding:30px 22px}.prompt-glyph{font-size:4.4rem;font-weight:900;letter-spacing:-.02em;margin-bottom:8px;color:var(--ink)}.prompt-desc{color:var(--muted);font-size:.97rem}.camera-pane{position:relative;background:#0d0f14;border-radius:calc(var(--radius) + 4px);border:3px solid var(--border);overflow:hidden;aspect-ratio:4/3;transition:border-color .2s ease,box-shadow .2s ease;box-shadow:var(--shadow-1)}.camera-pane.state-success{border-color:var(--success);box-shadow:0 0 0 4px color-mix(in srgb,var(--success) 22%,transparent)}.camera-pane.state-closepair{border-color:var(--warn);box-shadow:0 0 0 4px color-mix(in srgb,var(--warn) 22%,transparent)}.camera-pane .mirror-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.camera-pane .mirror-wrap.mirrored{transform:scaleX(-1)}.camera-pane video{width:100%;height:100%;object-fit:fill;display:block}.camera-pane .overlay-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.camera-pane .pane-msg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:20px;color:#cfc7bd;font-size:.9rem;background:#0d0f14}.camera-controls{position:absolute;bottom:12px;right:12px;display:flex;align-items:center;gap:8px}.success-bloom{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;pointer-events:none;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--success) 20%,transparent);animation:success-wash-kf .9s ease-out forwards}@keyframes success-wash-kf{0%{opacity:0}15%{opacity:1}to{opacity:0}}.success-bloom svg{animation:success-check-kf .55s cubic-bezier(.2,1.4,.4,1) both;filter:drop-shadow(0 4px 10px rgba(0,0,0,.25))}.success-check-icon{color:#fff;background:var(--success);border-radius:999px;padding:10px;box-shadow:0 6px 18px #0003}@keyframes success-check-kf{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.12);opacity:1}to{transform:scale(1);opacity:1}}.progress-dots{display:flex;gap:6px;justify-content:center}.progress-dots .dot{width:8px;height:8px;border-radius:50%;background:var(--border-2)}.progress-dots .dot.done{background:var(--success)}.progress-dots .dot.current{background:var(--accent)}.caption-line{text-align:center;font-weight:700;min-height:2.8em;display:flex;align-items:center;justify-content:center}.caption-line.success{color:var(--success)}.caption-line.warn{color:var(--warn)}.self-check-face{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;padding:40px 20px;background:var(--surface-2);border-radius:var(--radius);border:1.5px dashed var(--border-2);aspect-ratio:4/3}.compare-panel{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media (max-width: 480px){.compare-panel{grid-template-columns:1fr}}.compare-panel .col-label{text-align:center;font-weight:700;color:var(--muted);font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}.notes-list{margin:10px 0 0;padding-left:18px;color:var(--muted);font-size:.9rem;min-height:4.2em}.notes-list li{margin-bottom:4px}.reserved-slot[data-hidden=true]{visibility:hidden}.summary-hero{text-align:center;padding:12px 0 6px;display:flex;flex-direction:column;align-items:center;gap:10px}.summary-score{font-size:2.8rem;font-weight:900}.summary-ring-wrap{position:relative;width:132px;height:132px;display:flex;align-items:center;justify-content:center}.summary-ring-wrap .summary-score{font-size:1.7rem;position:absolute}.item-chip-row{display:flex;flex-wrap:wrap;gap:8px}.item-chip{display:flex;align-items:center;gap:6px;background:var(--surface-2);border:1px solid var(--border-2);border-radius:999px;padding:7px 12px;font-weight:700;font-size:.85rem}.item-chip .delta-up{color:var(--success)}.item-chip .delta-down{color:var(--danger)}.heatmap{display:grid;grid-template-columns:repeat(auto-fill,minmax(42px,1fr));gap:8px}.heat-cell{aspect-ratio:1;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.85rem;border:2px solid transparent}.bar-strip{display:flex;align-items:flex-end;gap:3px;height:70px}.bar-strip .bar{flex:1;background:var(--accent);border-radius:4px 4px 0 0;min-height:2px}.split-bar{height:14px;border-radius:7px;overflow:hidden;display:flex;background:var(--surface-2)}.split-bar .verified{background:var(--success)}.split-bar .self{background:var(--self)}.primer-step{display:flex;gap:14px;align-items:flex-start;padding:10px 0}.primer-step .icon-wrap{flex:0 0 auto;width:38px;height:38px;border-radius:11px;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;color:var(--accent)}.param-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.param-cell{background:var(--surface-2);border-radius:var(--radius);padding:14px}.param-cell .level{font-size:.78rem;font-weight:800;color:var(--warn)}.param-cell .level.full{color:var(--success)}.duel-arena{--duel-surface: #241a2e;--duel-border: #4a3a5a;--duel-ink: #f3ecff;--duel-muted: #b8a8cc;--duel-accent: #33d2b5;--duel-warn: #f0a83d;--duel-danger: #e8607a;position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;overflow:hidden;background:#05060a;isolation:isolate;color:var(--duel-ink)}.duel-arena.duel-arena-shake{animation:duel-shake-kf .42s ease-out}@keyframes duel-shake-kf{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(5px)}60%{transform:translate(-4px)}80%{transform:translate(3px)}}.duel-arena-3d{background:#120e1a}.duel-3d-mount{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.duel-3d-mount canvas{display:block;width:100%;height:100%}.duel-3d-hidden-video{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);opacity:0;pointer-events:none}.duel-3d-hand-prompt{position:absolute;left:50%;bottom:15%;transform:translate(-50%);z-index:3;background:color-mix(in srgb,var(--duel-surface) 88%,transparent);border:1px solid var(--duel-border);color:var(--duel-ink);padding:8px 16px;border-radius:999px;font-size:.9rem;pointer-events:none;text-align:center;white-space:nowrap}@media (max-width: 480px){.duel-3d-hand-prompt{white-space:normal;width:80%;bottom:18%}}.duel-3d-diag{position:absolute;left:50%;bottom:15%;transform:translate(-50%);z-index:3;background:color-mix(in srgb,var(--duel-surface) 88%,transparent);border:1px solid var(--duel-border);color:var(--duel-muted);padding:4px 10px;border-radius:999px;font-size:.72rem;text-align:center;white-space:nowrap;display:flex;align-items:center;gap:8px}.duel-3d-diag-copy{font-size:.68rem;padding:3px 8px;min-height:unset;border-radius:999px;background:color-mix(in srgb,var(--duel-accent) 22%,var(--duel-surface));border:1px solid var(--duel-accent);color:var(--duel-ink);cursor:pointer}@media (max-width: 480px){.duel-3d-diag{white-space:normal;width:88%;flex-wrap:wrap}}.duel-3d-veil{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;background:#0a0713;display:flex;align-items:center;justify-content:center;text-align:center;padding:24px}.duel-3d-veil-inner{max-width:420px}.duel-3d-veil-title{font-size:1.4rem;font-weight:700;color:var(--duel-ink);letter-spacing:.02em;animation:duel-3d-veil-glow-kf 2.2s ease-in-out infinite}@keyframes duel-3d-veil-glow-kf{0%,to{opacity:.82}50%{opacity:1}}.duel-3d-veil-diag{margin-top:14px;font-size:.72rem;color:var(--duel-muted);text-align:left;display:inline-block}.duel-3d-veil-diag div{margin:2px 0}.duel-video-wrap{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.duel-video-wrap.mirrored{transform:scaleX(-1)}.duel-video-wrap video{width:100%;height:100%;object-fit:cover;display:block}.duel-starting-msg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--duel-muted);text-align:center;padding:20px;background:#05060a}.duel-grade{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 35%,rgba(4,3,12,.75) 100%),linear-gradient(180deg,#1e0a3259,#05050f8c);-webkit-backdrop-filter:saturate(.85) brightness(.72) contrast(1.05);backdrop-filter:saturate(.85) brightness(.72) contrast(1.05)}.duel-charge-glow{position:absolute;width:64px;height:64px;border-radius:50%;z-index:2;pointer-events:none;background:radial-gradient(circle,color-mix(in srgb,var(--duel-accent) 70%,white) 0%,color-mix(in srgb,var(--duel-accent) 40%,transparent) 55%,transparent 75%);filter:blur(1px)}.duel-wizard-anchor{position:absolute;right:3%;top:10%;z-index:3;pointer-events:none;display:flex;flex-direction:column;align-items:center}@media (max-width: 640px){.duel-wizard-anchor{right:2%;top:6%;transform:scale(.72);transform-origin:top right}}.duel-embers{position:absolute;inset:-20px -10px auto auto;width:140px;height:160px;pointer-events:none}.ember{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--duel-warn);opacity:.7;filter:blur(.5px);animation:ember-drift 4.5s ease-in-out infinite}.ember-1{left:20px;top:120px;animation-delay:0s}.ember-2{left:70px;top:140px;animation-delay:1.1s}.ember-3{left:100px;top:110px;animation-delay:2.2s}.ember-4{left:45px;top:90px;animation-delay:3.1s}@keyframes ember-drift{0%{transform:translateY(0) translate(0);opacity:0}15%{opacity:.8}to{transform:translateY(-90px) translate(8px);opacity:0}}.wiz-svg{overflow:visible}.wiz-body{transform-origin:50px 90px;animation:wiz-bob 3.2s ease-in-out infinite}.wiz-robe{fill:var(--duel-surface);stroke:var(--duel-border);stroke-width:1.4}.wiz-robe-trim{fill:none;stroke:var(--duel-danger);stroke-width:1;opacity:.5}.wiz-arm-l,.wiz-arm-r{stroke:var(--duel-surface);stroke-width:7;stroke-linecap:round}.wiz-head{transform-origin:50px 46px;animation:wiz-sway 4.4s ease-in-out infinite}.wiz-hood{fill:var(--duel-surface);stroke:var(--duel-border);stroke-width:1.4}.wiz-hood-shadow{fill:#05060a;opacity:.6}.wiz-eye{fill:var(--duel-danger);animation:wiz-eye-pulse 2.4s ease-in-out infinite}.wiz-eye-glow{fill:var(--duel-danger);opacity:.3;filter:blur(1.5px)}.wiz-staff-pole{stroke:var(--duel-border);stroke-width:3;stroke-linecap:round}.wiz-orb{fill:var(--duel-warn);opacity:.85;animation:wiz-orb-pulse 2.2s ease-in-out infinite}.wiz-orb-core{fill:#fff8e8}.wiz-orb.wiz-orb-charging{animation:wiz-orb-charge .5s ease-in-out infinite}.wiz-crackle line{stroke:var(--duel-warn);stroke-width:1.4;stroke-dasharray:2 3;opacity:.85;animation:wiz-crackle-spin .6s linear infinite;transform-origin:83px 44px}.wiz-body.wiz-stagger{animation:wiz-stagger-kf .42s ease-out}.wiz-body.wiz-defeated{animation:wiz-defeated-kf .9s ease-in forwards}.wiz-staff-group.wiz-staff-fall{animation:wiz-staff-fall-kf .9s ease-in forwards;transform-origin:78px 128px}@keyframes wiz-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes wiz-sway{0%,to{transform:rotate(-1.2deg)}50%{transform:rotate(1.2deg)}}@keyframes wiz-eye-pulse{0%,to{opacity:1}50%{opacity:.55}}@keyframes wiz-orb-pulse{0%,to{opacity:.75;transform:scale(1)}50%{opacity:1;transform:scale(1.12)}}@keyframes wiz-orb-charge{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.35)}}@keyframes wiz-crackle-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes wiz-stagger-kf{0%{transform:translate(0) rotate(0)}30%{transform:translate(4px) rotate(3deg)}60%{transform:translate(-3px) rotate(-2deg)}to{transform:translate(0) rotate(0)}}@keyframes wiz-defeated-kf{0%{transform:translateY(0) scaleY(1);opacity:1}to{transform:translateY(14px) scaleY(.72);opacity:.5}}@keyframes wiz-staff-fall-kf{0%{transform:rotate(0)}to{transform:rotate(78deg)}}.duel-bolt-dynamic{position:absolute;z-index:5;width:22px;height:22px;margin:-11px;pointer-events:none}.duel-bolt-core{display:block;width:100%;height:100%;border-radius:50%;filter:blur(.5px)}.spell-lightning .duel-bolt-core{background:radial-gradient(circle,#eaf6ff,#9fd8ff 60%,transparent 80%);box-shadow:0 0 14px 4px #bfe6ff}.spell-fire .duel-bolt-core{background:radial-gradient(circle,#ffdca0,var(--duel-warn) 55%,transparent 80%);box-shadow:0 0 14px 4px color-mix(in srgb,var(--duel-warn) 70%,transparent)}.spell-ice .duel-bolt-core{background:radial-gradient(circle,#eaf7ff,#bfe6ff 55%,transparent 80%);box-shadow:0 0 12px 3px #bfe6ff}.spell-arcane .duel-bolt-core{background:radial-gradient(circle,#d8fff5,var(--duel-accent) 55%,transparent 80%);box-shadow:0 0 14px 4px color-mix(in srgb,var(--duel-accent) 70%,transparent)}.spell-dark .duel-bolt-core{background:radial-gradient(circle,#ffd7de,var(--duel-danger) 55%,transparent 80%);box-shadow:0 0 14px 4px color-mix(in srgb,var(--duel-danger) 70%,transparent)}.duel-bolt-fly-out{animation:duel-bolt-fly-out-kf .65s ease-in forwards}@keyframes duel-bolt-fly-out-kf{0%{transform:translate(0) scale(.4);opacity:0}10%{opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(1);opacity:.95}}.duel-bolt-fly-in{animation:duel-bolt-fly-in-kf .65s ease-in forwards}@keyframes duel-bolt-fly-in-kf{0%{transform:translate(0) scale(.35);opacity:0}10%{opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(3.2);opacity:0}}.duel-bolt-fade{animation:duel-bolt-fade-kf .7s ease-in-out}@keyframes duel-bolt-fade-kf{0%,to{opacity:0}40%{opacity:1}60%{opacity:1}}.duel-vignette-pulse{position:absolute;top:0;right:0;bottom:0;left:0;z-index:6;pointer-events:none;background:radial-gradient(ellipse at center,transparent 45%,color-mix(in srgb,var(--duel-danger) 55%,transparent) 100%);opacity:0;animation:duel-vignette-pulse-kf .32s ease-out}@keyframes duel-vignette-pulse-kf{0%{opacity:0}30%{opacity:1}to{opacity:0}}.duel-vignette-pulse.gentle{animation:duel-vignette-gentle-kf .8s ease-in-out}@keyframes duel-vignette-gentle-kf{0%,to{opacity:0}50%{opacity:.55}}.duel-shield-bloom{position:absolute;z-index:5;width:40px;height:40px;margin:-20px;border-radius:50%;pointer-events:none;border:2px solid var(--duel-accent);box-shadow:0 0 0 6px color-mix(in srgb,var(--duel-accent) 25%,transparent);animation:duel-shield-bloom-kf .55s ease-out}@keyframes duel-shield-bloom-kf{0%{transform:scale(.3);opacity:0}30%{opacity:1}to{transform:scale(3.2);opacity:0}}.duel-shield-bloom.gentle{animation:duel-shield-bloom-gentle-kf .7s ease-in-out}@keyframes duel-shield-bloom-gentle-kf{0%,to{opacity:0;transform:scale(1.2)}50%{opacity:.7;transform:scale(1.2)}}.duel-impact-burst{position:absolute;z-index:5;width:46px;height:46px;margin:-23px;border-radius:50%;pointer-events:none;animation:duel-impact-burst-kf .42s ease-out forwards}@keyframes duel-impact-burst-kf{0%{transform:scale(.3);opacity:0}30%{opacity:1}to{transform:scale(2.4);opacity:0}}.duel-impact-burst.spell-lightning{background:radial-gradient(circle,#eaf6ff,#9fd8ff 55%,transparent 75%)}.duel-impact-burst.spell-fire{background:radial-gradient(circle,#ffdca0,var(--duel-warn) 55%,transparent 75%)}.duel-impact-burst.spell-ice{background:radial-gradient(circle,#eaf7ff,#bfe6ff 55%,transparent 75%)}.duel-impact-burst.spell-arcane{background:radial-gradient(circle,#d8fff5,var(--duel-accent) 55%,transparent 75%)}.duel-defeat-glow{position:absolute;z-index:3;width:70px;height:70px;margin:-35px;border-radius:50%;pointer-events:none;background:radial-gradient(circle,color-mix(in srgb,var(--duel-accent) 70%,white),transparent 70%);animation-name:duel-defeat-glow-kf;animation-timing-function:ease-out;animation-fill-mode:forwards}@keyframes duel-defeat-glow-kf{0%{opacity:.85;transform:scale(1)}to{opacity:0;transform:scale(.35)}}.duel-defeat-puff{position:absolute;z-index:3;width:14px;height:14px;margin:-7px;border-radius:50%;pointer-events:none;background:color-mix(in srgb,var(--duel-muted) 55%,transparent);filter:blur(1px);animation:duel-defeat-puff-kf 1.6s ease-out forwards}@keyframes duel-defeat-puff-kf{0%{opacity:0;transform:translateY(0) scale(.6)}20%{opacity:.6}to{opacity:0;transform:translateY(-60px) scale(1.4)}}.duel-v5-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;overflow:hidden;background:#120e1a;animation:duel-v5-breathe-kf 6s ease-in-out infinite}@keyframes duel-v5-breathe-kf{0%,to{transform:scale(1)}50%{transform:scale(1.01)}}.duel-v5-still{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .25s ease}.duel-v5-on{opacity:1}.duel-v5-idle-a-on{opacity:1;animation:duel-v5-idle-a-kf 8s ease-in-out infinite}.duel-v5-idle-b-on{opacity:1;animation:duel-v5-idle-b-kf 8s ease-in-out infinite}@keyframes duel-v5-idle-a-kf{0%,45%{opacity:1}50%,95%{opacity:0}to{opacity:1}}@keyframes duel-v5-idle-b-kf{0%,45%{opacity:0}50%,95%{opacity:1}to{opacity:0}}.duel-hand-2d{position:absolute;z-index:4;pointer-events:none;width:clamp(135px,23vw,230px);height:clamp(135px,23vw,230px);transform:translate(-50%,-28%);transition:opacity .12s linear}.health-pip.shatter{animation:duel-pip-shatter-kf .5s ease-out}@keyframes duel-pip-shatter-kf{0%{transform:scale(1);opacity:1}50%{transform:scale(1.4);opacity:.6}to{transform:scale(.2);opacity:0}}.duel-hud-top-left,.duel-hud-top-right{position:fixed;top:14px;z-index:41;display:flex;align-items:center;gap:10px}.duel-hud-top-left{left:14px}.duel-hud-top-right{right:14px}.duel-hud-top-center{position:fixed;top:14px;left:50%;transform:translate(-50%);z-index:41;width:min(92vw,420px);display:flex;justify-content:center}.duel-spell-hud,.duel-shield-prompt{background:color-mix(in srgb,var(--duel-surface) 88%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--duel-border);border-radius:var(--radius);padding:10px 14px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;color:var(--duel-ink)}.duel-shield-prompt{border-color:var(--duel-danger)}.duel-shield-label{font-weight:800;color:var(--duel-danger);letter-spacing:.03em}.duel-glyph-btn{background:none;border:none;padding:0;cursor:pointer;color:inherit;box-shadow:none;display:flex;align-items:center;gap:10px}.duel-glyph-btn:hover,.duel-glyph-btn:focus-visible{filter:none;box-shadow:none}.duel-glyph-btn:hover .duel-mini-art,.duel-glyph-btn:focus-visible .duel-mini-art{outline:2px solid var(--duel-accent);outline-offset:2px}.duel-hud-glyph{font-size:1.6rem;font-weight:800}.duel-mini-art{display:inline-block;width:56px;height:56px;border-radius:10px;overflow:hidden;background:var(--duel-surface)}.duel-mini-art img{filter:invert(1) brightness(1.6)}.duel-hud-bottom{position:fixed;bottom:12px;left:50%;transform:translate(-50%);z-index:41;width:min(94vw,520px);display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--duel-ink)}.duel-hud-enemy{width:100%;max-width:260px;display:flex;flex-direction:column;gap:6px}.duel-hud-enemy .hp-bar,.duel-hud-enemy .cast-bar,.duel-spell-hud .cast-bar,.duel-shield-prompt .cast-bar{background:var(--duel-border)}.duel-hud-enemy .hp-bar-fill{background:var(--duel-danger)}.duel-hud-enemy .cast-bar-fill,.duel-spell-hud .cast-bar-fill,.duel-shield-prompt .cast-bar-fill{background:var(--duel-warn)}.duel-hud-bottom .honesty-line.small,.duel-hud-enemy .muted{color:var(--duel-muted);border-color:var(--duel-border)}.honesty-line.small{font-size:.72rem;text-align:center}.duel-enlarge-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#030308d1;display:flex;align-items:center;justify-content:center;border:none;cursor:zoom-out;padding:24px;box-shadow:none}.duel-enlarge-art{display:block;width:min(80vw,340px);height:min(80vw,340px)}.duel-enlarge-art img{filter:invert(1) brightness(1.6)}.duel-arena .spell-tile{background:var(--duel-surface);border-color:var(--duel-border);color:var(--duel-muted)}.duel-arena .spell-tile.current{border-color:var(--duel-accent);color:var(--duel-ink)}.duel-arena .spell-tile.lit{background:color-mix(in srgb,var(--duel-accent) 22%,var(--duel-surface));border-color:var(--duel-accent);color:var(--duel-accent)}.duel-arena .health-pip{background:var(--duel-surface);border-color:var(--duel-border)}.duel-arena .health-pip.on{background:var(--duel-accent);border-color:var(--duel-accent)}.duel-arena .duel-caption,.duel-arena button.ghost{color:var(--duel-muted)}.duel-arena button.ghost:hover{color:var(--duel-ink);background:color-mix(in srgb,var(--duel-surface) 80%,transparent)}.duel-arena .chip{background:color-mix(in srgb,var(--duel-surface) 88%,transparent);border-color:var(--duel-border);color:var(--duel-ink);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@keyframes duel-transmute-flash-kf{0%{box-shadow:0 0 color-mix(in srgb,var(--duel-accent) 60%,transparent);background:color-mix(in srgb,var(--duel-accent) 30%,var(--duel-surface))}to{box-shadow:0 0 0 6px color-mix(in srgb,var(--duel-accent) 0%,transparent);background:var(--duel-surface)}}.spell-tile.duel-transmute-flash{animation:duel-transmute-flash-kf .45s ease-out}.duel-transmute-row{min-height:32px;gap:10px}.hp-bar,.cast-bar{height:10px;border-radius:6px;overflow:hidden;background:var(--surface-2)}.hp-bar-fill{height:100%;background:var(--danger);transition:width .2s ease}.cast-bar-fill{height:100%;background:var(--warn)}.spell-tiles{display:flex;flex-wrap:wrap;gap:8px;min-height:64px;align-items:center;justify-content:center}.spell-tile{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:10px;font-size:1.3rem;font-weight:800;background:var(--surface-2);border:2px solid var(--border-2);color:var(--muted)}.spell-tile.current{border-color:var(--accent);color:var(--ink);width:52px;height:52px;font-size:1.6rem}.spell-tile.lit{background:color-mix(in srgb,var(--accent) 22%,var(--surface-2));border-color:var(--accent);color:var(--accent)}.spell-tile.skipped{background:transparent;border-style:dashed;border-color:var(--border-2);color:var(--muted);text-decoration:line-through}.health-pips{display:flex;align-items:center;gap:6px;justify-content:center;flex-wrap:wrap}.health-pip{width:16px;height:16px;border-radius:4px;background:var(--surface-2);border:2px solid var(--border-2)}.health-pip.on{background:var(--accent);border-color:var(--accent)}@media (max-width: 640px){.duel-hud-top-left,.duel-hud-top-right{gap:6px}.duel-hud-top-left .chip,.duel-hud-top-right .chip{font-size:.72rem;padding:4px 8px}.duel-mini-art{width:44px;height:44px}.duel-hud-glyph{font-size:1.3rem}}.duel-sound-toggle{min-height:36px}.dev-table{width:100%;border-collapse:collapse;font-size:.85rem}.dev-table td,.dev-table th{padding:6px 10px;border-bottom:1px solid var(--border);text-align:left}.dev-pass{color:var(--success);font-weight:800}.dev-fail{color:var(--danger);font-weight:800}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important;animation-iteration-count:1!important}}[data-reduced-motion=true] *{animation-duration:.001ms!important;transition-duration:.001ms!important;animation-iteration-count:1!important}[data-reduced-motion=true] .duel-bolt-fade{animation-duration:.7s!important;animation-iteration-count:1!important}[data-reduced-motion=true] .duel-vignette-pulse.gentle{animation-duration:.8s!important;animation-iteration-count:1!important}[data-reduced-motion=true] .duel-shield-bloom.gentle{animation-duration:.7s!important;animation-iteration-count:1!important}[data-reduced-motion=true] .success-bloom{animation-duration:.9s!important;animation-iteration-count:1!important}[data-reduced-motion=true] .success-bloom svg{animation-duration:1ms!important}
