:root{--surface: #f7fafc;--surface-raised: #ffffff;--ink: #16324a;--ink-soft: #5f7b8c;--ink-faint: #8ca0b3;--line: #d8e6ed;--line-strong: #afcbe8;--accent: #2e8bc9;--accent-soft: #dceefa;--good: #23916b;--good-soft: #e1f5ec;--warn: #e0902c;--warn-soft: #fbe9d2;--danger: #c0413c;--danger-soft: #f8e4e2;--tag-charge: #9c7a28;--tag-peds: #7a54a6;--tag-thoracic: #1e8fa1;--tag-cardiac: #b14d68;--tag-general: #64748b;--tag-jetvent: #5b7a45;--tag-regional: #3d7a8c;--trade-trade: #2f6fe0;--trade-drop: #22a06b;--trade-either: #8a5cc7;--radius: 12px;--radius-sm: 8px;--sans: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}body{margin:0;background:var(--surface);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.45}textarea{font:inherit}.app{width:96%;max-width:2200px;margin:0 auto;padding:28px 24px 64px}.masthead{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;padding-bottom:14px;border-bottom:1px solid var(--line-strong);margin-bottom:8px}.masthead h1{font-size:22px;font-weight:650;letter-spacing:-.01em;margin:0 0 4px}.masthead p{margin:0;color:var(--ink-soft);max-width:54ch}.viewer-line{font-size:12px;color:var(--ink-faint);margin:0 0 20px}.role-toggle{display:flex;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;flex-shrink:0}.role-toggle button{border:0;background:var(--surface-raised);color:var(--ink-soft);font:inherit;font-size:12.5px;font-weight:600;padding:8px 14px;cursor:pointer}.role-toggle button.active{background:var(--accent);color:#fff}.tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--line)}.tabs button{border:0;background:transparent;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink-faint);padding:10px 4px;margin-right:20px;cursor:pointer;border-bottom:2px solid transparent}.tabs button.active{color:var(--ink);border-bottom-color:var(--accent)}.tabs button:disabled{color:var(--line-strong);cursor:not-allowed}.section-note{font-size:12.5px;color:var(--ink-faint);margin-bottom:14px}.view-toggle{display:flex;gap:4px;margin-bottom:12px}.view-toggle button{border:1px solid var(--line-strong);background:var(--surface-raised);color:var(--ink-soft);font:inherit;font-size:12px;font-weight:600;padding:6px 12px;cursor:pointer}.view-toggle button:first-child{border-radius:var(--radius) 0 0 var(--radius)}.view-toggle button:last-child{border-radius:0 var(--radius) var(--radius) 0}.view-toggle button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.day-nav{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:12.5px;color:var(--ink-soft)}.day-nav button{border:1px solid var(--line-strong);background:var(--surface-raised);border-radius:var(--radius);padding:4px 10px;cursor:pointer;font:inherit}.grid-wrap{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);overflow-x:auto;margin-bottom:16px}table.week-grid{width:100%;border-collapse:collapse;min-width:760px}table.week-grid th{font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint);padding:10px 6px;border-bottom:1px solid var(--line-strong);text-align:center}table.week-grid th.row-col{text-align:left;padding-left:14px;width:96px}table.week-grid td{border-bottom:1px solid var(--line);border-right:1px solid var(--line);padding:5px;text-align:center;vertical-align:middle}table.week-grid td:last-child{border-right:none}table.week-grid tr:last-child td{border-bottom:none}td.row-label{text-align:left;padding-left:14px;font-size:13px;font-weight:600}td.row-label .sub{font-size:11px;color:var(--ink-faint);font-weight:400}.row-divider td{background:var(--surface);border-bottom:1px solid var(--line-strong);padding:4px 14px;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint);font-weight:700;text-align:left}.cell-chip{display:inline-flex;flex-direction:column;align-items:center;gap:0;padding:5px 6px;border-radius:var(--radius-sm);min-width:90px;cursor:pointer;border:1px solid transparent;line-height:1.3}.cell-chip.off{color:var(--ink-faint);cursor:default;background:none}.cell-chip .l1{font-size:10.5px;font-weight:700;font-family:var(--mono)}.cell-chip .l2{font-size:11.5px}.cell-chip .l3{font-size:10px;opacity:.75}.cell-chip .ob-badge{font-size:9.5px;font-weight:700;opacity:.8}.cell-chip.status-good{background:var(--good-soft);color:var(--good)}.cell-chip.status-warn{background:var(--warn-soft);color:var(--warn)}.cell-chip.status-danger{background:var(--danger-soft);color:var(--danger)}.cell-chip.selected{border-color:var(--accent)}.cell-chip.mine{box-shadow:inset 0 0 0 2px var(--accent)}.month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.month-cell{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:8px;min-height:66px;cursor:pointer}.month-cell .dnum{font-size:11px;color:var(--ink-faint)}.month-cell .dname{font-size:12px;font-weight:600;margin-bottom:4px}.month-cell.mine{box-shadow:inset 0 0 0 2px var(--accent)}.month-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:4px}.month-flag{font-size:10px;font-weight:700;padding:1px 5px;border-radius:var(--radius-sm)}.month-flag.warn{background:var(--warn-soft);color:var(--warn)}.month-flag.danger{background:var(--danger-soft);color:var(--danger)}.detail-panel{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}.detail-panel h3{margin:0 0 10px;font-size:14px;font-weight:650}.detail-empty{color:var(--ink-faint);font-size:13px}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);gap:12px}.detail-row:last-child{border-bottom:none}.detail-row .info{font-size:13px}.detail-row .info .meta{color:var(--ink-faint);font-size:12px;margin-top:2px}.flag{font-size:11px;font-weight:600;padding:3px 8px;border-radius:var(--radius-sm);white-space:nowrap;display:inline-block;margin-left:6px}.flag.good{background:var(--good-soft);color:var(--good)}.flag.warn{background:var(--warn-soft);color:var(--warn)}.flag.danger{background:var(--danger-soft);color:var(--danger)}select.reassign{font:inherit;font-size:12px;padding:4px 6px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--ink)}.layout{display:grid;grid-template-columns:220px 1fr;gap:20px}.roster{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:14px;align-self:start}.roster h2{font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);margin:0 0 10px;font-weight:700}.provider-row{padding:6px 0;border-top:1px solid var(--line)}.roster-group:first-child .provider-row:first-of-type{border-top:none}.tag-row{display:flex;gap:4px;margin-top:3px;flex-wrap:wrap}.tag{font-size:10px;font-weight:700;padding:1px 6px;border-radius:var(--radius-sm);color:#fff;letter-spacing:.01em}.tag.Charge{background:var(--tag-charge)}.tag.Peds{background:var(--tag-peds)}.tag.Thoracic{background:var(--tag-thoracic)}.tag.Cardiac{background:var(--tag-cardiac)}.tag.General{background:var(--tag-general)}.trade-board{display:grid;gap:12px}.trade-card{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:flex;justify-content:space-between;align-items:center;gap:16px}.trade-card.claimed{opacity:.5}.trade-type{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:2px 7px;border-radius:var(--radius-sm);margin-right:8px}.trade-type.drop{background:var(--warn-soft);color:var(--warn)}.trade-type.urgent{background:var(--danger-soft);color:var(--danger)}.trade-type.swap{background:var(--accent-soft);color:var(--accent)}.trade-note{color:var(--ink-faint);font-size:12px;margin-top:2px}.btn{font:inherit;font-size:12.5px;font-weight:600;padding:7px 14px;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface-raised);color:var(--ink);cursor:pointer;flex-shrink:0}.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.danger{background:var(--surface-raised);color:var(--danger);border-color:var(--danger)}.btn:disabled{color:var(--ink-faint);cursor:default;background:var(--surface);border-color:var(--line)}.btn.danger:hover{background:var(--danger-soft)}@keyframes btn-generating-sweep{0%{background-position:0% 50%}to{background-position:200% 50%}}.btn.generating,.btn.generating:disabled{background:linear-gradient(90deg,var(--accent) 0%,var(--accent-soft) 50%,var(--accent) 100%);background-size:200% 100%;animation:btn-generating-sweep 1.4s linear infinite;color:#fff;border-color:var(--accent);cursor:progress}@keyframes chip-spin{to{transform:rotate(360deg)}}.chip-spinner{display:inline-block;width:9px;height:9px;margin-right:4px;border:1.5px solid var(--accent-soft);border-top-color:var(--accent);border-radius:50%;animation:chip-spin .7s linear infinite;vertical-align:middle}.myshift-card{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:10px}.myshift-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.myshift-actions{display:flex;gap:8px;margin-top:10px}.callout-steps{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);font-size:12.5px;color:var(--ink-soft)}.callout-steps div{padding:3px 0;opacity:0;animation:fadein .3s forwards}@keyframes fadein{to{opacity:1}}.status-pill{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:var(--radius-sm)}.status-pill.out{background:var(--danger-soft);color:var(--danger)}.status-pill.posted{background:var(--warn-soft);color:var(--warn)}.confirm-box{background:var(--warn-soft);border:1px solid var(--warn);border-radius:var(--radius);padding:10px 12px;margin-top:10px}.confirm-box p{margin:0 0 8px;font-size:12.5px;color:var(--ink)}.confirm-box .myshift-actions{margin-top:0}.post-type-tag{font-size:10px;color:var(--ink-faint);border:1px solid var(--line-strong);padding:1px 6px;border-radius:var(--radius-sm);margin-left:6px}.status-badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.02em}.status-badge.draft{background:var(--warn-soft);color:var(--warn)}.status-badge.final{background:var(--good-soft);color:var(--good)}.status-badge.danger{background:var(--danger-soft);color:var(--danger)}.status-badge.open,.status-badge.employee{background:var(--accent-soft);color:var(--accent)}.status-badge.srna{background:var(--warn-soft);color:var(--warn)}.senior-staff-row{background:var(--warn-soft)}.months-nav{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:10px 0 16px}.month-chip{font:inherit;font-size:12px;font-weight:600;padding:6px 10px;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface-raised);color:var(--ink);cursor:pointer;display:flex;align-items:center;gap:6px}.month-chip.active{border-color:var(--accent);background:var(--accent-soft)}.payroll-table{width:100%;border-collapse:collapse;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.payroll-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint);padding:10px 14px;border-bottom:1px solid var(--line-strong)}.payroll-table td{padding:10px 14px;border-bottom:1px solid var(--line);font-size:13px}.payroll-table td.num,.payroll-table th.num{font-family:var(--mono);text-align:right}.payroll-table tr:last-child td{border-bottom:none}.delta-pos{color:var(--good)}.delta-neg{color:var(--danger)}.payroll-footer{display:flex;justify-content:space-between;align-items:center;margin-top:14px}.payroll-footer .caption{color:var(--ink-faint);font-size:12px}.topbar{position:relative;display:inline-block}.hamburger-btn{width:38px;height:38px;border:1px solid var(--line-strong);background:var(--surface-raised);border-radius:var(--radius);font:inherit;font-size:17px;cursor:pointer;color:var(--ink)}.hamburger-menu{position:absolute;top:44px;left:0;background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:0 6px 18px #0000001a;z-index:30;min-width:200px;padding:6px;flex-direction:column;gap:2px}.menu-item{display:block;width:100%;text-align:left;border:0;background:none;font:inherit;font-size:13px;color:var(--ink);padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer}.menu-item:hover{background:var(--surface)}.menu-item.inert{color:var(--ink-faint);cursor:default}.menu-item.inert:hover{background:none}.menu-group{display:flex;flex-direction:column;gap:2px}.menu-group+.menu-group,.menu-group+.menu-item{border-top:1px solid var(--line);margin-top:4px;padding-top:4px}.menu-group-head{display:flex;align-items:center;justify-content:space-between;width:100%;border:0;background:none;font:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);padding:6px 10px;border-radius:var(--radius-sm);cursor:pointer}.menu-group-head:hover{background:var(--surface);color:var(--ink-soft)}.menu-group .menu-item{padding-left:18px}.spec-table{width:100%;border-collapse:collapse;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:20px}.spec-table th{font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint);padding:10px;border-bottom:1px solid var(--line-strong);text-align:center}.spec-table th:first-child{text-align:left;padding-left:14px}.spec-table td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:center;font-size:13px}.spec-table td.spec-name{text-align:left;padding-left:14px;font-weight:600}.spec-table tr:last-child td{border-bottom:none}.spec-table input[type=checkbox].radio-disabled{opacity:.3;cursor:not-allowed}.spec-table select{font:inherit;font-size:12px;padding:4px 6px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--ink)}.tag.JetVentilation{background:var(--tag-jetvent)}.tag.Regional{background:var(--tag-regional)}.demand-mode{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.02em;padding:2px 8px;border-radius:var(--radius-sm)}.demand-mode.mode-full-weekday{background:var(--good-soft);color:var(--good)}.demand-mode.mode-weekend-skeleton{background:var(--warn-soft);color:var(--warn)}.demand-mode.mode-holiday-reduced{background:var(--accent-soft);color:var(--accent)}.demand-mode.day-passed{background:var(--line);color:var(--ink-soft)}.demand-chip{font-size:9.5px;font-weight:700;padding:1px 5px;border-radius:var(--radius-sm);margin-left:6px;letter-spacing:.02em}.demand-chip.core{background:var(--accent);color:#fff}.demand-chip.tag-req{background:var(--tag-general);color:#fff}.builder-summary{display:flex;align-items:center;gap:18px;margin:12px 0 18px;padding:10px 14px;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);font-size:12.5px}.builder-summary strong{font-size:14px}.builder-summary.day-passed{background:var(--line)}.builder-toggle{margin-left:auto;display:flex;align-items:center;gap:6px;color:var(--ink-soft)}.builder-site{margin-bottom:20px}.builder-site-head{display:flex;align-items:center;gap:10px;margin:0 0 8px}.builder-site-head h3{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);margin:0;font-weight:700}.slot-block{background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px}.slot-block.day-passed{background:var(--line)}.slot-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.slot-name{font-weight:650;font-size:13px}.slot-meta{font-size:11.5px;color:var(--ink-faint);font-family:var(--mono)}.slot-toggle{margin-left:auto;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-soft);border-radius:var(--radius-sm);width:26px;height:24px;font-size:13px;line-height:1;cursor:pointer}.slot-toggle:hover{background:var(--danger-soft);color:var(--ink)}.slot-block.slot-removed{background:var(--surface);opacity:.6}.slot-block.slot-removed .slot-name{text-decoration:line-through}.deactivate-dialog{max-width:460px}.deactivate-person{border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px;display:flex;flex-direction:column;gap:6px}.slot-count{font-size:11px;font-weight:700;color:var(--ink-soft);padding:1px 7px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);font-family:var(--mono)}.slot-placeholder-note{font-size:12px;color:var(--warn);margin-top:6px;font-weight:600}.seat-list{display:flex;flex-direction:column;gap:4px;margin-top:8px}.seat{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:12.5px;padding:4px 2px}.seat.filled{border-top:1px solid var(--line);padding-top:6px}.seat-list .seat.filled:first-child{border-top:none;padding-top:4px}.seat-name{font-weight:600}.seat-role{font-size:11px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.02em}.seat-x{margin-left:auto;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-soft);border-radius:var(--radius-sm);width:22px;height:22px;cursor:pointer;font:inherit;font-size:13px;line-height:1;flex-shrink:0}.seat-x:hover{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}.seat-x:disabled{opacity:.4;cursor:not-allowed;background:var(--surface);color:var(--ink-faint)}.seat-x:disabled:hover{background:var(--surface);color:var(--ink-faint);border-color:var(--line-strong)}.seat.add select{font:inherit;font-size:12px;padding:4px 6px;border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink);max-width:340px}.seat.add select:disabled{opacity:.5;cursor:not-allowed;background:var(--line);border-style:solid}.seat.add.drag-over{outline:2px dashed var(--accent);outline-offset:2px;border-radius:var(--radius)}.seat-hint{font-size:11.5px;color:var(--ink-faint);font-style:italic}.cred-legend{list-style:none;padding:12px 14px;margin:0 0 16px;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);font-size:12px;color:var(--ink-soft)}.cred-legend li{padding:3px 0}.cred-legend .tag{margin-right:6px}.cnote{font-size:11.5px;color:var(--ink-faint);font-weight:400;text-transform:none;letter-spacing:0}.wd-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}.wd-box{display:flex;align-items:center;gap:3px;font-size:12px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--ink)}.commit-group{margin-bottom:16px}.commit-head{display:flex;align-items:center;gap:10px;margin:0 0 6px;font-size:13px}.absence-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;padding:14px;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius)}.absence-form label,.absence-form .form-label{display:flex;flex-direction:column;gap:3px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.02em;color:var(--ink-faint)}.absence-form label.absence-whole{flex-direction:row;align-items:center;gap:6px;text-transform:none;font-weight:600;color:var(--ink-soft);padding-bottom:6px}.absence-form .absence-note{flex:1;min-width:160px}.absence-form input[type=text],.absence-form input[type=number],.absence-form input[type=date],.absence-form select{font:inherit;font-size:13px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--ink);padding:6px 8px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface-raised)}.absence-form input[type=number]{width:80px}.absence-form .btn{align-self:flex-end}.week-bars{display:flex;align-items:stretch;gap:10px}.week-bars-scroller{display:flex;gap:8px;flex:1;overflow-x:auto}.week-arrow{flex-shrink:0;width:34px;border:1px solid var(--line-strong);background:var(--surface-raised);border-radius:var(--radius);font:inherit;font-size:17px;line-height:1;color:var(--ink-soft);cursor:pointer}.week-arrow:hover{background:var(--accent-soft);color:var(--accent)}.day-bar{flex:1;min-width:138px;display:flex;flex-direction:column;gap:6px;background:var(--surface-raised);border:1px solid var(--line);border-radius:var(--radius);padding:8px}.day-bar-head{text-align:center;font-size:12.5px;font-weight:700;color:var(--ink);padding-bottom:6px;margin-bottom:2px;border-bottom:1px solid var(--line)}.day-bar-head .dow{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint)}.day-bar-empty{font-size:11px;color:var(--ink-faint);text-align:center;padding-top:12px}.day-bar-shift{display:block;width:100%;border:none;font:inherit;text-align:left;background:var(--accent-soft);border-radius:var(--radius-sm);padding:6px 8px;font-size:11px;line-height:1.4}.day-bar-shift .pos{display:block;font-weight:700;color:var(--ink);font-size:11.5px}.day-bar-shift .meta{display:block;color:var(--ink-soft)}.time{font-family:var(--mono)}.day-bar-shift.mine{background:var(--good-soft);border:1px solid var(--good)}.day-bar-shift.mine .meta{color:var(--good);font-weight:700}.trainee-slot{cursor:pointer}.trainee-slot:hover{outline:1px solid var(--accent)}.trainee-slot.assigned{background:var(--good-soft);border:1px solid var(--good)}.trainee-sub{display:block;font-style:italic;color:var(--ink-soft);margin-top:2px}.month-heading{font-size:15px;font-weight:700;margin:22px 0 8px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:8px}.cal-dayname{background:var(--surface-raised);padding:6px 4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-faint);text-align:center}.cal-cell{background:var(--surface-raised);min-height:92px;padding:5px;display:flex;flex-direction:column;gap:4px}.cal-cell.muted{background:var(--surface)}.cal-cell.muted .cal-date{color:var(--ink-faint)}.cal-cell.day-passed{background:var(--line)}.cal-cell.day-passed .cal-date{color:var(--ink-soft)}.cal-cell.clickable{cursor:pointer}.cal-cell.clickable:hover{background:var(--accent-soft)}.cal-cell.drag-dwell{background:var(--accent-soft);outline:2px dashed var(--accent);outline-offset:-2px}.cal-cell.clickable.muted:hover{background:var(--line)}.cal-cell.clickable.day-passed:hover{background:var(--line-strong)}.cal-cell.day-verdict-red{background:var(--danger-soft)}.cal-cell.day-verdict-yellow{background:var(--warn-soft)}.cal-cell.day-verdict-green{background:var(--good-soft)}.cal-date{font-size:11px;font-weight:700;color:var(--ink-soft)}.cal-shifts{display:flex;flex-direction:column;gap:3px}.cal-shift{background:var(--accent-soft);border-radius:var(--radius-sm);padding:2px 5px;font-size:10px;line-height:1.3}.cal-shift .pos{display:block;font-weight:700;color:var(--ink)}.cal-shift .meta{display:block;color:var(--ink-soft)}.cal-shift.mine{background:var(--good-soft);border:1px solid var(--good)}.cal-shift.mine .meta{color:var(--good);font-weight:700}.cal-shift.gained{background:var(--good-soft);border:1px solid var(--good);font-weight:700}.cal-shift.gained .pos{color:var(--good)}.cal-shift.lost{background:var(--danger-soft);border:1px dashed var(--danger);opacity:.65}.cal-shift.lost .pos{color:var(--danger);font-weight:400}.cal-summary{font-size:10.5px;font-weight:600;color:var(--ink-faint);margin-top:auto}.day-dots{display:flex;flex-wrap:wrap;gap:2px;margin-top:2px}.day-dot{width:6px;height:6px;border-radius:50%;flex:0 0 auto}.day-dot-blank{background:transparent;border:1px solid var(--line-strong)}.day-dot-clean{background:var(--good)}.day-dot-flagged{background:var(--warn);box-shadow:0 0 0 1.5px var(--warn-soft),0 0 0 2.5px var(--warn)}.review-gate-trigger{position:relative}.review-gate-backdrop{position:fixed;inset:0;background:#17203359;z-index:60;display:flex;justify-content:center;padding-top:0}.review-gate-panel{background:var(--surface-raised);width:100%;max-height:85vh;overflow-y:auto;box-shadow:0 12px 32px #17203340;border-radius:0 0 var(--radius) var(--radius);animation:review-gate-slide-down .18s ease-out}@keyframes review-gate-slide-down{0%{transform:translateY(-12px);opacity:0}to{transform:translateY(0);opacity:1}}.review-gate-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line-strong)}.review-gate-header h2{margin:0;font-size:17px}.review-gate-period{margin:2px 0 0;font-size:12.5px;color:var(--ink-faint);font-weight:600}.review-gate-list{display:flex;flex-direction:column}.review-gate-row{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line)}.review-gate-row-main{flex:1}.review-gate-row-main p{margin:0 0 6px;font-size:13px}.review-gate-row-main input{width:100%;max-width:260px;border:1px solid var(--line-strong);border-radius:var(--radius);padding:6px 8px;font:inherit;font-size:12.5px}.review-gate-row-main input::placeholder{color:var(--ink-faint);opacity:.7}.review-gate-red{background:var(--danger-soft)}.review-gate-yellow{background:var(--warn-soft)}.review-gate-blue{background:var(--accent-soft)}.review-gate-ack-done{font-size:12px;font-weight:600;color:var(--good);white-space:nowrap}.review-gate-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:16px 20px;flex-wrap:wrap}.day-modal-backdrop{position:fixed;inset:0;background:#17203359;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.day-modal{background:var(--surface-raised);border-radius:var(--radius);box-shadow:0 12px 32px #17203340;width:100%;max-width:380px;max-height:80vh;display:flex;flex-direction:column}.day-modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line);font-size:14px;font-weight:700}.day-modal-close{border:none;background:none;font-size:20px;line-height:1;color:var(--ink-faint);cursor:pointer;padding:0 2px}.day-modal-close:hover{color:var(--ink)}.day-modal-body{padding:12px 16px 16px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.trade-cal-cell{position:relative}.trade-cal-cell.has-posts{border-radius:var(--radius-sm)}.trade-cal-cell.has-posts .cal-date{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.25)}.trade-cal-count{font-size:10px;font-weight:700;color:#ffffffeb;margin-top:auto}.trade-cal-urgent-dot{position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:50%;background:var(--danger);box-shadow:0 0 0 1.5px #fffc}.trade-cal-legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;font-size:12px;color:var(--ink-soft);margin:4px 0 14px}.trade-cal-swatch{display:inline-block;width:11px;height:11px;border-radius:var(--radius-sm);margin-right:5px;vertical-align:-1px}.trade-cal-swatch.trade{background:var(--trade-trade)}.trade-cal-swatch.drop{background:var(--trade-drop)}.trade-cal-swatch.either{background:var(--trade-either)}.trade-cal-swatch.urgent-dot{width:7px;height:7px;border-radius:50%;background:var(--danger);margin-right:6px}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--surface)}.login-card{background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:0 12px 32px #17203326;width:100%;max-width:340px;padding:28px 24px;display:flex;flex-direction:column;gap:14px}.login-card h1{font-size:18px;font-weight:650;margin:0 0 4px;text-align:center}.login-card label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:var(--ink-soft)}.login-card input{font:inherit;padding:8px 10px;border:1px solid var(--line-strong);border-radius:var(--radius)}.login-card button{font:inherit;font-weight:650;padding:10px;border:0;border-radius:var(--radius);background:var(--accent);color:#fff;cursor:pointer}.login-card button:disabled{opacity:.6;cursor:not-allowed}.login-error{color:var(--danger);font-size:12.5px;margin:0}.auth-bar{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:6px 24px;font-size:12px;color:var(--ink-faint)}.auth-bar button{font:inherit;font-size:12px;border:1px solid var(--line-strong);background:var(--surface-raised);border-radius:var(--radius);padding:4px 10px;cursor:pointer}.cal-holiday{font-size:10px;font-weight:600;color:var(--accent);line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trade-cal-cell.has-posts .cal-holiday{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.25)}
