:root{font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#24324a;background:#f4f7fb;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:#f4f7fb;-webkit-font-smoothing:antialiased}button,input{font:inherit}button:focus-visible,input:focus-visible{outline:3px solid rgba(16,94,190,.28);outline-offset:2px}.app-shell{width:min(100%,1180px);min-height:100vh;margin-inline:auto;padding:0 0 48px;background:#fff;border-inline:1px solid #e1e6ed}.topbar{display:grid;grid-template-columns:minmax(260px,auto) 1fr auto;align-items:center;gap:18px;min-height:78px;padding:10px 22px;border-bottom:1px solid #dce3ec}.eyebrow{margin:0 0 4px;color:#1261bb;font-size:10px;font-weight:800;letter-spacing:.14em}h1{margin:0;color:#24324a;font-size:clamp(23px,2vw,30px);line-height:1.05;letter-spacing:.015em}.sync-area{display:flex;align-items:flex-start;gap:8px;color:#69758a;font-size:12px;text-align:right}.sync-area p{margin:0 0 5px}.sync-area button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;padding:0;color:#0c59b4;background:transparent;cursor:pointer;font-weight:750}.sync-area button:disabled{color:#8b96a7;cursor:wait}.status-dot{width:8px;height:8px;margin-top:4px;border-radius:999px;background:#22a06b;box-shadow:0 0 0 4px #22a06b1f}.status-dot.has-error{background:#c93636;box-shadow:0 0 0 4px #c936361f}.date-controls{display:flex;align-items:center;gap:6px;justify-content:center;min-width:0}.date-controls button,.date-controls input{min-height:32px;border:1px solid #cbd5e1;border-radius:6px;padding:5px 9px;color:#34425a;background:#fff;cursor:pointer;font-size:13px;font-weight:650}.date-controls button:hover,.date-controls input:hover{border-color:#6f829d}.date-controls .today-button{color:#fff;border-color:#1261bb;background:#1261bb}.date-controls .print-button{color:#fff;border-color:#087f8e;background:#087f8e}.date-controls .print-button:disabled{opacity:.62;cursor:wait}.date-controls input{margin-left:4px}.notice{margin:18px 32px 0;padding:12px 14px;border:1px solid #ead59c;border-radius:8px;color:#6d5519;background:#fff8e5}.error-notice{border-color:#e9b4b4;color:#872c2c;background:#fff1f1}.print-notice{border-color:#a9d8c4;color:#176342;background:#effbf5}.receipt-modal-backdrop{position:fixed;z-index:20;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:20px;background:#18243680}.receipt-modal{width:min(100%,520px);max-height:calc(100dvh - 40px);overflow:auto;padding:20px;border-radius:10px;background:#fff;box-shadow:0 16px 48px #13233747}.receipt-modal h2{margin:0 0 14px;color:#26364d;font-size:18px}.printer-picker{margin-bottom:14px;padding:10px;border:1px solid #d7e0e9;border-radius:7px;background:#f6f8fb}.printer-picker label{display:block;margin-bottom:5px;color:#34425a;font-size:13px;font-weight:800}.printer-picker select{width:100%;min-height:38px;border:1px solid #b9c5d3;border-radius:6px;padding:6px 9px;color:#26364d;background:#fff;font-weight:700}.printer-picker p{margin:7px 0 0;color:#68758a;font-size:12px}.receipt-modal pre{width:42ch;max-width:100%;margin:0 auto 16px;overflow-x:auto;padding:14px;border:1px dashed #9da8b6;color:#111;background:#fff;font-family:Courier New,ui-monospace,monospace;font-size:12px;line-height:1.25;white-space:pre}.receipt-actions{display:flex;justify-content:flex-end;gap:8px}.receipt-actions button{min-height:38px;padding:7px 12px;border:1px solid #b9c5d3;border-radius:6px;color:#26364d;background:#fff;cursor:pointer;font-weight:700}.receipt-help{margin:12px 0 0;color:#68758a;font-size:12px}.roster-scroll{width:100%;margin-top:0;overflow-x:auto;background:#fff;box-shadow:0 1px #e4e9f0}.mobile-roster{display:none}.roster{--team-width: 200px;--hour-width: 75px;display:grid;grid-template-columns:var(--team-width) minmax(calc(var(--hour-count) * var(--hour-width)),1fr);min-width:calc(var(--team-width) + var(--hour-count) * var(--hour-width))}.corner{position:sticky;left:0;z-index:5;min-height:52px;border-right:1px solid #d9e0e8;border-bottom:1px solid #d9e0e8;background:#fff}.hours{display:grid;grid-template-columns:repeat(var(--hour-count),1fr);min-height:52px;border-bottom:1px solid #d9e0e8;background:#f1f4f8}.hour{padding:9px 5px;border-left:1px solid #d1d9e3;color:#24324a;font-size:18px;font-weight:800;white-space:nowrap}.agenda-label{position:sticky;left:0;z-index:4;min-height:58px;margin:0;padding:19px 16px;border-right:1px solid #c8dfe3;border-bottom:1px solid #c8dfe3;color:#22636d;background:#edf9fa;font-size:15px;font-weight:800}.agenda-items{display:flex;align-items:center;flex-wrap:wrap;gap:7px;min-height:58px;padding:9px 10px;border-bottom:1px solid #c8dfe3;background:#f4fcfd}.agenda-card{display:flex;align-items:center;gap:8px;max-width:100%;min-height:36px;padding:7px 10px;border-radius:6px;color:#fff;background:#0798aa;box-shadow:0 1px 1px #065b662e;font-size:14px;line-height:1.25}.agenda-time{flex:0 0 auto;font-weight:850}.agenda-title{min-width:0;overflow-wrap:anywhere;font-weight:700}.team-row{display:contents}.team-name{position:sticky;left:0;z-index:4;min-height:calc(20px + var(--tracks) * 52px);margin:0;padding:21px 16px;border-right:1px solid #d9e0e8;border-bottom:1px solid #e1e6ed;color:#536179;background:#fff;font-size:16px;font-weight:750;line-height:1.2}.team-name.is-long{font-size:13px;white-space:nowrap}.timeline{position:relative;min-height:calc(20px + var(--tracks) * 52px);overflow:hidden;border-bottom:1px solid #e1e6ed;background:#fff}.timeline-grid{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;grid-template-columns:repeat(var(--hour-count),1fr)}.timeline-grid span{border-left:1px solid #d9e0e8}.shift{position:absolute;z-index:2;display:flex;align-items:center;gap:9px;height:34px;min-width:70px;overflow:hidden;padding:0 10px;border-radius:6px;color:#fff;background:#1261bb;box-shadow:0 1px 1px #0d3b702e;font-size:16px;line-height:1;font-weight:760;letter-spacing:.01em;white-space:nowrap}.shift.is-active{outline:3px solid rgba(18,97,187,.18);outline-offset:2px}.shift.is-ended{background:#5f7591}.shift-time{flex:0 0 auto}.shift-name{overflow:hidden;text-overflow:ellipsis}.now-line{position:absolute;z-index:3;top:0;bottom:0;width:2px;background:#d66532;pointer-events:none}.now-line span{position:absolute;top:1px;left:5px;padding:3px 5px;border-radius:4px;color:#fff;background:#b74d21;font-size:10px;font-weight:800}.empty-state,.loading-state{margin:18px 32px;min-height:280px;display:grid;place-content:center;text-align:center;color:#718096;background:#fff;border:1px solid #e0e6ee}.empty-state p{margin:4px}.empty-title{color:#34425a;font-size:22px;font-weight:750}@media(max-width:1100px){.topbar{grid-template-columns:1fr auto}.date-controls{grid-column:1 / -1;grid-row:2;justify-content:flex-start;overflow-x:auto}}@media(min-width:721px)and (max-width:1180px){.roster{--team-width: 180px;--hour-width: calc((100vw - 182px) / var(--hour-count))}}@media(max-width:720px){.topbar{align-items:flex-start;gap:10px;padding:12px}.sync-area{text-align:left}.sync-area p{display:none}.date-controls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;overflow:visible}.date-controls button{min-width:0;padding-inline:5px;font-size:12px;white-space:nowrap}.date-controls input{grid-column:1 / 3;width:100%;margin-left:0;font-size:13px}.date-controls .print-button{grid-column:3;font-size:12px}.roster-scroll{display:none}.mobile-roster{display:block;width:100%;padding:10px;background:#f4f7fb}.mobile-section{margin-bottom:10px;padding:10px;border:1px solid #dbe3ec;border-radius:8px;background:#fff}.mobile-section h2{margin:0 0 8px;color:#47566d;font-size:15px;line-height:1.2}.mobile-agenda-section{border-color:#b9dde1;background:#edf9fa}.mobile-agenda-section h2{color:#17616a}.mobile-card-list{display:grid;gap:6px}.mobile-agenda-card,.mobile-shift-card{display:grid;grid-template-columns:104px minmax(0,1fr);align-items:center;gap:9px;min-height:38px;padding:8px 10px;border-radius:6px;color:#fff;font-size:14px;line-height:1.2}.mobile-agenda-card{background:#0798aa}.mobile-shift-card{background:#1261bb}.mobile-shift-card.is-ended{background:#5f7591}.mobile-agenda-card span,.mobile-shift-card span{font-weight:800;white-space:nowrap}.mobile-agenda-card strong,.mobile-shift-card strong{min-width:0;overflow-wrap:anywhere;font-weight:750}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important}}
