.app-shell{background:radial-gradient(1200px 600px at 8% -12%, var(--glow-a), transparent 55%), radial-gradient(900px 500px at 92% 0%, var(--glow-b), transparent 50%), var(--bg);height:100vh;min-height:100vh;color:var(--text);grid-template-rows:auto 1fr;display:grid;overflow:hidden}.topbar{border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.2);backdrop-filter:blur(14px)saturate(1.2);z-index:20;justify-content:space-between;align-items:center;gap:16px;padding:10px 16px;display:flex}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand-glyph{background:linear-gradient(145deg, var(--accent) 0%, var(--accent-2) 55%, #22c55e 120%);width:34px;height:34px;box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent), 0 8px 20px color-mix(in srgb, var(--accent) 28%, transparent);border-radius:10px;flex-shrink:0;position:relative}.brand-glyph:before,.brand-glyph:after{content:"";background:#ffffffeb;border-radius:1px;position:absolute;left:8px;right:8px}.brand-glyph:before{opacity:.95;height:2px;top:11px}.brand-glyph:after{clip-path:polygon(0 100%,18% 35%,38% 70%,58% 20%,78% 55%,100% 0,100% 100%);opacity:.9;height:7px;top:17px}.brand-copy{flex-direction:column;gap:1px;min-width:0;display:flex}.brand-name{font-family:var(--font-display);letter-spacing:.08em;font-size:15px;font-weight:700;line-height:1.15}.brand-tag{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.topbar-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.field{flex-direction:column;gap:2px;display:flex}.field-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding-left:2px;font-size:10px;font-weight:600}.action-divider{background:var(--border);width:1px;height:28px;margin:0 2px}.btn-kbd{font-size:11px;font-weight:600;font-family:var(--font-mono);opacity:.78;letter-spacing:.02em;margin-left:8px}.github-link{width:34px;height:34px;color:var(--text);border:1px solid #0000;border-radius:9px;justify-content:center;align-items:center;transition:background .15s,border-color .15s;display:inline-flex}.github-link:hover{background:var(--hover);border-color:var(--border);color:var(--text)}.github-link svg{fill:currentColor}.main-grid{grid-template-columns:260px minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.gallery{border-right:1px solid var(--border);background:color-mix(in srgb, var(--surface) 72%, transparent);flex-direction:column;min-height:0;display:flex}.gallery-head{border-bottom:1px solid var(--border);flex-shrink:0;padding:12px 12px 10px}.gallery-title-row{justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:8px;display:flex}.gallery-title{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.gallery-count{font-family:var(--font-mono);color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.gallery-search{width:100%}.gallery-scroll{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex:1;min-height:0;padding:10px 10px 20px;overflow:auto}.gallery-empty{text-align:center;color:var(--muted);padding:24px 12px;font-size:12px;line-height:1.5}.cat-block+.cat-block{margin-top:14px}.cat-title{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);align-items:center;gap:8px;padding:4px 8px 8px;font-size:11px;font-weight:700;display:flex}.cat-count{font-family:var(--font-mono);letter-spacing:0;text-transform:none;color:var(--muted);background:var(--elevated);border:1px solid var(--border);border-radius:999px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px}.chart-list{flex-direction:column;gap:3px;display:flex}.chart-item{appearance:none;color:inherit;text-align:left;cursor:pointer;width:100%;font:inherit;background:0 0;border:1px solid #0000;border-radius:10px;grid-template-columns:36px 1fr;align-items:center;gap:10px;padding:7px 9px;transition:background .14s,border-color .14s,box-shadow .14s;display:grid}.chart-item:hover{background:var(--hover);border-color:var(--border)}.chart-item:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 65%, transparent);outline-offset:1px}.chart-item.active{background:color-mix(in srgb, var(--accent) 14%, var(--surface));border-color:color-mix(in srgb, var(--accent) 42%, var(--border));box-shadow:inset 3px 0 0 var(--accent)}.chart-badge{width:36px;height:32px;color:var(--accent-ink);background:linear-gradient(160deg, color-mix(in srgb, var(--accent) 20%, transparent), transparent 72%), var(--elevated);border:1px solid color-mix(in srgb, var(--accent) 22%, var(--border));border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.chart-item.active .chart-badge{color:var(--text);border-color:color-mix(in srgb, var(--accent) 48%, var(--border));background:linear-gradient(160deg, color-mix(in srgb, var(--accent) 42%, transparent), transparent 75%), var(--elevated)}.chart-meta{flex-direction:column;gap:1px;min-width:0;display:flex}.chart-name{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:1.25;overflow:hidden}.chart-hint{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.stage{grid-template-rows:minmax(0,1fr) auto;min-width:0;min-height:0;display:grid;overflow:hidden}.preview-pane{flex-direction:column;min-height:0;display:flex;position:relative}.preview-toolbar{border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--surface) 55%, transparent);flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 16px;display:flex}.preview-heading{flex-direction:column;gap:2px;min-width:0;display:flex}.preview-label{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.preview-chart-name{font-family:var(--font-display);align-items:center;gap:8px;min-width:0;font-size:16px;font-weight:650;line-height:1.25;display:flex}.preview-glyph{color:var(--accent-ink);opacity:.9;flex-shrink:0;display:inline-flex}.preview-sub{color:var(--muted);font-size:12px}.preview-stats{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;max-width:min(100%,520px);display:flex}.stat-chip{font-family:var(--font-mono);color:var(--muted);background:var(--elevated);border:1px solid var(--border);letter-spacing:.02em;font-variant-numeric:tabular-nums;border-radius:999px;padding:4px 10px;font-size:11px;font-weight:600}.stat-chip.subtle{opacity:.85}.stat-chip.live{color:#059669;border-color:color-mix(in srgb, #10b981 35%, var(--border));background:color-mix(in srgb, #10b981 12%, var(--elevated))}.stat-chip.busy{color:var(--accent-ink);border-color:color-mix(in srgb, var(--accent) 40%, var(--border));background:color-mix(in srgb, var(--accent) 14%, var(--elevated))}.stat-chip.danger{color:#b91c1c;border-color:color-mix(in srgb, #ef4444 35%, var(--border));background:color-mix(in srgb, #ef4444 12%, var(--elevated))}@media (prefers-color-scheme:dark){.stat-chip.live{color:#6ee7b7}.stat-chip.danger{color:#fca5a5}}.preview-actions{border-left:1px solid var(--border);align-items:center;gap:2px;margin-left:2px;padding-left:6px;display:inline-flex}.icon-btn.ant-btn{font-weight:600;color:var(--muted)!important}.icon-btn.ant-btn:hover:not(:disabled){color:var(--text)!important;background:var(--hover)!important}.preview-viewport{background-color:var(--preview-base);background-image:linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);background-position:50%;background-size:24px 24px;flex:1;justify-content:center;align-items:center;min-height:0;padding:28px 24px;display:flex;position:relative;overflow:auto}.preview-viewport:before{content:"";pointer-events:none;background:radial-gradient(ellipse 70% 55% at 50% 45%, transparent 30%, color-mix(in srgb, var(--bg) 55%, transparent) 100%);position:absolute;inset:0}.preview-canvas{z-index:1;background:var(--canvas-bg);box-shadow:0 0 0 1px var(--border), 0 18px 50px #0000002e, 0 2px 6px #00000014;border-radius:12px;line-height:0;animation:.28s canvas-in;position:relative;overflow:hidden}.preview-viewport.is-fit .preview-canvas{max-width:100%}.preview-viewport.is-fit .preview-canvas svg,.preview-viewport.is-fit .preview-canvas img{max-width:100%;height:auto;display:block}.preview-viewport.is-actual .preview-canvas{max-width:none}.preview-viewport.is-actual .preview-canvas svg,.preview-viewport.is-actual .preview-canvas img{max-width:none;height:auto;display:block}@keyframes canvas-in{0%{opacity:0;transform:translateY(6px)scale(.985)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.preview-canvas{animation:none}.chart-item{transition:none}}.preview-empty{z-index:1;border:1px dashed var(--border-strong);background:color-mix(in srgb, var(--surface) 80%, transparent);text-align:center;border-radius:16px;flex-direction:column;align-items:center;gap:10px;width:min(420px,100%);padding:36px 28px;display:flex;position:relative}.empty-orb{background:linear-gradient(145deg, color-mix(in srgb, var(--accent) 30%, transparent), transparent), var(--elevated);border:1px solid var(--border);width:56px;height:56px;color:var(--accent-ink);border-radius:16px;place-items:center;margin-bottom:4px;display:grid}.empty-title{font-family:var(--font-display);font-size:16px;font-weight:650}.empty-desc{color:var(--muted);max-width:320px;font-size:13px;line-height:1.55}.kbd,kbd.kbd{font-family:var(--font-mono);border:1px solid var(--border-strong);background:var(--elevated);color:var(--text);box-shadow:0 1px 0 var(--border);border-radius:5px;padding:1px 6px;font-size:11px;font-weight:600}.preview-loading{z-index:5;background:color-mix(in srgb, var(--bg) 35%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.editor-dock{border-top:1px solid var(--border);background:var(--surface);flex-direction:column;min-height:0;display:flex;position:relative;box-shadow:0 -8px 24px #0000000a}.resize-handle{cursor:ns-resize;z-index:6;justify-content:center;align-items:center;height:10px;display:flex;position:absolute;top:-5px;left:0;right:0}.resize-handle:after{content:"";background:var(--border-strong);border-radius:99px;width:44px;height:3px;transition:background .15s,width .15s}.resize-handle:hover:after,.resize-handle:active:after{background:var(--accent);width:64px}.editor-toolbar{border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--elevated) 70%, var(--surface));flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;min-height:44px;padding:8px 14px;display:flex}.editor-title-row{align-items:center;gap:10px;min-width:0;display:flex}.editor-title{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.editor-tools{align-items:center;gap:8px;display:flex}.editor-error{color:#b91c1c;background:color-mix(in srgb, #ef4444 10%, var(--surface));border-bottom:1px solid color-mix(in srgb, #ef4444 25%, var(--border));font-size:12px;line-height:1.4;font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;align-items:flex-start;gap:8px;max-height:28px;padding:6px 14px;display:flex;overflow:hidden}@media (prefers-color-scheme:dark){.editor-error{color:#fca5a5}}.editor-error-label{letter-spacing:.06em;flex-shrink:0;font-weight:700}.editor-body{flex:1;min-height:0;position:relative}.topbar .ant-select-selector,.topbar .ant-btn,.gallery .ant-input-affix-wrapper,.gallery .ant-input{border-radius:9px!important}.topbar .ant-btn-primary{box-shadow:0 6px 16px color-mix(in srgb, var(--accent) 28%, transparent)}.editor-toolbar .ant-switch-checked{background:var(--accent)!important}@media (width<=960px){.main-grid{grid-template-rows:auto 1fr;grid-template-columns:1fr}.gallery{border-right:none;border-bottom:1px solid var(--border);max-height:196px}.gallery-scroll{gap:12px;padding-bottom:12px;display:flex;overflow:auto hidden}.cat-block{min-width:210px;margin-top:0!important}.chart-list{grid-template-rows:repeat(2,auto);grid-auto-flow:column;gap:4px;display:grid}.stage{grid-template-rows:minmax(200px,1fr) auto}.topbar{flex-direction:column;align-items:stretch}.topbar-actions{justify-content:flex-start}.btn-kbd{display:none}.preview-toolbar{flex-direction:column;align-items:stretch}.preview-stats{justify-content:flex-start;max-width:none}}@media (width<=640px){.field-label{display:none}.preview-viewport{padding:16px}.action-divider{display:none}.main-grid{grid-template-columns:1fr}}:root{--font-display:"Sora", "Segoe UI", system-ui, sans-serif;--font-body:"IBM Plex Sans", "Segoe UI", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--bg:#eef2f7;--surface:#f7f9fc;--elevated:#fff;--text:#0f172a;--muted:#64748b;--border:#d8e0ea;--border-strong:#b7c3d4;--hover:#0f172a0d;--accent:#0284c7;--accent-2:#0ea5e9;--accent-ink:#0369a1;--glow-a:#0ea5e929;--glow-b:#10b9811a;--preview-base:#e4ebf4;--grid-line:#64748b1f;--canvas-bg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;font-weight:400;line-height:1.5}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#070b14;--surface:#0d1422;--elevated:#121a2b;--text:#e8eef9;--muted:#8b9bb8;--border:#1c2740;--border-strong:#2a3a58;--hover:#e8eef90f;--accent:#38bdf8;--accent-2:#22d3ee;--accent-ink:#7dd3fc;--glow-a:#38bdf824;--glow-b:#34d39914;--preview-base:#0a101c;--grid-line:#94a3b812;--canvas-bg:#0f172a}}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);min-width:320px;min-height:100vh;color:var(--text);margin:0}#root{overflow:hidden}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-2)}::selection{background:color-mix(in srgb, var(--accent) 35%, transparent)}
