:root{--bg: #0d1117;--surface: #161b22;--surface2: #1c2128;--border: #30363d;--border2: #21262d;--text: #e6edf3;--text2: #8b949e;--text3: #484f58;--teal: #2ea5a5;--teal-dim: #1a6363;--teal-bg: rgba(46, 165, 165, .08);--teal-border: rgba(46, 165, 165, .25);--green: #3fb950;--green-dim: #1a4d25;--green-bg: rgba(63, 185, 80, .08);--green-border: rgba(63, 185, 80, .25);--red: #f85149;--red-dim: #6e2822;--red-bg: rgba(248, 81, 73, .08);--red-border: rgba(248, 81, 73, .25);--amber: #d29922;--amber-bg: rgba(210, 153, 34, .08);--amber-border: rgba(210, 153, 34, .25);--blue: #58a6ff;--blue-bg: rgba(88, 166, 255, .08);--blue-border: rgba(88, 166, 255, .25);--purple: #bc8cff;--purple-bg: rgba(188, 140, 255, .08);--font-body: "Sora", sans-serif;--font-mono: "DM Mono", monospace;--safe-top: env(safe-area-inset-top, 0px);--safe-bot: env(safe-area-inset-bottom, 0px);--nav-h: 64px;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-xl: 20px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html{height:100%;-webkit-text-size-adjust:none;text-size-adjust:none}body{font-family:var(--font-body);background:var(--bg);color:var(--text);height:100%;overflow:hidden;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}#root{height:100%;display:flex;flex-direction:column}::-webkit-scrollbar{width:0;height:0}.text-xs{font-size:11px}.text-sm{font-size:13px}.text-md{font-size:15px}.text-lg{font-size:17px}.text-xl{font-size:20px}.text-2xl{font-size:24px}.text-3xl{font-size:30px}.text-4xl{font-size:38px}.mono{font-family:var(--font-mono)}.muted{color:var(--text2)}.bold{font-weight:700}.semibold{font-weight:600}.upper{text-transform:uppercase;letter-spacing:.08em}.flex{display:flex}.col{flex-direction:column}.row{flex-direction:row}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:4px}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.badge-teal{background:var(--teal-bg);color:var(--teal);border:1px solid var(--teal-border)}.badge-green{background:var(--green-bg);color:var(--green);border:1px solid var(--green-border)}.badge-red{background:var(--red-bg);color:var(--red);border:1px solid var(--red-border)}.badge-amber{background:var(--amber-bg);color:var(--amber);border:1px solid var(--amber-border)}.badge-blue{background:var(--blue-bg);color:var(--blue);border:1px solid var(--blue-border)}.card{background:var(--surface);border:1px solid var(--border2);border-radius:var(--r-lg);padding:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:12px 20px;border-radius:var(--r-md);border:none;font-family:var(--font-body);font-size:15px;font-weight:600;cursor:pointer;transition:opacity .12s;-webkit-appearance:none}.btn:active{opacity:.75}.btn:disabled{opacity:.4;pointer-events:none}.btn-primary{background:var(--teal);color:#fff}.btn-ghost{background:var(--surface2);color:var(--text);border:1px solid var(--border)}.btn-danger{background:var(--red-bg);color:var(--red);border:1px solid var(--red-border)}.btn-success{background:var(--green-bg);color:var(--green);border:1px solid var(--green-border)}.btn-full{width:100%}.btn-lg{padding:16px 24px;font-size:17px;border-radius:var(--r-lg)}.input{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r-md);color:var(--text);font-family:var(--font-body);font-size:16px;padding:13px 15px;width:100%;outline:none;-webkit-appearance:none;transition:border-color .12s}.input:focus{border-color:var(--teal)}.input::placeholder{color:var(--text3)}select.input{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9'%3E%3Cpath d='M1 1l6 6 6-6' stroke='%238b949e' stroke-width='1.8' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:38px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.divider{height:1px;background:var(--border2)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--teal);border-radius:50%;animation:spin .7s linear infinite}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.slide-up{animation:slideUp .25s ease forwards}.progress-bar{height:6px;background:var(--surface2);border-radius:3px;overflow:hidden}.progress-fill{height:100%;border-radius:3px;transition:width .6s ease}
