:root{--bg-base: #1a1a1a;--bg-surface: #242424;--bg-elevated: #2e2e2e;--accent: #b22222;--accent-dark: #8b0000;--accent-light: #cc3333;--text-primary: #f0f0f0;--text-secondary: #aaaaaa;--text-muted: #666666;--border: #333333;--border-subtle: #2a2a2a;--link: #f0f0f0;--link-accent: #cc4444;--color-success: #22c55e;--color-warning: #f59e0b;--color-error: #dc2626;--color-error-dark: #b91c1c;--color-info: #63b3ed;--color-face: #ff3333;--sp-xs: 4px;--sp-sm: 8px;--sp-md: 16px;--sp-lg: 24px;--sp-xl: 32px;--sp-2xl: 48px;--navbar-height: 48px;--radius-sm: 3px;--radius: 4px;--radius-lg: 6px;--radius-pill: 999px;--fs-xs: 10px;--fs-sm: 11px;--fs-base: 12px;--fs-md: 13px;--fs-lg: 14px;--fs-xl: 15px;--fs-2xl: 16px;--fs-3xl: 18px;--font-serif: Georgia, "Times New Roman", serif;--font-sans: "Helvetica Neue", Arial, sans-serif;--transition: .15s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{height:100%;width:100%}body{min-height:100%;width:100%;overflow-y:auto}body{background-color:var(--bg-base);color:var(--text-primary);font-family:var(--font-sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{min-height:100%;width:100%;display:flex;flex-direction:column}.body-text{font-family:var(--font-sans);font-weight:400;line-height:1.5;font-size:var(--fs-lg);color:var(--text-secondary)}.body-text--xs{font-size:var(--fs-xs)}.body-text--sm{font-size:var(--fs-sm)}.body-text--base{font-size:var(--fs-base)}.body-text--md{font-size:var(--fs-md)}.body-text--lg{font-size:var(--fs-lg)}.body-text--xl{font-size:var(--fs-xl)}.body-text--primary{color:var(--text-primary)}.body-text--muted{color:var(--text-muted)}.body-text--accent{color:var(--accent-light)}.body-text--medium{font-weight:500}.body-text--semi{font-weight:600}.body-text--tight{line-height:1.35}.body-text--relaxed{line-height:1.6}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:var(--radius);padding:10px 18px;font-weight:600;font-size:14px;font-family:var(--font-sans);cursor:pointer;transition:background var(--transition)}.btn-primary:hover{background:var(--accent-dark)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--text-primary);border:1px solid #555;border-radius:var(--radius);padding:10px 18px;font-size:14px;font-family:var(--font-sans);cursor:pointer;transition:border-color var(--transition),color var(--transition)}.btn-ghost:hover{border-color:#888}.btn-ghost:disabled{opacity:.4;cursor:not-allowed}.btn-icon{background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);border-radius:var(--radius);padding:var(--sp-sm);transition:color var(--transition),background var(--transition)}.btn-icon:hover{color:var(--text-primary);background:var(--bg-elevated)}.btn-icon.active{color:var(--text-primary)}.btn-icon:disabled{opacity:.3;cursor:not-allowed}.badge{background:var(--accent);color:#fff;border-radius:var(--radius-pill);min-width:20px;height:20px;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}input[type=text],input[type=range]{font-family:var(--font-sans);font-size:14px}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;padding:var(--sp-md);touch-action:none;overscroll-behavior:contain}.dialog{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-lg);max-width:400px;width:100%}.dialog h2{font-family:var(--font-sans);font-size:18px;font-weight:600;margin-bottom:var(--sp-md)}.dialog p{margin-bottom:var(--sp-md)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}.progress-bar{height:3px;background:var(--border);border-radius:2px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--accent);transition:width .3s ease}.sep{height:1px;background:var(--border);margin:var(--sp-md) 0}.tally-popup{top:var(--navbar-height, 48px)!important;right:var(--sp-md)!important;left:auto!important;bottom:auto!important;max-height:calc(100vh - var(--navbar-height, 48px) - var(--sp-md))!important}
