:root{font-family:Microsoft YaHei,PingFang SC,Noto Sans CJK SC,Arial,sans-serif;color:#182335;background:#f1f4f8;font-synthesis:none;--ink: #182335;--muted: #6c7787;--forest: #123a69;--forest-2: #1b5592;--paper: #fffef9;--soft: #f2f5f9;--line: #dce3eb;--gold: #d7b868}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:#f1f4f8;-webkit-font-smoothing:antialiased}button,input{font:inherit}button{cursor:pointer}.app-shell{width:min(1180px,calc(100% - 40px));margin:28px auto 44px}.topbar{min-height:96px;padding:18px 22px 18px 26px;display:flex;align-items:center;justify-content:space-between;color:#fff;background:var(--forest);border-radius:20px;box-shadow:0 18px 44px #123a6929}.brand-lockup,.header-tools{display:flex;align-items:center;gap:15px}.brand-mark{width:48px;height:48px;display:grid;place-items:center;color:var(--forest);background:#e8d290;border-radius:15px;font-size:21px;font-weight:900}.eyebrow,.section-kicker{margin:0 0 5px;color:#9db9d9;font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase}h1,h2,p{margin-top:0}h1{margin-bottom:0;font-size:25px;letter-spacing:-.04em}.export-all{min-height:44px;padding:0 18px;color:#f8f3e4;background:#ffffff12;border:1px solid rgba(255,255,255,.24);border-radius:12px;font-weight:800}.export-all:hover{background:#ffffff21;border-color:#fff6}.export-all:disabled{opacity:.5;cursor:not-allowed}.month-badge{min-width:98px;padding:9px 14px;color:#263c2f;background:#e9d594;border-radius:12px;font-size:22px;font-weight:900;line-height:1;text-align:right}.month-badge span{display:block;margin-bottom:4px;font-size:10px;letter-spacing:.1em}.tabs{width:max-content;display:flex;gap:4px;margin:18px 0 0;padding:5px;background:#e6ebf2;border:1px solid #d8e0ea;border-radius:14px}.tabs button{min-width:112px;padding:10px 16px;color:#647285;background:transparent;border:0;border-radius:10px;font-weight:800}.tabs button:hover{color:var(--forest);background:#ffffff8c}.tabs button.active{color:#fff;background:var(--forest);box-shadow:0 5px 14px #123a6929}.search-layout{display:grid;grid-template-columns:minmax(340px,.84fr) minmax(450px,1.16fr);gap:16px;margin-top:16px}.hero-card,.result-panel,.upload-layout,.table-section{background:var(--paper);border:1px solid rgba(25,63,108,.08);border-radius:22px;box-shadow:0 16px 44px #1a385e12}.hero-card{padding:36px}.hero-copy h2,.result-heading h2,.upload-copy h2,.table-heading h2{margin-bottom:9px;color:var(--ink);font-size:clamp(26px,3vw,36px);line-height:1.18;letter-spacing:-.045em}.hero-copy>p:last-child,.upload-copy>p,.table-heading p{color:var(--muted);line-height:1.75}.section-kicker{color:#688fb9}.search-box{display:block;margin-top:32px}.search-box>span,.month-field>span,.roster-field>span{display:block;margin-bottom:9px;color:#516158;font-size:12px;font-weight:800}.search-row{display:flex;gap:8px}.search-row input{width:100%;min-width:0;height:52px;padding:0 16px;color:var(--ink);background:#fbfcf8;border:1px solid #c9d3cc;border-radius:12px;outline:none;font-size:16px}.search-row input:focus{border-color:var(--forest-2);box-shadow:0 0 0 4px #1b55921a}.search-row button,.primary{flex:none;min-width:106px;padding:0 18px;color:#fff;background:var(--forest);border:1px solid var(--forest);border-radius:12px;font-weight:800}.search-row button:hover,.primary:hover{background:var(--forest-2)}.name-picker-heading{display:flex;align-items:center;justify-content:space-between;margin-top:20px;color:#637185;font-size:12px;font-weight:800}.name-picker-heading strong{padding:4px 8px;color:#174b7d;background:#e5eff9;border-radius:999px;font-size:11px}.quick-names{max-height:142px;display:flex;flex-wrap:wrap;align-content:flex-start;gap:7px;margin-top:10px;padding:2px 3px 4px 0;overflow-y:auto;scrollbar-width:thin}.quick-names button{padding:7px 11px;color:#4e6256;background:#f5f7f2;border:1px solid #e0e6df;border-radius:999px;font-size:12px}.quick-names button:hover,.quick-names button.selected{color:#fff;background:#6283a9;border-color:#6283a9}.quick-names button.favorite{border-color:#9ab7d6;box-shadow:inset 0 0 0 1px #2669a814}.quick-names button.favorite:before{content:"★";margin-right:4px;color:#2c6fa9;font-size:9px}.quick-names button.favorite.selected:before{color:#fff}.name-not-found{margin:10px 0 0;color:#b33b48;font-size:12px;line-height:1.55}.result-panel{min-height:526px;padding:30px}.result-heading,.table-heading{display:flex;gap:20px;align-items:flex-start;justify-content:space-between}.result-heading h2{margin:0;font-size:27px}.actions{display:flex;flex-wrap:wrap;gap:7px}.actions button,.secondary{min-height:39px;padding:8px 13px;color:#355140;background:#fafbf8;border:1px solid #d4ddd6;border-radius:10px;font-weight:800}.actions button:hover,.secondary:hover{background:#f0f3ee;border-color:#bfcac2}.actions .primary,.result-actions .save-image{color:#fff;background:var(--forest);border-color:var(--forest)}.result-actions .save-image:hover{background:var(--forest-2)}.result-actions button:disabled{opacity:.58;cursor:wait}.summary-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px;margin:22px 0 12px}.summary-strip>div{min-height:76px;display:grid;grid-template-columns:5px 1fr;grid-template-rows:auto auto;gap:0 12px;align-content:center;padding:12px 14px;background:var(--soft);border-radius:13px}.summary-strip strong{font-size:21px;line-height:1}.summary-strip small{color:var(--muted)}.shift-dot{width:5px;height:38px;grid-row:1 / 3;align-self:center;background:#5e9dd1;border-radius:99px}.shift-dot.中班{background:#d9b946}.shift-dot.夜班{background:#7e8fb3}.result-list{max-height:340px;overflow:auto;padding-right:4px}.result-row{display:flex;align-items:center;justify-content:space-between;min-height:56px;padding:8px 3px;border-bottom:1px solid #e7eae5}.date-block{display:flex;align-items:baseline;gap:11px}.date-block strong{width:40px;color:var(--forest);font-size:23px;font-variant-numeric:tabular-nums}.date-block span{color:var(--muted);font-size:12px}.shift-tags{display:flex;gap:7px}.shift-tags span{min-width:55px;padding:7px 10px;color:#174872;background:#dceaf6;border-radius:999px;font-size:12px;font-weight:900;text-align:center}.shift-tags span.中班{color:#62500f;background:#f3e9be}.shift-tags span.夜班{color:#36415d;background:#e0e5ef}.empty-state{min-height:335px;display:grid;place-content:center;gap:8px;color:var(--muted);text-align:center}.empty-state strong{color:#3d5949;font-size:18px}.upload-layout{display:grid;grid-template-columns:.72fr 1.28fr;gap:38px;margin-top:16px;padding:40px}.upload-copy{padding-top:14px}.upload-copy h2{font-size:34px}.month-field{display:block;margin-top:28px}.month-field input{width:100%;height:48px;padding:0 13px;color:var(--ink);background:#fbfcf8;border:1px solid #cbd5ce;border-radius:11px}.roster-field{display:block;margin-top:16px}.roster-field textarea{width:100%;min-height:92px;resize:vertical;padding:11px 13px;color:var(--ink);background:#fbfcf8;border:1px solid #cbd5ce;border-radius:11px;outline:0;line-height:1.6}.roster-field textarea:focus{border-color:var(--forest-2);box-shadow:0 0 0 4px #1b55921a}.local-ocr-badge{display:grid;grid-template-columns:auto 1fr;gap:11px;align-items:center;margin-top:14px;padding:14px;color:#44566b;background:#edf5ff;border:1px solid #b9d3ef;border-radius:13px}.local-ocr-badge>span{padding:5px 8px;color:#fff;background:#2469a8;border-radius:999px;font-size:10px;font-weight:900;white-space:nowrap}.local-ocr-badge>div{display:grid;gap:4px}.local-ocr-badge strong{color:#153f70;font-size:13px}.local-ocr-badge small{color:#65758a;font-size:11px;line-height:1.55}.upload-tips{display:grid;gap:5px;margin-top:17px;padding:15px 16px;color:#586b60;background:#f2f5ef;border-radius:12px;font-size:12px}.privacy-check{display:flex;align-items:flex-start;gap:9px;margin-top:14px;color:#5f6d7e;font-size:11px;line-height:1.55}.privacy-check input{width:17px;height:17px;flex:none;margin:0;accent-color:var(--forest)}.drop-card{min-height:420px;padding:18px;display:flex;flex-direction:column;justify-content:center;background:#f5f7f3;border:1px dashed #aebfb2;border-radius:18px}.drop-card img{width:100%;max-height:292px;object-fit:contain;background:#fff;border:1px solid #e2e6e1;border-radius:12px}.drop-placeholder{min-height:250px;display:grid;place-content:center;gap:8px;color:#758078;text-align:center}.drop-placeholder strong{color:#294d38;font-size:19px}.recognition-flow{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;margin-top:13px;color:#728196;font-size:10px;font-weight:800}.recognition-flow span{padding:5px 8px;background:#e8eef6;border-radius:999px}.recognition-flow span.active{color:#fff;background:#2b6faf}.recognition-flow span.muted{opacity:.45;text-decoration:line-through}.recognition-flow i{color:#a6b2c1;font-style:normal}.upload-actions{display:grid;grid-template-columns:1fr 1.3fr;gap:9px;margin-top:13px}.upload-actions button{min-height:46px}.upload-actions button:disabled{opacity:.42;cursor:not-allowed}.ocr-status{margin-top:13px}.ocr-status p{margin:8px 0 0;color:#5d6e63;font-size:12px}.ocr-status.error p{color:#9f2431}.ocr-status.warning p{color:#9a6419}.progress-track{height:5px;overflow:hidden;background:#d8ded9;border-radius:99px}.progress-track span{display:block;height:100%;background:#337db9;border-radius:inherit;transition:width .25s ease}.table-section{margin-top:16px;padding:30px}.table-heading{margin-bottom:20px}.table-heading h2{margin-bottom:4px;font-size:28px}.table-heading p{margin-bottom:0;font-size:12px}.table-heading .primary:disabled{opacity:.45;cursor:not-allowed}.review-banner{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:14px;padding:15px 17px;border:1px solid #e2c7c9;border-radius:13px;background:#fff4f4}.review-banner>div{display:grid;gap:4px}.review-banner strong{color:#8f2730}.review-banner span{color:#6f6163;font-size:12px}.review-banner label{display:flex;align-items:flex-start;gap:8px;max-width:390px;color:#4b5665;font-size:12px;font-weight:800;line-height:1.5}.review-banner input{width:17px;height:17px;margin-top:1px;accent-color:var(--forest)}.review-banner.verified{border-color:#bfd8ca;background:#eff8f3}.review-banner.verified strong{color:#236347}.source-preview{margin-bottom:14px;overflow:hidden;border:1px solid #dce3eb;border-radius:13px;background:#f7f9fc}.source-preview summary{padding:12px 15px;color:var(--forest);cursor:pointer;font-size:12px;font-weight:900}.source-preview img{display:block;width:100%;max-height:420px;object-fit:contain;padding:0 12px 12px}.table-wrap{overflow:auto;border:1px solid #d9dfda;border-radius:14px}table{width:100%;min-width:860px;border-collapse:collapse;table-layout:fixed;background:#f7faf6}th,td{height:39px;border-right:1px solid #dde4df;border-bottom:1px solid #dde4df;text-align:center}tr:last-child td{border-bottom:0}th:last-child,td:last-child{border-right:0}th{color:#375342;background:#e8eee8;font-size:12px}th:first-child,th:nth-child(2){width:74px}th input{width:100%;height:100%;padding:0 6px;color:#294f78;background:transparent;border:0;outline:0;text-align:center;font-size:12px;font-weight:900}th input:focus{background:#fff;box-shadow:inset 0 0 0 2px var(--forest)}td{background:#f7faf6;font-size:13px}td.weekend{color:#c62c3b;font-weight:900}td input{width:100%;height:100%;padding:0 5px;color:#132e1f;border:0;outline:0;text-align:center}td input:focus{box-shadow:inset 0 0 0 2px var(--forest)}td input.uncertain{box-shadow:inset 0 0 0 2px #d33b4c;background-image:linear-gradient(135deg,transparent 0 84%,rgba(211,59,76,.9) 85% 100%)}td input.uncertain:focus{box-shadow:inset 0 0 0 2px #a8172a,0 0 0 2px #d33b4c29}footer{display:flex;justify-content:space-between;padding:16px 5px 0;color:#7c867f;font-size:11px}.toast{position:fixed;left:50%;bottom:28px;z-index:10;transform:translate(-50%);padding:12px 18px;color:#fff;background:#173d68;border-radius:12px;box-shadow:0 12px 32px #0000002e;font-weight:800}.image-save-dialog{width:min(680px,calc(100vw - 24px));max-height:90vh;max-height:90dvh;padding:20px;border:1px solid #d7e3f0;border-radius:20px;color:#153e70;background:#f3f7fc;overflow-y:auto;overscroll-behavior:contain}.image-save-dialog::backdrop{background:#0a1c35a6}.image-save-header{display:flex;gap:12px;align-items:flex-start;justify-content:space-between}.image-save-header h2{font-size:21px;margin:0 0 8px}.image-save-header p{font-size:13px;line-height:1.7;margin:0;color:#536b86}.image-save-header button{flex-shrink:0}.image-save-dialog button,.image-save-actions a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 14px;border:1px solid #c7d7eb;border-radius:10px;background:#fff;color:#153e70;text-decoration:none;font:inherit;font-size:14px;cursor:pointer}.image-save-actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}.image-save-actions a{background:#1e56a0;color:#fff}.image-save-dialog img{display:block;width:100%;height:auto;background:#fff;border-radius:8px;-webkit-touch-callout:default;-webkit-user-select:auto;user-select:auto}.image-save-notice{font-size:14px;padding:10px;background:#e0ecff;border-radius:8px}.header-review{margin:18px 0;padding:20px;border:1px solid #bfcee4;border-radius:16px;background:#f1f6ff}.header-review h3{margin:0 0 8px;color:#163e70;font-size:18px}.header-review p,.header-review small{color:#566881;font-size:13px;line-height:1.6}.header-review button{min-height:44px;padding:9px 12px;border:1px solid #bbcee6;background:#fff;color:#153e70;border-radius:8px}.header-review .header-preset{background:#153e70;color:#fff;margin:6px 0 14px}.header-review-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:10px}.header-review-grid>div{display:grid;gap:6px;padding:12px;background:#fff;border:1px solid #d9e3f1;border-radius:10px}.header-review-grid .header-needs-review{border-color:#d56876}.header-review-grid label{display:grid;gap:8px;font-size:13px}.header-review-grid input{width:100%;min-height:44px;padding:8px;border:1px solid #bbcee6;border-radius:6px}.header-review-check{display:flex;gap:8px;margin-top:16px;font-size:13px;align-items:center}@media(max-width:860px){.app-shell{width:min(100% - 20px,660px);margin-top:10px}.topbar{padding:16px;border-radius:16px}.brand-mark{width:43px;height:43px;border-radius:12px}h1{font-size:23px}.export-all{min-height:40px;padding-inline:13px;font-size:12px}.month-badge{min-width:88px;font-size:20px}.tabs{overflow-x:auto}.tabs button{min-width:104px;padding-inline:12px}.search-layout,.upload-layout{grid-template-columns:1fr}.hero-card{padding:28px 24px}.result-panel{min-height:auto;padding:24px}.upload-layout{gap:18px;padding:26px}.drop-card{min-height:360px}.table-section{padding:22px 15px}.review-banner{align-items:flex-start;flex-direction:column}}@media(max-width:560px){.app-shell{width:100%;margin:0}.topbar{border-radius:0;align-items:flex-start}.brand-mark{display:none}.header-tools{gap:7px}.export-all{max-width:102px;line-height:1.25}.month-badge{min-width:76px;padding-inline:10px}.tabs{width:calc(100% - 20px);margin-inline:10px}.tabs button{flex:1;min-width:0}.hero-card,.result-panel,.upload-layout,.table-section{border-left:0;border-right:0;border-radius:0}.search-layout{gap:10px;margin-top:10px}.search-row{flex-direction:column}.search-row button{min-height:48px}.quick-names{max-height:170px}.summary-strip>div{padding:11px 9px}.result-heading,.table-heading{align-items:stretch;flex-direction:column}.result-heading .actions,.table-heading .actions{width:100%}.actions button{flex:1 1 30%;min-width:92px}.upload-layout{margin-top:10px}footer{padding:14px;flex-direction:column;gap:5px}}
