:root{--bg: #0f1419;--surface: #1a2332;--border: #2d3a4f;--text: #e8edf4;--muted: #8b9cb3;--accent: #3d8bfd;--accent-hover: #5a9dff;--danger: #ff4d4d;--danger-bg: #3a1515;--radius: 10px;font-family:Segoe UI,system-ui,-apple-system,sans-serif;line-height:1.5;color:var(--text);background:var(--bg)}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh}#root{min-height:100vh}.repo-link{position:fixed;top:1rem;right:1rem;z-index:100;font-size:.85rem;color:var(--muted);text-decoration:none;padding:.35rem .65rem;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.repo-link:hover{color:var(--accent);border-color:var(--accent)}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:grid;place-items:center;padding:1.5rem;background:#000000a6}.dialog{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.35rem}.dialog h2{font-size:1.15rem;margin-bottom:.75rem}.dialog-meta{color:var(--muted);font-size:.9rem;margin-top:.5rem}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem}h1,h2,h3{margin:0 0 .35rem;font-weight:600}p{margin:0 0 .5rem}.subtitle{color:var(--muted);font-size:.95rem}.muted{color:var(--muted);font-weight:400}.loading{color:var(--muted);padding:2rem}.loading.centered{text-align:center;margin-top:30vh}.error{color:var(--danger);font-size:.9rem}.empty{color:var(--muted);padding:2rem 0}.login-screen{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:2rem}.login-card h1{font-size:1.75rem}.login-warning{margin-top:1rem;padding:.75rem .85rem;font-size:.85rem;line-height:1.45;color:#ffb3b3;background:var(--danger-bg);border:1px solid var(--danger);border-radius:6px}.login-warning strong{color:var(--danger);font-weight:700}.login-warning code{font-size:.8em;color:#fcc}.login-card form{display:flex;flex-direction:column;gap:1rem;margin-top:1.5rem}label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted)}input,select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:.55rem .75rem}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:1px}button{font:inherit;cursor:pointer;border:none;border-radius:6px;padding:.6rem 1rem;background:var(--accent);color:#fff;font-weight:500}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:transparent;border:1px solid var(--border);color:var(--text)}.btn-secondary:hover:not(:disabled){background:var(--border)}.login-card button[type=submit]{margin-top:.25rem}.dashboard{max-width:900px;margin:0 auto;padding:1.5rem}.dashboard-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.alert-banner{background:var(--danger-bg);border:1px solid var(--danger);color:#ffb3b3;padding:.75rem 1rem;border-radius:var(--radius);margin-bottom:1.25rem;font-weight:700}.dialog-field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.75rem;font-size:.85rem;color:var(--muted)}.dialog-field select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:.55rem .75rem}.filters{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-end;margin-bottom:1.5rem}.filter-search{flex:1;min-width:200px}.shift-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.shift-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.15rem}.shift-row__main{flex:1;min-width:0}.shift-row h3{font-size:1.05rem}.shift-meta{font-size:.88rem;color:var(--muted)}.shift-desc{font-size:.9rem;margin-top:.35rem;overflow-wrap:anywhere;word-break:break-word}.troll-counts{margin-top:.5rem;font-size:.95rem}.troll-counts strong{font-weight:800;font-size:1.05em}.troll-kinds{margin-top:.5rem;font-size:.88rem;color:var(--muted)}.troll-type-chips{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.35rem}.troll-type-chip{font:inherit;font-size:.85rem;font-weight:600;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:.3rem .55rem;cursor:pointer}.troll-type-chip:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.troll-type-chip:disabled{cursor:default;opacity:.85}.troll-type-chip--signed{border-color:#3dbd6e;color:#b8f5c8;background:#143322;font-weight:700}.shift-row--urgent .troll-type-chip--signed{border-color:#3dbd6e;color:#b8f5c8;background:#143322}.troll-type-chip--partial{border-color:#c9a227;color:#ffe9a3;background:#2a2410}.troll-type-chip--partial:hover:not(:disabled){border-color:#e0b83d;color:#fff3c4}.shift-signups{margin-top:.5rem;font-size:.88rem;color:var(--muted)}.shift-signups__list{margin:.35rem 0 0;padding-left:1.1rem}.shift-signups__list li{margin-bottom:.2rem}.shift-signups__list strong{color:var(--text);font-weight:600}.shift-row--urgent .shift-signups,.shift-row--urgent .shift-signups__list strong{color:var(--danger)}.troll-kinds strong{color:var(--text);font-weight:700}.troll-kinds__label{font-weight:500}.shift-row--urgent .troll-kinds,.shift-row--urgent .troll-kinds strong{color:var(--danger);font-weight:700}.shift-row__stats{display:flex;flex-direction:column;flex-shrink:0;align-items:flex-end;align-self:flex-start;gap:.35rem;text-align:right}@media(max-width:520px){.shift-row{flex-direction:column}.shift-row__stats{align-items:flex-start;text-align:left}}.staffing{font-size:.9rem}.urgent-badge{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--danger);font-weight:700}.shift-row--urgent{background:var(--danger-bg);border-color:var(--danger);font-weight:700}.shift-row--urgent h3,.shift-row--urgent .shift-meta,.shift-row--urgent .shift-desc,.shift-row--urgent .troll-counts,.shift-row--urgent .staffing{color:var(--danger);font-weight:700}.shift-row--urgent .muted{color:#f88}
