:root{--bg: #f6f7f9;--surface: #ffffff;--text: #17202a;--muted: #5b6573;--border: #d9dee5;--accent: #1f5fbf;--accent-text: #ffffff;--focus: #1f5fbf;--success: #1d6b3a;--success-bg: #e6f4ea;--warning: #8a5300;--warning-bg: #fff4e0;--danger: #a42020;--danger-bg: #fdecec;--info: #1f4f8f;--info-bg: #e8f0fb;--neutral-bg: #eef0f3;--radius: 8px;--gap: 16px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;color:var(--text);background:var(--bg);line-height:1.45}*{box-sizing:border-box}body{margin:0;background:var(--bg)}h1{font-size:1.5rem;margin:0}h2,h3{margin:0}a{color:var(--accent)}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip-link{position:absolute;left:-999px;top:8px;background:var(--surface);padding:8px 12px;z-index:10}.skip-link:focus{left:8px}.muted{color:var(--muted)}.lead{font-size:1.05rem}.plain{list-style:none;padding:0;margin:4px 0}.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.stack{display:grid;gap:12px}.stack-sm{display:grid;gap:6px}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--gap)}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.topbar-brand{display:flex;gap:12px;align-items:baseline}.brand{font-weight:700}.tenant-switch{color:var(--muted);text-decoration:none}.topnav{display:flex;gap:4px}.topnav a{padding:8px 12px;border-radius:var(--radius);color:var(--text);text-decoration:none}.topnav a.active{background:var(--info-bg);color:var(--info);font-weight:600}.topbar-user{display:flex;gap:8px;align-items:center}.count{display:inline-block;min-width:1.4em;margin-left:6px;padding:0 6px;border-radius:999px;background:var(--warning);color:#fff;font-size:.8rem;text-align:center}.page{max-width:1200px;margin:0 auto;padding:24px;display:grid;gap:var(--gap)}.page.narrow{max-width:560px}.page-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-weight:500;cursor:pointer;text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-ghost{border-color:transparent;background:transparent;color:var(--accent);padding:4px 8px}.spinner{width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;display:inline-block;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation:none}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;display:grid;gap:12px;align-content:start}.card-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.card-title{font-size:1.1rem}.card-link{text-decoration:none;color:inherit;grid-template-columns:2fr 1fr 2fr auto;align-items:center}.card-link:hover{border-color:var(--accent)}.card-link-title{font-weight:600}.cards{list-style:none;margin:0;padding:0;display:grid;gap:12px}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:.85rem;font-weight:600;white-space:nowrap;border:1px solid transparent}.badge-neutral{background:var(--neutral-bg);color:var(--text)}.badge-info{background:var(--info-bg);color:var(--info)}.badge-success{background:var(--success-bg);color:var(--success)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-danger{background:var(--danger-bg);color:var(--danger)}.alert{display:flex;gap:10px;padding:12px;border-radius:var(--radius);border:1px solid}.alert p{margin:4px 0}.alert-title{font-weight:600;margin:0 0 4px}.alert-icon{font-weight:700;width:1.4em;height:1.4em;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none;border:1px solid currentColor;font-size:.8rem}.alert-info,.alert-neutral{background:var(--info-bg);color:var(--info);border-color:#c4d6f3}.alert-success{background:var(--success-bg);color:var(--success);border-color:#bfe0c9}.alert-warning{background:var(--warning-bg);color:var(--warning);border-color:#f1d4a2}.alert-danger{background:var(--danger-bg);color:var(--danger);border-color:#f2c2c2}.empty{text-align:center;padding:24px;display:grid;gap:8px;justify-items:center}.empty-title{font-weight:600;margin:0}.skeleton{display:grid;gap:10px;padding:12px 0}.skeleton-line{height:14px;border-radius:4px;background:linear-gradient(90deg,#e9ecf0,#f4f6f8,#e9ecf0)}.field{display:grid;gap:4px}.field label{font-weight:600;font-size:.9rem}.field-hint{margin:0;color:var(--muted);font-size:.85rem}.field-error{margin:0;color:var(--danger);font-size:.9rem}.field-invalid .input{border-color:var(--danger)}.input{font:inherit;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);width:100%}textarea.input{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem}.form{display:grid;gap:12px;max-width:560px}.form>.btn{justify-self:start}.form-inline{max-width:none;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:end;border-top:1px solid var(--border);padding-top:12px}.form-legend{grid-column:1 / -1;margin:0;font-weight:600}.confirm{display:flex;gap:8px;align-items:center}fieldset{border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin:0;display:grid;gap:10px}legend{font-weight:600;padding:0 4px}.event-type{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:end}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);flex-wrap:wrap}.tab{font:inherit;border:none;background:none;padding:8px 12px;cursor:pointer;border-bottom:3px solid transparent;color:var(--muted)}.tab-active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.filters{justify-content:space-between;align-items:end}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;margin:0}.stat{background:var(--bg);border-radius:var(--radius);padding:10px 12px}.stat dt{font-size:.85rem;color:var(--muted)}.stat dd{margin:2px 0 0;font-size:1.35rem;font-weight:600}.stat-warning dd{color:var(--warning)}.stat-danger dd{color:var(--danger)}.stat-success dd{color:var(--success)}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 16px;margin:0}.facts dt{font-size:.85rem;color:var(--muted)}.facts dd{margin:0}.summary{display:grid;gap:10px}.summary-title{font-weight:600;margin:0}.live-status{display:flex;gap:8px;align-items:center;margin:0;font-weight:500}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--border);vertical-align:top}.table th{font-size:.85rem;color:var(--muted);font-weight:600}.table .num{text-align:right;font-variant-numeric:tabular-nums}.table-compact th,.table-compact td{padding:4px 8px}.row-invalid{background:var(--danger-bg)}.strong-link{font-weight:600}@media(max-width:900px){.table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.table tr{display:block;border:1px solid var(--border);border-radius:var(--radius);margin-bottom:10px;padding:6px 10px;background:var(--surface)}.table td{display:flex;justify-content:space-between;gap:12px;border:none;padding:6px 0}.table td:before{content:attr(data-label);color:var(--muted);font-size:.85rem}.table .num{text-align:left}.card-link{grid-template-columns:1fr}.page{padding:16px}}.dropzone{position:relative;border:2px dashed var(--border);border-radius:var(--radius);padding:28px;text-align:center;background:var(--bg)}.dropzone:focus-within{outline:3px solid var(--focus);outline-offset:2px}.dropzone-active{border-color:var(--accent);background:var(--info-bg)}.dropzone-invalid{border-color:var(--danger)}.dropzone-label{display:grid;gap:4px;cursor:pointer}.dropzone-title{font-weight:600}.file-input{margin-top:12px}.people,.days{list-style:none;margin:0;padding:0}.person{border-bottom:1px solid var(--border)}.days{padding-left:24px}.disclosure{display:flex;flex-wrap:wrap;gap:12px;align-items:center;width:100%;padding:10px 4px;font:inherit;background:none;border:none;cursor:pointer;text-align:left;color:inherit}.disclosure-caret{width:1em}.person-name{font-weight:600}.day-date{font-variant-numeric:tabular-nums;min-width:6em}.day-detail{padding:4px 24px 12px;display:grid;gap:10px}.marks{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:8px;font-variant-numeric:tabular-nums}.marks li{background:var(--neutral-bg);border-radius:4px;padding:2px 8px}.options{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));border:none;padding:0}.option{display:flex;gap:8px;align-items:center;border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;cursor:pointer}.option-active{border-color:var(--accent);background:var(--info-bg)}.marks-pick{display:grid;gap:8px}.mark-option{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.mark-time{font-variant-numeric:tabular-nums;font-weight:600;min-width:3.5em}.pair{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));align-items:end}.pair label{display:grid;gap:4px;font-weight:600;font-size:.9rem}.checklist{list-style:none;margin:0;padding:0;display:grid;gap:8px}.step{display:flex;gap:10px;align-items:flex-start}.step p,.step ul{margin:2px 0 0}.status-icon{width:1.5em;height:1.5em;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none;font-weight:700;font-size:.85rem}.status-done{background:var(--success-bg);color:var(--success)}.status-warning{background:var(--warning-bg);color:var(--warning)}.status-blocked{background:var(--danger-bg);color:var(--danger)}.status-info{background:var(--info-bg);color:var(--info)}.suggestion{background:var(--bg);border-radius:var(--radius);padding:6px 8px;font-size:.9rem}.day-card-nested{margin-top:8px;background:var(--bg)}.events{list-style:none;padding:0;margin:0;display:grid;gap:4px}.events-title{margin:0;font-weight:600}.technical-body{border-top:1px solid var(--border);padding-top:8px;display:grid;gap:8px}.history summary{cursor:pointer;color:var(--accent)}.login{min-height:100vh;display:grid;place-items:center;padding:16px}.login-card{width:min(400px,100%)}.login-title{text-align:center}.tenant-list{list-style:none;padding:0;display:grid;gap:8px}.tenant-link{display:flex;justify-content:space-between;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-decoration:none;color:var(--text)}.tenant-name{font-weight:600}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f141e73;display:grid;place-items:center;padding:16px;z-index:20}.dialog{background:var(--surface);border-radius:var(--radius);padding:20px;width:min(480px,100%);display:grid;gap:12px}.dialog-title{font-size:1.15rem}.dialog-footer{display:flex;justify-content:flex-end;gap:8px}.pager{display:flex;gap:12px;align-items:center;justify-content:flex-end;padding-top:8px}.attention{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.attention-card{display:grid;gap:4px;text-decoration:none;color:inherit}.attention-card:hover{border-color:var(--accent)}.attention-count{font-size:1.6rem;font-weight:700}.compare{width:100%;border-collapse:collapse}.compare th,.compare td{text-align:left;padding:8px;border-bottom:1px solid var(--border);vertical-align:top}.changed-mark{font-weight:700}.filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;align-items:end}.guide{margin:0;padding-left:20px;display:grid;gap:8px}.guide li{display:flex;gap:8px;align-items:flex-start}.mark{white-space:nowrap;font-variant-numeric:tabular-nums}.mark-success{color:var(--success)}.mark-warning{color:var(--warning)}.mark-danger{color:var(--danger)}.mark-info,.mark-neutral{color:var(--muted, inherit)}.detail-row td{background:var(--info-bg)}
