:root{--go-green: #8cc63f;--go-green-dark: #5a9216;--go-red: #d8121a;--ink: #1d1d1f;--muted: #6b7280;--border: #c9ccd1;--bg: #f4f5f7;--panel: #ffffff;--pink: #f7c6dd;--blue: #bfe0f5;--shadow: 0 1px 3px rgba(0, 0, 0, .12);--radius: 8px;font-family:Segoe UI,system-ui,-apple-system,Microsoft YaHei,sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:7px 14px;transition:background .15s,border-color .15s}button:hover{border-color:var(--go-green-dark)}button.primary{background:var(--go-green);border-color:var(--go-green-dark);color:#14310a;font-weight:600}button.primary:hover{background:var(--go-green-dark);color:#fff}button.danger{border-color:var(--go-red);color:var(--go-red)}button:disabled{opacity:.5;cursor:not-allowed}input,select{font:inherit;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:#fff}a{color:var(--go-green-dark)}.app-header{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--panel);border-bottom:2px solid var(--go-green);box-shadow:var(--shadow);position:sticky;top:0;z-index:10}.app-header .brand{display:flex;align-items:center;gap:10px;font-weight:700}.app-header nav{display:flex;gap:6px;margin-left:12px}.app-header nav a{padding:6px 12px;border-radius:6px;text-decoration:none;color:var(--ink)}.app-header nav a.active{background:var(--go-green);color:#14310a;font-weight:600}.app-header .spacer{flex:1}.app-header .user{color:var(--muted);font-size:.9rem}.app-footer{text-align:center;color:var(--muted);font-size:.85rem;padding:18px 16px;margin-top:24px;border-top:1px solid var(--border)}.app-footer a{color:var(--go-green-dark);font-weight:600;text-decoration:none}.app-footer a:hover{text-decoration:underline}.lang-switch button{padding:4px 8px;font-size:.85rem}.lang-switch button.active{background:var(--go-green);font-weight:700}main{padding:20px;max-width:1280px;margin:0 auto}.panel{background:var(--panel);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;margin-bottom:18px}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.notice{padding:10px 14px;border-radius:6px;margin:10px 0}.notice.ok{background:#e6f5d9;color:#2f5d12}.notice.err{background:#fde2e1;color:#8a1216}.notice.warn{background:#fff3cd;color:#8a6100;border:1px solid #f0c674;display:flex;align-items:center}.login-wrap{min-height:90vh;display:grid;place-items:center}.login-card{width:360px;max-width:92vw}.login-card .field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.login-card label{font-size:.85rem;color:var(--muted)}.login-card input{width:100%}.grid-scroll{overflow-x:auto}table.schedule{border-collapse:collapse;width:100%;font-size:12px;background:#fff}table.schedule th,table.schedule td{border:1px solid #9aa0a6;text-align:center;padding:2px 4px;white-space:nowrap}table.schedule .title-row td{border:none;padding:6px}table.schedule .corner{background:#fff}table.schedule thead th{background:#fff;font-weight:700}table.schedule .name-cell{text-align:left;padding:3px 8px;font-weight:600;min-width:90px}table.schedule .name-cell.f{background-color:var(--pink)}table.schedule .name-cell.m{background-color:var(--blue)}.report-status{flex:0 0 220px;align-self:flex-start}.report-status .rs-item{display:flex;align-items:center;gap:8px;padding:3px 0}.report-status .rs-dot{width:12px;height:12px;border-radius:50%;flex:0 0 12px}.report-status .rs-dot.reported{background:#14b8a6}.report-status .rs-dot.pending{background:#ffb300}.report-status .rs-name.clickable{cursor:pointer;text-decoration:underline dotted}.schedule-row{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}.diff-scroll{overflow-x:auto}table.diff-grid{border-collapse:collapse;width:100%}table.diff-grid th,table.diff-grid td{border:1px solid var(--border);padding:6px 8px;text-align:center;font-size:13px;white-space:nowrap}table.diff-grid th.rowlabel{text-align:right;background:var(--bg);font-weight:700;white-space:nowrap}table.diff-grid td.diff{outline:2px dashed var(--go-red);outline-offset:-2px}.schedule-row>.grid-col{flex:1;min-width:0}table.schedule td.day{min-width:52px;height:22px;font-variant-numeric:tabular-nums}table.schedule td.sum{font-weight:700;background:#fafafa;min-width:56px}table.schedule tfoot td{font-weight:700;background:#f0f0f0}table.schedule td.day.editable{cursor:pointer}table.schedule td.day.diff{outline:2px solid var(--go-red);outline-offset:-2px}.grid-header-meta{display:flex;align-items:center;gap:18px;justify-content:space-between;font-weight:700}.grid-header-meta .logo{display:flex;align-items:center;gap:8px;font-size:20px;color:var(--go-red)}.grid-header-meta .logo .dot{background:var(--go-red);color:#fff;border-radius:50%;width:30px;height:30px;display:grid;place-items:center;font-weight:800}.grid-header-meta .branch{font-size:22px;letter-spacing:1px}.grid-header-meta .period{font-size:18px}.legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.legend .chip{display:inline-flex;align-items:center;padding:3px 10px;border-radius:4px;font-size:12px;border:1px solid #9aa0a6}table.data{border-collapse:collapse;width:100%}table.data th,table.data td{border-bottom:1px solid var(--border);padding:8px 10px;text-align:left}table.data th{color:var(--muted);font-weight:600}.modal-backdrop{position:fixed;inset:0;background:#0006;display:grid;place-items:center;z-index:50}.modal{background:#fff;border-radius:var(--radius);padding:20px;width:460px;max-width:94vw;max-height:90vh;overflow:auto}.modal h3{margin-top:0}.row{display:flex;gap:10px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.row label{min-width:120px;color:var(--muted)}.row.time-row{flex-wrap:nowrap}.row.time-row label{min-width:auto}.row.time-row input{min-width:0;flex:1}.center{display:grid;place-items:center;min-height:60vh;color:var(--muted)}table.schedule tr.dim td.day{opacity:.3}table.schedule tr.dim td.name-cell,table.schedule tr.dim td.sum{opacity:.45}table.schedule td.day.locked,.grid-scroll.locked,.grid-scroll.locked *{cursor:not-allowed}@keyframes ants-x{to{background-position:16px 0,-16px 100%}}@keyframes ants-left{to{background-position:16px 0,-16px 100%,0 -16px}}@keyframes ants-right{to{background-position:16px 0,-16px 100%,100% 16px}}table.schedule tr.own-row td{background-image:linear-gradient(to right,#ff8c00 50%,transparent 50%),linear-gradient(to right,#ff8c00 50%,transparent 50%);background-repeat:repeat-x;background-size:16px 2px;background-position:0 0,0 100%;animation:ants-x .7s linear infinite}table.schedule tr.own-row td:first-child{background-image:linear-gradient(to right,#ff8c00 50%,transparent 50%),linear-gradient(to right,#ff8c00 50%,transparent 50%),linear-gradient(to bottom,#ff8c00 50%,transparent 50%);background-repeat:repeat-x,repeat-x,repeat-y;background-size:16px 2px,16px 2px,2px 16px;background-position:0 0,0 100%,0 0;animation:ants-left .7s linear infinite}table.schedule tr.own-row td:last-child{background-image:linear-gradient(to right,#ff8c00 50%,transparent 50%),linear-gradient(to right,#ff8c00 50%,transparent 50%),linear-gradient(to bottom,#ff8c00 50%,transparent 50%);background-repeat:repeat-x,repeat-x,repeat-y;background-size:16px 2px,16px 2px,2px 16px;background-position:0 0,0 100%,100% 0;animation:ants-right .7s linear infinite}.btn-like{display:inline-flex;align-items:center;padding:7px 14px;border:1px solid var(--border, #ccc);border-radius:6px;background:#fff;font:inherit}.btn-like:hover{background:#f3f4f6}table.schedule td.day.pending{outline:2px dashed #f59e0b;outline-offset:-2px}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:999px;font-weight:700;font-size:.85rem;border:1px solid transparent}.status-badge.submitted{background:#e6f5d9;color:#2f5d12;border-color:#9bce6e}.status-badge.pending{background:#fff3cd;color:#8a6100;border-color:#f0c674}.legend .chip{cursor:help}.export-legend{display:none;padding:10px 4px 4px}.export-legend strong{display:block;margin-bottom:6px;font-size:13px}.grid-scroll.exporting .export-legend{display:block}@media(max-width:760px){main{padding:12px}.app-header{flex-wrap:wrap;gap:8px;padding:8px 12px}.app-header nav{margin-left:0;flex-wrap:wrap}.app-header .user{display:none}.panel{padding:12px}.modal{width:96vw;padding:16px}table.schedule{font-size:11px}table.schedule td.day{min-width:40px}button{padding:9px 14px}.row label{min-width:96px}}
