:root{--bg:#f5f6f8;--card:#fff;--ink:#1b1f24;--mute:#667085;--line:#e3e6ea;--we:#eef0f3;--hol:#c62828;--accent:#1f4e79;--K:#0f8b8d;--K-bg:#d7f0f0;--M:#c2185b;--M-bg:#fbe0ec;--E:#2f6fd0;--E-bg:#dce8fb;--B:#d9822b;--B-bg:#fbe8d4}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#14171b;--card:#1d2126;--ink:#e7eaee;--mute:#98a2b3;--line:#2e343b;--we:#262b31;--hol:#ff6b6b;--accent:#7fb2ea;--K-bg:#143a3b;--E-bg:#1a2d4d;--B-bg:#43301b;--M-bg:#45192d}}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font:14px/1.4 Segoe UI,system-ui,sans-serif}header{background:var(--accent);color:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;display:flex}header h1{margin:0;font-size:18px}header .sub{opacity:.85;font-size:12px}nav{flex-wrap:wrap;gap:4px;display:flex}nav button{color:#fff;cursor:pointer;font:inherit;background:#ffffff1f;border:0;border-radius:6px;padding:8px 14px}nav button.on{color:var(--accent);background:#fff;font-weight:600}main{max-width:1280px;margin:0 auto;padding:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;margin-bottom:14px;padding:14px}.row{flex-wrap:wrap;align-items:stretch;gap:14px;display:flex}.kpi{flex:200px}.kpi .lbl{color:var(--mute);text-transform:uppercase;letter-spacing:.04em;font-size:12px}.kpi .val{margin-top:4px;font-size:20px;font-weight:600}.kpi .team{flex-direction:column;gap:4px;margin-top:6px;display:flex}.kpi.started{background:#ecfdf5;border-color:#10b981;box-shadow:inset 4px 0 #059669}.kpi.pending{background:#fffbeb;border-color:#f59e0b;box-shadow:inset 4px 0 #f59e0b}.kpi .st{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;font-size:13px;display:flex}.kpi .st .ok{color:#047857;font-weight:600}.startbtn{color:#fff;font:inherit;letter-spacing:.04em;cursor:pointer;background:#059669;border:0;border-radius:8px;padding:8px 16px;font-weight:700}.startbtn:hover{background:#047857}.startbtn:disabled{cursor:not-allowed;background:#9ca3af}.ruf{cursor:pointer;align-items:center;gap:6px;width:100%;font-weight:600;display:flex}.linkbtn{color:var(--mute);cursor:pointer;font:inherit;background:0 0;border:0;font-size:12px;text-decoration:underline}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .kpi.started{background:#0d2a20}:root:not([data-theme=light]) .kpi.pending{background:#2d2410}}.chip{border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-size:13px;font-weight:600;display:inline-flex}.dot{border-radius:50%;width:10px;height:10px;display:inline-block}.legend{color:var(--mute);flex-wrap:wrap;align-items:center;gap:16px;font-size:12px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.sw{border:1px solid var(--line);border-radius:3px;width:14px;height:14px;display:inline-block}select,input,button.btn{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:6px;padding:6px 10px}button.btn{cursor:pointer}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.btn:disabled{opacity:.45;cursor:not-allowed}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;display:flex}.toolbar .grow{flex:1}.year{grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px;display:grid}.month h3{margin:0 0 6px;font-size:14px}.month table{border-collapse:collapse;table-layout:fixed;width:100%}.month th{color:var(--mute);padding:2px 0;font-size:11px;font-weight:500}.month td{text-align:center;border:1px solid var(--card);height:28px;padding:0;font-size:12px;position:relative}.month td.kw{color:var(--mute);cursor:pointer;width:26px;font-size:10px}.month td.kw:hover{color:var(--accent);text-decoration:underline}.month td.d{cursor:pointer;border-radius:4px}.month td.d.K{background:var(--K-bg)}.month td.d.E{background:var(--E-bg)}.month td.d.B{background:var(--B-bg)}.month td.d.M{background:var(--M-bg)}.seg{border:1px solid var(--line);border-radius:8px;display:inline-flex;overflow:hidden}.seg button{background:var(--card);color:var(--ink);font:inherit;cursor:pointer;border:0;padding:6px 16px;font-weight:600}.seg button+button{border-left:1px solid var(--line)}.seg button.on{background:var(--accent);color:#fff}.mnav{align-items:center;gap:6px;display:flex}.year.big{grid-template-columns:1fr}.year.big .month h3{font-size:18px}.year.big .month td.kw{width:40px;font-size:12px}.year.big .month th{padding:4px 0;font-size:13px}.year.big .month td.d{vertical-align:top;text-align:left;border:3px solid var(--card);height:92px;padding:6px 8px 10px;font-size:13px}.year.big .month td .ks{width:18px;height:18px;font-size:12px;top:6px;left:auto;right:6px}.year.big .month td .bar{height:4px;bottom:3px}.year.big .dn{font-size:16px;font-weight:700}.year.big .nm{margin-top:2px;font-weight:600}.year.big .hn{color:var(--hol);margin-top:2px;font-size:11px;font-weight:600}.year.big .st{color:var(--mute);margin-top:2px;font-size:11px}.year.big .month td.d.ft:after{display:none}.svc{background:#0000002e;border-radius:8px;flex-wrap:wrap;gap:3px;margin-bottom:6px;padding:3px;display:inline-flex}.svc button{color:#fffc;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:5px 12px;font-size:12px;font-weight:600}.svc button:hover{color:#fff}.svc button.on{color:var(--accent);background:#fff}.month td.d.we{font-weight:700}.month td.d.ft{color:var(--hol);font-weight:700}.month td.d.ft:after{content:"";background:var(--hol);border-radius:50%;width:5px;height:5px;position:absolute;top:3px;right:3px}.month td.d.today{outline:2px solid var(--ink);outline-offset:-2px}.month td .bar{border-radius:2px;height:3px;position:absolute;bottom:2px;left:3px;right:3px}.month td.d{-webkit-user-select:none;user-select:none}.month td.d.sel{box-shadow:inset 0 0 0 2px var(--accent);background-image:linear-gradient(#1f4e792e,#1f4e792e)}.ks{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:13px;height:13px;font-size:9px;font-style:normal;font-weight:800;line-height:1;display:inline-flex}.month td .ks{position:absolute;top:1px;left:1px}.ks.ok{background:#059669}.ks.warn{background:#f59e0b}.ks.fail{background:#dc2626}.ks.open{color:#9ca3af;background:#fff;border:1px solid #9ca3af;width:11px;height:11px;font-size:7px}.month td.d.isfail{box-shadow:inset 0 0 0 2px #dc2626}.month td.d.chg{outline-offset:-2px;outline:2px dashed #7c3aed}.month td.d.chg.today{outline-style:solid}.chgtag{color:#6d28d9;background:#ede9fe;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:600;display:inline-block}.selbar{z-index:5;background:var(--accent);color:#fff;border-radius:8px;align-items:center;gap:10px;margin-bottom:10px;padding:6px 12px;font-size:13px;display:flex;position:sticky;top:0}.selbar button{color:#fff;cursor:pointer;font:inherit;background:#ffffff26;border:0;border-radius:5px;padding:4px 10px}.selbar button:hover{background:#ffffff4d}.ctx{z-index:30;background:var(--card);border:1px solid var(--line);border-radius:8px;min-width:230px;padding:4px 0;font-size:13px;position:fixed;box-shadow:0 10px 30px #0003}.ctx .h{color:var(--mute);text-transform:uppercase;letter-spacing:.04em;padding:6px 12px;font-size:11px}.ctx button{width:100%;color:var(--ink);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:6px 12px;display:flex}.ctx button:hover{background:var(--we)}.ctx hr{border:0;border-top:1px solid var(--line);margin:4px 0}.modal-bg{z-index:40;background:#0f172a73;justify-content:center;align-items:flex-start;padding:4vh 12px;display:flex;position:fixed;inset:0;overflow:auto}.modal{background:var(--card);border-radius:12px;width:min(980px,100%);overflow:hidden;box-shadow:0 20px 60px #0000004d}.modal .mh{color:#fff;background:#0e7c86;flex-wrap:wrap;align-items:center;gap:12px;padding:12px 18px;display:flex}.modal .mh h2{margin:0;font-size:16px}.modal .mh .x{color:#fff;cursor:pointer;background:#ffffff26;border:0;border-radius:6px;width:30px;height:30px;margin-left:auto;font-size:18px}.modal .mb{padding:14px 18px}.slots{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.slots button{border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;font:inherit;border-radius:6px;align-items:center;gap:8px;padding:6px 12px;display:flex}.slots button.on{border-color:#0e7c86;font-weight:600;box-shadow:inset 0 0 0 1px #0e7c86}.panels{grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:12px;display:grid}.panel{border:1px solid var(--line);border-radius:10px;overflow:hidden}.panel .ph{color:#095a62;background:#e1f1f1;justify-content:space-between;align-items:center;padding:8px 12px;font-weight:700;display:flex}.panel .ph small{color:#0e7c86;font-weight:500}.prow{border-top:1px solid var(--line);grid-template-columns:1fr auto;align-items:center;gap:6px 10px;padding:8px 12px;display:grid}.prow:first-of-type{border-top:0}.prow .lbl{font-weight:600}.prow .lbl small{color:var(--mute);font-size:11px;font-weight:400;display:block}.prow input.cm{grid-column:1/-1;width:100%;font-size:12px}.prow input.cm.need{background:#fffbeb;border-color:#d97706}.sb{gap:4px;display:flex}.sb button{color:#374151;cursor:pointer;background:#fff;border:1px solid #9ca3af;border-radius:6px;width:30px;height:26px;font-family:ui-monospace,monospace;font-weight:600}.sb button:hover{background:#f3f4f6}.sb button.last-ok{border-width:2px;border-color:#10b981}.sb button.last-warn{border-width:2px;border-color:#f59e0b}.sb button.last-fail{border-width:2px;border-color:#ef4444}.sb button.on.ok{color:#fff;background:#059669;border-color:#059669}.sb button.on.warn{color:#fff;background:#f59e0b;border-color:#f59e0b}.sb button.on.fail{color:#fff;background:#dc2626;border-color:#dc2626}.sb button:disabled{opacity:.55;cursor:not-allowed}.sb button.txt{letter-spacing:.03em;white-space:nowrap;width:auto;padding:0 10px;font-family:inherit;font-size:11px}.steps{color:var(--mute);margin:12px 0 0;font-size:12px}.steps summary{cursor:pointer;color:#0e7c86;font-weight:600}.steps ol{margin:6px 0 0 18px;padding:0}.mf{border-top:1px solid var(--line);background:var(--bg);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 18px;display:flex}.mf .grow{flex:1}.prog{background:var(--line);border-radius:3px;width:140px;height:6px;overflow:hidden}.prog i{background:#0e7c86;height:100%;display:block}.banner{border-radius:8px;margin-bottom:10px;padding:8px 12px;font-size:12px}.tk{grid-column:1/-1}.tk.form{background:#fffbeb;border:1px solid #fde68a;border-radius:8px;flex-direction:column;gap:6px;padding:8px;display:flex}.tk.form input,.tk.form textarea{width:100%;font:inherit;border:1px solid var(--line);color:#111;background:#fff;border-radius:6px;padding:6px;font-size:12px}.tkbar{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tbtn{color:#095a62;cursor:pointer;background:#e1f1f1;border:0;border-radius:6px;padding:4px 10px;font-size:12px;font-weight:600}.tbtn:disabled{opacity:.5;cursor:not-allowed}.tkey{color:#4b5563;background:#f3f4f6;border:1px solid #d1d5db;border-radius:6px;margin-right:8px;padding:3px 8px;font-family:ui-monospace,monospace;font-size:12px;font-weight:600}.local{color:var(--mute);margin-top:8px;font-size:11px}#toast{opacity:0;color:#fff;z-index:60;pointer-events:none;background:#1b1f24;border-radius:8px;padding:10px 16px;font-size:13px;transition:all .25s;position:fixed;bottom:24px;left:50%;transform:translate(-50%)translateY(20px)}#toast.show{opacity:1;transform:translate(-50%)}.banner.fail{color:#991b1b;background:#fee2e2}.extra{border:1px solid var(--line);background:var(--bg);border-radius:10px;margin-top:12px;padding:10px 12px}.extra.need{background:#fffbeb;border-color:#f59e0b}.extra .xh{flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.extra .xrow{align-items:center;gap:8px;margin-bottom:6px;display:flex}.extra .xrow .num{font-variant-numeric:tabular-nums;min-width:60px}.extra .xbar{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.extra .xbar .grow{flex:1}.warnTxt{color:#b45309;font-size:12px}.yn{border:1px solid #9ca3af;border-radius:6px;display:inline-flex;overflow:hidden}.yn button{color:#374151;font:inherit;cursor:pointer;background:#fff;border:0;padding:4px 14px;font-size:12px;font-weight:700}.yn button+button{border-left:1px solid #9ca3af}.yn button.on.yes{color:#fff;background:#059669}.yn button.on.no{color:#fff;background:#6b7280}.yn button:disabled{cursor:not-allowed;opacity:.75}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .extra.need{background:#2d2410}}table.list tr.xtra td{background:#fff7ed;font-size:13px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) table.list tr.xtra td{background:#2a1f12}}.sheet tr.xtra td{background:#fff3e0}.banner.ok{color:#065f46;background:#d1fae5}.banner.warn{color:#92400e;background:#fef3c7}.banner.info{color:#095a62;background:#e1f1f1}table.list{border-collapse:collapse;width:100%}table.list th,table.list td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:6px 8px}table.list th{color:var(--mute);font-size:12px;font-weight:600}table.list td.num,table.list th.num{text-align:right;font-variant-numeric:tabular-nums}table.list tr.we td{background:var(--we)}table.list tr.ft td:first-child{color:var(--hol);font-weight:600}table.list input[type=time]{width:100px}table.list input.note{width:100%}.tag{background:var(--we);color:var(--mute);border-radius:4px;padding:1px 7px;font-size:11px}.tag.ft{color:#a01818;background:#fde2e2}.tag.done{color:#16703a;background:#dcf3e2}.tag.plan{color:#7a5b00;background:#fff3cd}.muted{color:var(--mute)}.hint{color:var(--mute);font-size:12px}.sheet{color:#000;background:#fff;border:1px solid #ccc;width:210mm;max-width:100%;min-height:270mm;margin:0 auto 16px;padding:14mm 16mm;font-size:12px;box-shadow:0 2px 8px #00000014}.sheet h2{margin:0;font-size:18px}.sheet .head{border-bottom:2px solid #000;justify-content:space-between;align-items:flex-start;margin-bottom:10px;padding-bottom:6px;display:flex}.sheet table{border-collapse:collapse;width:100%;margin:6px 0 12px}.sheet th,.sheet td{text-align:left;border:1px solid #444;padding:3px 6px}.sheet th{background:#e8e8e8}.sheet td.num,.sheet th.num{text-align:right}.sheet tr.ft td{color:#b00000}.sheet tr.we td{background:#f3f3f3}.sheet .sum td{background:#e8e8e8;font-weight:700}.sheet .sig{gap:40px;margin-top:28px;display:flex}.sheet .sig div{border-top:1px solid #000;flex:1;padding-top:4px;font-size:11px}.sheet h3{margin:12px 0 2px;font-size:13px}@media print{@page{size:A4;margin:0}body{background:#fff}header,nav,.no-print,.toolbar{display:none!important}main{max-width:none;padding:0}.card{background:0 0;border:0;margin:0;padding:0}.sheet{box-shadow:none;page-break-after:always;border:0;width:auto;min-height:0;margin:0}}@media (max-width:600px){main{padding:10px}.sheet{padding:8mm}}.err{color:#991b1b;background:#fee2e2;border-radius:8px;margin-bottom:10px;padding:8px 12px;font-size:13px}.userbox{color:#fff;align-items:center;gap:8px;font-size:12px;display:flex}.userbox button{color:#fff;cursor:pointer;font:inherit;background:#ffffff26;border:0;border-radius:6px;padding:5px 10px}.loading{text-align:center;color:var(--mute);padding:40px}.login{background:var(--accent);color:#fff;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;padding:16px;display:flex}.login h1{margin:0 0 4px;font-size:26px}.login p{opacity:.85;margin:0 0 20px;font-size:13px}.login form{width:100%;max-width:360px;color:var(--ink);flex-direction:column;gap:12px;display:flex}.login label{flex-direction:column;gap:4px;font-size:13px;font-weight:600;display:flex}.login input{padding:10px 12px}.login button{padding:10px}.linkbtn{margin-left:8px}.yearsel{color:#fff;font:inherit;background:#ffffff26;border:0;border-radius:4px;padding:1px 4px;font-weight:600}.yearsel option{color:#000}
