:root{--bg:#fdf6f2;--ink:#3a2f2b;--muted:#8a7a72;--brand:#c0796a;--warn:#c0392b;--line:#e8dcd5}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font-family:Noto Serif TC,PingFang TC,Microsoft JhengHei,serif;line-height:1.7}.wrap{max-width:720px;margin:0 auto;padding:24px 18px 64px}.top{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:20px;padding-bottom:10px;display:flex}.top h1{color:var(--brand);margin:0;font-size:1.25rem}.env{white-space:nowrap;border-radius:999px;padding:2px 9px;font-size:.78rem}.env.dev{color:#4a6b52;background:#eef3ee;border:1px solid #cfe0d4}.env.prod{background:var(--warn);color:#fff}.env.unknown{color:#8a4b00;background:#fff4e5;border:2px dashed #d98a1c;font-weight:600}.card{border:1px solid var(--line);background:#fff;border-radius:10px;padding:20px}.card.warn{border-color:var(--warn);border-left-width:4px}.card h2{margin:0 0 14px;font-size:1.05rem}label{color:var(--muted);margin-bottom:14px;font-size:.9rem;display:block}input{border:1px solid var(--line);border-radius:6px;width:100%;margin-top:5px;padding:9px 11px;font-family:inherit;font-size:1rem;display:block}button{background:var(--brand);color:#fff;cursor:pointer;border:0;border-radius:6px;padding:9px 20px;font-family:inherit;font-size:.95rem}button:disabled{opacity:.55;cursor:default}dl{grid-template-columns:auto 1fr;gap:6px 18px;margin:0 0 14px;display:grid}dt{color:var(--muted);font-size:.88rem}dd{margin:0}.muted{color:var(--muted);font-size:.9rem}.err{border-left:4px solid var(--warn);background:#fdecea;border-radius:5px;margin:0 0 18px;padding:10px 14px}code{background:#f3ece8;border-radius:4px;padding:1px 5px;font-size:.88em}.card+.card,.card+section.card{margin-top:18px}.note{border-left:4px solid var(--brand);background:#fff8f2;border-radius:5px;margin:14px 0 16px;padding:10px 14px;font-size:.88rem;line-height:1.75}.gridwrap{padding-bottom:6px;overflow-x:auto}.slots{border-collapse:collapse;font-size:.78rem}.slots th{color:var(--muted);text-align:left;white-space:nowrap;padding:0 0 4px;font-weight:400}.slots th.day{color:var(--ink);padding-right:10px;font-size:.85rem;position:relative}.dot{background:var(--brand);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin-left:5px;display:inline-block}.slots td{padding:0}.slot{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:0;width:17px;height:26px;padding:0;display:block}.slot:hover{background:#f6ebe6}.slot.on{background:var(--brand);border-color:var(--brand)}.slots td.summary{color:var(--muted);white-space:nowrap;padding-left:12px;font-size:.8rem}.actions{gap:10px;margin-top:16px;display:flex}button.ghost{color:var(--muted);border:1px solid var(--line);background:0 0}.okmsg{background:#eef5ef;border-left:4px solid #5c8a63;border-radius:5px;margin:16px 0 0;padding:10px 14px}.diag{color:var(--muted);white-space:nowrap;opacity:.45;background:#f3ece8;border-radius:999px;padding:2px 8px;font-size:.72rem}.diag:hover{opacity:1}.diag.alert{opacity:1;color:var(--warn);border:1px solid var(--warn);background:#fdecea;font-size:.78rem;font-weight:700}.slot{touch-action:none;-webkit-tap-highlight-color:transparent}.slot.illegal{outline:2px solid var(--warn);outline-offset:-2px;z-index:1;position:relative}.slot:focus-visible{outline:2px solid var(--ink);outline-offset:1px;z-index:2}.slots th.day.draghandle{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-right:3px solid var(--line);padding-right:8px}.slots th.day.draghandle:hover{color:var(--brand);border-right-color:var(--brand)}.slots th.day.draghandle:active{cursor:grabbing}.slots td.summary{text-overflow:ellipsis;width:260px;min-width:260px;max-width:260px;overflow:hidden}.slots th.day{width:64px;min-width:64px}.dot{margin-left:0;position:absolute;top:50%;right:2px;transform:translateY(-50%)}.card.schedule{width:min(760px,96vw);margin-left:50%;transform:translate(-50%)}details.note.quiet{padding:8px 14px}details.note.quiet>summary{cursor:pointer;color:var(--brand);font-size:.86rem}details.note.quiet>p{margin:10px 0 0}.slots th.day{z-index:3;box-shadow:1px 0 0 var(--line);background:#fff;position:sticky;left:0}.slots thead th:first-child{z-index:4;background:#fff;position:sticky;left:0}.gridwrap.vertical{touch-action:pan-y;-webkit-user-select:none;user-select:none;border:1px solid var(--line);background:#fff;border-radius:8px;max-height:min(70vh,760px);overflow:auto}.gridwrap.vertical.locked{touch-action:none}.slots.vgrid{border-collapse:separate;border-spacing:0;width:100%;font-size:.78rem}.slots.vgrid th.daycol{z-index:2;border-bottom:1px solid var(--line);color:var(--ink);white-space:nowrap;cursor:grab;touch-action:none;background:#fff;padding:8px 2px;font-size:.85rem;font-weight:400;position:sticky;top:0}.slots.vgrid th.daycol:hover{color:var(--brand)}.slots.vgrid th.daycol:active{cursor:grabbing}.slots.vgrid th.timecol{z-index:1;text-align:right;width:52px;min-width:52px;color:var(--muted);vertical-align:top;border-right:1px solid var(--line);background:#fff;padding-right:6px;font-size:.72rem;font-weight:400;position:sticky;left:0;transform:translateY(-.35em)}.slots.vgrid th.corner{z-index:3;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;left:0}.slots.vgrid td{border-right:1px solid var(--line);padding:0}.slots.vgrid tr.hourline td{border-top:1px solid var(--line)}.slots.vgrid tbody tr:not(.hourline) td{border-top:1px dotted #f0e6e0}.slots.vgrid .slot{cursor:pointer;touch-action:inherit;border:0;border-radius:0;width:100%;height:22px;padding:0;display:block}.slots.vgrid .slot.on{background:var(--brand)}.slots.vgrid .slot.illegal{outline:2px solid var(--warn);outline-offset:-2px;z-index:1;position:relative}.slots.vgrid .slot:hover:not(.on){background:#f6ebe6}@media (max-width:380px){.wrap{padding-left:8px;padding-right:8px}.card.schedule{padding:12px 8px}.slots.vgrid th.timecol{width:42px;min-width:42px;padding-right:4px;font-size:.68rem}.slots.vgrid th.daycol{padding:6px 0;font-size:.78rem}}.slots.vgrid .slot.away,.slot.away{background-color:#e8d8d2;background-image:repeating-linear-gradient(45deg,#ffffffd9 0 3px,#c0796a8c 3px 6px)}.daycol .awayflag{color:var(--warn);font-size:11px;font-weight:400;display:block}.weekdates{grid-template-columns:repeat(7,1fr);gap:4px;margin:8px 0 10px;font-size:12px;display:grid}.weekdates .wd{text-align:center;color:var(--muted)}.weekdates .wd.closed{color:var(--warn);font-weight:600}.weekbar{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0 4px;display:flex}.weekbar .weeklabel{font-weight:600}.weekbar .weeklabel b{color:var(--brand)}.leaveform{border:1px solid var(--line);border-radius:8px;flex-wrap:wrap;align-items:flex-end;gap:10px 14px;margin:10px 0;padding:12px;display:flex}.leaveform label{flex-direction:column;gap:4px;font-size:13px;display:flex}.leaveform label.inline{flex-direction:row;align-items:center;gap:6px}.leaveform label.wide{flex:260px}.leaveform input[type=text]{width:100%}.leaveform .warnline,.leaveform .muted,.leaveform .err,.leaveform .actions{flex:100%;margin:0}.leaveform .warnline{border-left:3px solid var(--warn);padding-left:8px;font-size:13px}.leavelist{margin:6px 0;padding:0;list-style:none}.leavelist li{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:6px 0;font-size:14px;display:flex}.ghost.small{padding:2px 8px;font-size:12px}.shownreason{color:var(--ink);background:#fdf1ec;border-radius:4px;padding:2px 6px}.chiplist{flex-wrap:wrap;gap:6px;margin:6px 0 12px;padding:0;list-style:none;display:flex}.chip{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:999px;padding:5px 12px;font-size:13px}.chip:hover:not(:disabled){background:#f6ebe6}.chip:disabled{cursor:default}.chip-approved{background:var(--brand);color:#fff;border-color:var(--brand)}.chip-pending{background:#fdf1ec;border-style:dashed}.chip-rejected{color:var(--muted);text-decoration:line-through}.chipstate{opacity:.85;font-size:11px}.navlink{margin-left:8px;font-size:.9em}.form{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:end;gap:10px 16px;display:grid}.form label{flex-direction:column;gap:4px;font-size:.9em;display:flex}.form label.wide,.form fieldset.wide{grid-column:1/-1}.form label.row{flex-direction:row;align-items:center;gap:6px}.form textarea,.rec textarea{width:100%;font:inherit;box-sizing:border-box;border:1px solid #ccc;border-radius:6px;padding:6px 8px}.form select{font:inherit;border:1px solid #ccc;border-radius:6px;padding:6px 8px}fieldset.report{border:1px solid #e0b96a;border-radius:8px;padding:8px 12px}fieldset.report legend{font-weight:600}.kinds{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:4px 12px;margin:6px 0;display:grid}table.list{border-collapse:collapse;width:100%;font-size:.95em}table.list th,table.list td{text-align:left;border-bottom:1px solid #eee;padding:6px 8px}.rec{border:1px solid #e5e5e5;border-radius:8px;margin:10px 0;padding:10px 12px}.rec.final{background:#fafafa}.rec header{margin-bottom:6px;font-size:.92em}.rec .content{white-space:pre-wrap;font:inherit;margin:6px 0}.rec .note{font-size:.9em}.print-page{color:#000;background:#fff;max-width:780px;margin:0 auto;padding:24px;font-family:Noto Serif TC,serif}.print-page .toolbar{margin-bottom:16px}.doc-head{text-align:center;border-bottom:2px solid #000;margin-bottom:12px}.doc-head h1{margin:0 0 4px;font-size:1.4em}table.doc-id{border-collapse:collapse;width:100%;margin-bottom:16px}table.doc-id th,table.doc-id td{text-align:left;border:1px solid #000;padding:6px 8px}table.doc-id th{background:#f3f3f3;width:18%}.doc-rec{page-break-inside:avoid;border-top:1px solid #999;margin-top:12px;padding-top:8px}.doc-rec h2{margin:0 0 6px;font-size:1.05em}.doc-body{white-space:pre-wrap;line-height:1.7}.doc-meta{color:#444;font-size:.85em}.doc-sign{border-top:2px solid #000;margin-top:32px;padding-top:12px}.doc-legal{color:#444;font-size:.8em}@media print{.no-print{display:none!important}body{background:#fff!important}.print-page{padding:0}}
