:root{--bg:#f7f7f5;--surface:#ffffff;--text:#1f2328;--muted:#6b7280;--line:#e5e7eb;--accent:#2563eb;--today:#fef3c7;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--bg:#111315;--surface:#1a1d20;--text:#e6e8ea;--muted:#9aa1aa;--line:#2b3035;--accent:#60a5fa;--today:#3a3220}}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.4}a{color:inherit;text-decoration:none}h1{font-size:20px;margin:0}h2{font-size:14px;margin:0 0 6px}.muted{color:var(--muted)}.error{color:#dc2626;font-size:14px}.nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--surface)}.nav a,.nav button{padding:6px 12px;border-radius:999px;font:inherit;font-size:14px;border:0;background:none;color:var(--muted);cursor:pointer}.nav a.active{background:var(--accent);color:#fff}.nav .spacer{flex:1 1}.page{max-width:1680px;margin:0 auto;padding:16px}.head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.head .grow{flex:1 1}.step a{display:inline-block;padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);font-size:14px}.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:13px;color:var(--muted)}.chip.on{color:var(--text);border-color:currentColor;font-weight:600}.chip .dot{width:9px;height:9px;border-radius:50%}.scroll{overflow-x:auto}.week{display:grid;grid-template-columns:90px repeat(7,minmax(120px,1fr));min-width:940px;border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden}.week>div{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px;min-height:36px}.week>div:nth-child(8n){border-right:0}.week .dayhead{text-align:center;font-size:13px;color:var(--muted);padding:8px 4px}.week .dayhead b{display:block;font-size:18px;color:var(--text);font-weight:600}.week .rowhead{font-size:13px;font-weight:600;display:flex;align-items:flex-start;gap:6px}.week .rowhead .dot{width:10px;height:10px;border-radius:50%;margin-top:4px;flex:none}.week .today{background:var(--today)}.ev{border-left:3px solid var(--c);padding:2px 6px;margin-bottom:4px;border-radius:4px;font-size:13px;background:color-mix(in srgb,var(--c) 12%,transparent)}.ev .t{color:var(--muted);font-size:11px;display:block}.ev.routine{opacity:.78}.ev.pill{border-left:0;border-radius:999px;padding:1px 8px;font-size:12px;background:var(--c);color:#fff}.ev.pill.light{color:#0b3b54}.month{margin:22px 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.ms{display:grid;grid-template-columns:64px 1fr auto;grid-gap:12px;gap:12px;align-items:center;padding:10px 12px;margin-bottom:6px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--c);border-radius:10px}.ms .d{text-align:center;line-height:1.1}.ms .d b{font-size:22px;display:block}.ms .d span{font-size:12px;color:var(--muted);text-transform:uppercase}.ms .count{white-space:nowrap}.ms .count,.ms .sub{font-size:13px;color:var(--muted)}.clock-wrap{display:grid;grid-template-columns:minmax(300px,640px) 1fr;grid-gap:24px;gap:24px;align-items:start}@media (max-width:900px){.clock-wrap{grid-template-columns:1fr}}.clock{width:100%;height:auto}.clock text{fill:var(--muted);font-family:inherit}.clock .track{stroke:var(--line);fill:none}.clock .ring-label{font-size:9px}.legend{display:grid;grid-gap:14px;gap:14px}.legend h2{display:flex;align-items:center;gap:8px}.legend h2 .dot{width:10px;height:10px;border-radius:50%}.legend ul{list-style:none;margin:0;padding:0;font-size:14px}.legend li{display:flex;gap:10px;padding:1px 0}.legend li .when{color:var(--muted);min-width:108px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:16px}.card h2{font-size:16px;margin-bottom:10px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:6px 0;border-bottom:1px solid var(--line)}.row:last-child{border-bottom:0}.row .grow{flex:1 1;min-width:160px}input,select{font:inherit;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--text)}input[type=color]{padding:0;width:36px;height:30px}.login-form button,button.btn{font:inherit;padding:6px 14px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer}.login-form button,button.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.btn.danger{color:#dc2626}.login{max-width:340px;margin:12vh auto;padding:0 16px}.login-form{display:grid;grid-gap:12px;gap:12px;margin-top:16px}.login-form label{display:grid;grid-gap:4px;gap:4px;font-size:14px;color:var(--muted)}.stack{display:grid;grid-gap:8px;gap:8px}.inline{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.nav a.server-ind{display:inline-flex;align-items:center;gap:6px;font-size:12px}.server-ind .dot{width:9px;height:9px;border-radius:50%}.bar{height:10px;border-radius:5px;background:var(--line);overflow:hidden;margin:4px 0 2px}.bar>span{display:block;height:100%}.kv{display:grid;grid-template-columns:160px 1fr;grid-gap:4px 12px;gap:4px 12px;font-size:14px}.kv dt{color:var(--muted)}.kv dd{margin:0}table.t{width:100%;border-collapse:collapse;font-size:13px}table.t td,table.t th{text-align:left;padding:5px 8px;border-bottom:1px solid var(--line)}table.t th{color:var(--muted);font-weight:500}.tg{--hh:48px;display:grid;grid-template-columns:46px repeat(7,minmax(126px,1fr));min-width:1000px;border:1px solid var(--line);border-right:0;border-radius:12px;background:var(--surface);overflow:hidden}.tg>div{border-right:1px solid var(--line)}.tg .head-cell{text-align:center;font-size:13px;color:var(--muted);padding:8px 4px;border-bottom:1px solid var(--line)}.tg .head-cell b{display:block;font-size:18px;color:var(--text);font-weight:600}.tg .allday{padding:4px;border-bottom:1px solid var(--line);min-height:8px}.tg .today{background:var(--today)}.tg .hours{position:relative}.tg .hours span{position:absolute;right:6px;font-size:11px;color:var(--muted);transform:translateY(-50%)}.tg .col{position:relative;background-image:repeating-linear-gradient(to bottom,transparent 0,transparent calc(var(--hh) - 1px),var(--line) calc(var(--hh) - 1px),var(--line) var(--hh))}.tg .col.today{background-color:var(--today)}.tg-ev{position:absolute;overflow:hidden;padding:2px 5px;border-radius:5px;border-left:3px solid var(--c);font-size:12px;line-height:1.25;background:color-mix(in srgb,var(--c) 18%,var(--surface));overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto}.tg-ev .t{display:block;font-size:10.5px;color:var(--muted)}.tg-ev.routine{opacity:.8}.tg-ev .tags{display:flex;gap:3px;margin-top:1px}.tg-ev .tdot{width:7px;height:7px;border-radius:50%}.nowline{position:absolute;left:0;right:0;height:2px;background:#ef4444;z-index:2}.hint{font-size:12px;color:var(--muted);margin:-4px 0 10px}.tg-ev.dense{font-size:11px;padding:2px 3px;white-space:nowrap;text-overflow:ellipsis;overflow-wrap:normal;-webkit-hyphens:manual;hyphens:manual}.lanehead{display:flex;gap:1px;padding:2px 3px}.lanehead,.lanehead-label{border-bottom:1px solid var(--line)}.lanehead span{flex:1 1;min-width:0;text-align:center;font-size:10px;font-weight:600;line-height:16px;border-radius:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lane{position:absolute;top:0;bottom:0;pointer-events:none;border-left:1px dotted var(--line)}.step a.sel{background:var(--accent);color:#fff;border-color:var(--accent)}.step+.step{margin-left:4px}