
:root{
  --bg:#FFFFFF; --card:#FFFFFF; --line:#ECECEC;
  --text:#2A2D34; --text2:#6B7078; --text3:#B0B4BC;
  --blue:#4A9FE0; --blue-bg:#E8F4FC;
  --green:#4A9FE0; --green-bg:#E8F4FC;
  --orange:#F5B942; --orange-bg:#FFF6E0;
  --red:#E88B8B; --red-bg:#FCEEEE;
  --yellow:#F5C842; --yellow-bg:#FFF8E0;
  --gray:#B0B4BC; --gray-bg:#F5F5F5;
  --radius:16px; --radius-s:10px;
}
.password-login-form{display:grid;gap:10px;margin-top:20px}
.password-login-form label{font-weight:600;font-size:14px}
.password-login-form input:not([type="hidden"]){width:100%;min-width:0;min-height:48px;padding:12px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:16px;background:#fff;color:var(--text)}
.password-login-form input:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.password-login-form .btn{margin-top:8px;min-height:48px}
.login-divider{text-align:center;color:var(--text2);font-size:13px;margin:18px 0}
.login-error{color:#A82620;background:#FFF1EF;padding:10px 12px;border-radius:10px;font-size:14px;overflow-wrap:anywhere}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{background:var(--bg)}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC","Helvetica Neue",Arial,sans-serif;color:var(--text);line-height:1.5;font-size:15px}
#app{max-width:520px;margin:0 auto;background:var(--bg);min-height:100vh;padding-bottom:env(safe-area-inset-bottom)}
.hidden{display:none!important}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:var(--radius-s);font-size:15px;font-weight:600;min-height:44px;padding:0 18px;cursor:pointer;font-family:inherit;transition:opacity .15s}
.btn:active{opacity:.82}
.btn-primary{background:linear-gradient(135deg,#4A9FE0,#6BB5EE);color:#fff;border-radius:14px;font-weight:600;box-shadow:0 4px 12px rgba(74,159,224,.25)}
.btn-secondary{background:#fff;color:var(--text);border:1px solid var(--line);border-radius:12px;font-weight:500}
.btn-ghost{background:var(--gray-bg);color:var(--text2)}
.btn-block{width:100%}
.toast{position:fixed;left:50%;bottom:70px;transform:translateX(-50%);background:rgba(29,33,41,.92);color:#fff;font-size:13px;padding:9px 16px;border-radius:20px;z-index:99;opacity:0;transition:opacity .25s;pointer-events:none;max-width:86vw;text-align:center}
.toast.show{opacity:1}
.action-feedback{position:fixed;z-index:200;top:calc(12px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100vw - 24px);display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:12px;background:#174e72;color:#fff;box-shadow:0 6px 24px #0003;font-size:15px;line-height:1.6;overflow-wrap:anywhere}
.action-feedback[hidden]{display:none}.action-feedback[data-state="success"]{background:#206345}.action-feedback[data-state="error"]{background:#963b36}
.action-dismiss{flex-shrink:0;border:0;background:transparent;color:inherit;font-size:24px;min-width:36px;min-height:36px;cursor:pointer}
.action-feedback[data-state="pending"]::before{content:"";flex-shrink:0;width:16px;height:16px;border:2px solid #ffffff66;border-top-color:#fff;border-radius:50%;animation:action-spin .9s linear infinite}
@keyframes action-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.action-feedback[data-state="pending"]::before{animation:none}}

/* ===== 顶部 ===== */
.header{background:#FFFFFF;color:var(--text);padding:24px 16px 12px;border-bottom:1px solid var(--line)}
.header .topline{display:flex;align-items:center;justify-content:space-between;gap:10px}
.header .brand{font-size:12px;color:var(--text3);font-weight:500}
.header .brand b{font-size:18px;display:block;letter-spacing:-.2px;color:var(--text);font-weight:700;margin-top:2px}
.header .datechip{background:#fff;border:1px solid var(--line);border-radius:20px;padding:5px 12px;font-size:12px;color:var(--text2);white-space:nowrap}
.idswitch{display:flex;align-items:center;gap:8px;margin-top:14px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:8px 10px}
.idswitch .lbl{font-size:11px;color:var(--text3);white-space:nowrap}
.idswitch select{flex:1;min-height:40px;border:none;border-radius:8px;background:#fff;color:var(--text);font-size:14px;padding:0 10px;font-family:inherit;outline:none;-webkit-appearance:none;appearance:none}
.page-tag{display:inline-flex;align-items:center;gap:5px;background:var(--blue-bg);color:var(--blue);border-radius:8px;padding:4px 10px;font-size:11px;font-weight:500;margin-top:10px}

/* ===== 通用卡片与标题 ===== */
.sec{margin:12px 10px 0}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:0 1px 3px rgba(0,0,0,.03)}
.sec-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.sec-title h2{font-size:15px;font-weight:600;letter-spacing:-.2px}
.sec-title .hint{font-size:12px;color:var(--text3);font-weight:400}
.sec-badge{font-size:11px;color:var(--blue);background:var(--blue-bg);padding:3px 8px;border-radius:12px;font-weight:600;white-space:nowrap}

/* ===== 区域① 概览 ===== */
.overview-title{font-size:14px;font-weight:700;color:var(--text2);display:flex;align-items:center;gap:6px;margin-bottom:10px}
.bigcards{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.bigcard{border-radius:var(--radius);padding:14px 14px 12px;border:1px solid var(--line);background:var(--card)}
.bigcard .num{font-size:34px;font-weight:700;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.bigcard .unit{font-size:13px;font-weight:600;margin-left:2px}
.bigcard .label{font-size:12px;color:var(--text3);margin-top:2px}
.bigcard.blue{background:linear-gradient(135deg,#E8F4FC,#D6EBF9);border-color:transparent}
.bigcard.blue .num{color:var(--blue)}
.bigcard.green{background:#FFF9E6;border-color:transparent}
.bigcard.green .num{color:var(--green)}
.minirow{display:flex;gap:8px;margin-top:10px}
.miniitem{flex:1;text-align:center;background:#F8F8F8;border:1px solid var(--line);border-radius:var(--radius-s);padding:8px 4px}
.miniitem .v{font-size:17px;font-weight:700}
.miniitem .k{font-size:11px;color:var(--text3);margin-top:1px}
.miniitem.done{background:var(--blue-bg)} .miniitem.done .v{color:var(--blue)}
.miniitem.pend{background:var(--orange-bg)} .miniitem.pend .v{color:var(--orange)}

/* ===== 汇总条 ===== */
.summary{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px}
.summary .ref{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.summary .ref .r1{font-size:14px;font-weight:700}
.summary .ref .r2{font-size:12px;color:var(--text3)}
.ref-bar{position:relative;height:10px;background:var(--gray-bg);border-radius:6px;overflow:hidden;margin-bottom:12px}
.ref-bar .fill{height:100%;border-radius:6px;background:linear-gradient(90deg,#B8DDF5,#4A9FE0);transition:width .4s}
.ref-bar .mark{position:absolute;top:-3px;width:2px;height:16px;background:var(--orange);border-radius:1px}
.sm-items{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sm-item{background:#F8F8F8;border:1px solid var(--line);border-radius:var(--radius-s);padding:10px 12px}
.sm-item .k{font-size:11px;color:var(--text3)}
.sm-item .v{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.sm-item .v.blue{color:var(--blue)} .sm-item .v.orange{color:var(--orange)} .sm-item .v.red{color:var(--red)}
.note-line{font-size:11px;color:var(--text3);margin-top:10px;padding:8px 10px;background:#FFF7E8;border-radius:var(--radius-s);border:1px solid #FFE4C8;line-height:1.5}

/* ===== 任务卡片 ===== */
.task{border:1px solid var(--line);border-radius:14px;padding:14px;background:var(--card);margin-bottom:10px}
.task .trow{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.task .tname{font-size:14px;font-weight:600;flex:1;line-height:1.4}
.task .tprod{font-size:12px;color:var(--text3);margin-top:2px}
.task .tright{flex-shrink:0;min-width:96px;text-align:right}
.status-chip{display:inline-block;font-size:11px;font-weight:500;border-radius:20px;padding:3px 10px;white-space:nowrap}
.status-done{background:var(--blue-bg);color:#4A9FE0;font-weight:600}
.status-todo{background:var(--orange-bg);color:var(--orange)}
.status-wait{background:var(--gray-bg);color:var(--text2)}
.status-red{background:var(--red-bg);color:var(--red)}
.task .tmeta{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:8px;font-size:12px;color:var(--text2)}
.task .tmeta span b{font-weight:600;color:var(--text)}
.task .ext{font-size:12px;color:var(--text2);margin-top:8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ext input,.ext select{min-height:40px;border:1px solid var(--line);border-radius:var(--radius-s);padding:0 8px;font-size:13px;font-family:inherit;outline:none;background:#fff;color:var(--text)}
.ext input:focus,.ext select:focus{border-color:var(--blue)}
.ext input{width:150px}
.optrow{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.opt{font-size:12px;border:1px solid var(--line);border-radius:20px;padding:6px 12px;cursor:pointer;background:#fff;color:var(--text2);min-height:34px;display:inline-flex;align-items:center;transition:all .15s}
.opt.on{background:linear-gradient(135deg,#4A9FE0,#6BB5EE);border-color:transparent;color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(74,159,224,.25)}
.tag-src{display:inline-block;font-size:10px;color:var(--text3);border:1px solid var(--line);border-radius:8px;padding:1px 6px;margin-left:6px;vertical-align:1px}
.tag-new{color:var(--orange);border-color:#FFD6A8;background:#FFF7E8}

/* ===== 其他有效工作 ===== */
.extra-head{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid #1869AD;border-radius:12px;background:#1869AD;color:#fff;list-style:none;cursor:pointer;min-height:64px;box-shadow:0 2px 5px rgba(24,105,173,.16)}
.extra-head:hover{background:#14588F;border-color:#14588F}
.extra-head:active{background:#114B7A}
.extra-head:focus-visible{outline:3px solid #1869AD;outline-offset:3px}
.extra-head::-webkit-details-marker{display:none}
.extra-toggle-icon{position:relative;flex:0 0 28px;width:28px;height:28px;border:1px solid rgba(255,255,255,.65);border-radius:50%}
.extra-toggle-icon::before,.extra-toggle-icon::after{content:"";position:absolute;background:#fff;border-radius:1px;top:12px;left:7px;width:12px;height:2px}
.extra-toggle-icon::after{transform:rotate(90deg)}
.extra-disclosure[open]>.extra-head .extra-toggle-icon::after{display:none}
.extra-toggle-copy{flex:1;min-width:0}
.extra-toggle-copy strong{display:block;font-size:16px;line-height:1.5;font-weight:700}
.extra-toggle-hint{display:block;margin-top:3px;font-size:12px;line-height:1.5;color:#fff}
.extra-toggle-state{flex:0 0 auto;font-size:13px;font-weight:600;white-space:nowrap}
.extra-when-open{display:none}
.extra-disclosure[open]>.extra-head .extra-when-open{display:inline}
.extra-disclosure[open]>.extra-head .extra-when-closed{display:none}
@media(max-width:400px){.extra-head{padding:12px;gap:10px}.extra-toggle-state{margin-left:38px;flex-basis:calc(100% - 38px)}.extra-toggle-copy strong{font-size:15px}}
.extra-form{margin-top:10px;border-top:1px dashed var(--line);padding-top:10px}
.xrow{border:1px solid var(--line);border-radius:var(--radius-s);padding:10px;margin-bottom:8px;background:#FBFBFC}
.xrow .xhead{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:6px}
.xrow .xhead .idx{font-size:12px;color:var(--text3);font-weight:600}
.xrow .xhead .del{font-size:12px;color:var(--red);background:none;border:none;min-height:32px;padding:0 6px;cursor:pointer}
.xrow .types{display:flex;flex-wrap:wrap;gap:6px}
.xrow .types .opt{font-size:12px;padding:5px 9px;min-height:30px}
.xrow .inrow{display:flex;gap:8px;margin-top:8px}
.xrow .inrow .fld{flex:1}
.xrow .inrow .fld label{display:block;font-size:11px;color:var(--text3);margin-bottom:2px}
.xrow .inrow input{width:100%;min-height:40px;border:1px solid var(--line);border-radius:var(--radius-s);padding:0 8px;font-size:13px;font-family:inherit;outline:none;background:#fff}
.xrow .inrow input:focus{border-color:var(--blue)}
.xrow textarea{width:100%;min-height:38px;border:1px solid var(--line);border-radius:var(--radius-s);padding:7px 8px;font-size:13px;font-family:inherit;outline:none;resize:vertical;background:#fff;margin-top:8px}
.xrow textarea:focus{border-color:var(--blue)}
.other-note{font-size:11px;color:var(--text3);margin-top:4px}
.addrow-btn{margin-top:2px}
.submit-row{margin-top:10px;display:flex;gap:8px;align-items:center}
.submit-row .btn{flex:1}
.xlist{margin-top:10px}
.xitem{display:flex;align-items:flex-start;gap:8px;border:1px solid var(--line);border-radius:var(--radius-s);padding:9px 10px;margin-bottom:6px;background:var(--card);font-size:13px}
.xitem .xi-body{flex:1;min-width:0}
.xitem .xi-type{font-weight:600}
.xitem .xi-meta{font-size:12px;color:var(--text3);margin-top:2px;line-height:1.5}
.xitem .xi-hours{font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums;white-space:nowrap}
.audit{display:flex;gap:6px;margin-top:6px}
.audit .ab{font-size:11px;border:1px solid var(--line);border-radius:12px;padding:4px 10px;cursor:pointer;background:#fff;color:var(--text2)}
.audit .ab.on-pass{background:var(--green);border-color:var(--green);color:#fff}
.audit .ab.on-rej{background:var(--red);border-color:var(--red);color:#fff}
.st-pass{color:var(--blue);font-weight:600}
.st-pend{color:var(--orange);font-weight:600}
.st-rej{color:var(--red);font-weight:600}

/* ===== 区域③ ===== */
.qrow{margin-bottom:12px}
.qrow .qlabel{font-size:13px;font-weight:600;margin-bottom:6px}
.qopts{display:flex;gap:10px}
.qopts .opt{flex:1;justify-content:center;min-height:44px;font-size:14px}
.qopts .opt.on-yes{background:var(--red-bg);border-color:var(--red);color:var(--red)}
.qopts .opt.on-no{background:var(--green-bg);border-color:var(--green);color:var(--green)}
.qrow textarea{width:100%;min-height:70px;border:1px solid var(--line);border-radius:var(--radius-s);padding:9px;font-size:14px;font-family:inherit;outline:none;resize:vertical;background:#fff}
.qrow textarea:focus{border-color:var(--blue)}
.weekly{border:1px solid var(--line);border-radius:var(--radius-s);background:var(--gray-bg);overflow:hidden}
.weekly .whead{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;cursor:pointer}
.weekly .whead .wt{font-size:13px;font-weight:600}
.weekly .whead .wstat{font-size:12px;font-weight:700}
.weekly .wbody{padding:0 12px 10px;font-size:12px;color:var(--text2)}
.weekly .wbody .wrow{display:flex;justify-content:space-between;padding:4px 0;border-top:1px solid var(--line)}
.weekly .wbody .wrow:first-child{border-top:none}
.stat-ok{color:var(--blue)} .stat-warn{color:var(--orange)} .stat-bad{color:var(--red)}
.wlevel{font-size:11px;margin-top:6px;color:var(--text3);line-height:1.6}

/* ===== 底部按钮 ===== */
.footer{position:sticky;bottom:0;background:rgba(245,245,243,.92);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:12px 16px calc(12px + env(safe-area-inset-bottom));display:flex;gap:10px;z-index:5}
.footer .btn{flex:1}
.confirm-state{text-align:center;font-size:12px;color:var(--text3);padding:2px 0 6px}
.confirm-state b{color:var(--blue)}
.empty{padding:18px;text-align:center;color:var(--text3);font-size:13px}
.banner-warn{background:var(--red-bg);border:1px solid #FFCACA;color:var(--red);border-radius:var(--radius-s);padding:10px 12px;font-size:13px;font-weight:600;margin:12px 10px 0}
.banner-warn small{display:block;font-weight:400;color:var(--text2);margin-top:3px;font-size:12px}

.alert-rej{background:#FEECEB;border:1px solid #F5B5B0;border-radius:12px;padding:12px 14px;margin-bottom:12px;}
.alert-head{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:#C0392B;cursor:pointer;}
.alert-dot{width:8px;height:8px;border-radius:50%;background:#E74C3C;flex:none;}
.alert-toggle{margin-left:auto;font-size:12px;font-weight:400;color:#C0392B;text-decoration:underline;}
.alert-body{margin-top:10px;padding-top:10px;border-top:1px dashed #F5B5B0;}
.alert-row{font-size:13px;color:#7B241C;line-height:1.6;margin-bottom:6px;}

.alert-y{background:#FFF6E0;border:1px solid #F5D28A;border-radius:12px;padding:12px 14px;margin-bottom:12px;}
.y-head{display:flex;gap:8px;font-size:13px;color:#8A6100;line-height:1.6;}
.y-dot{width:8px;height:8px;border-radius:50%;background:#F0A020;flex:none;margin-top:6px;}
.y-btn{margin-top:10px;width:100%;background:#F0A020;color:#fff;border:none;border-radius:8px;padding:9px;font-size:14px;font-weight:600;cursor:pointer;}


/* ===== 自适应布局：桌面舒展、手机分行填写 ===== */
:root{--text3:#7B8491}
html{-webkit-text-size-adjust:100%;background:#F5F7FA}
#app{width:100%;max-width:760px}
.header{padding:24px 20px 16px}
.sec{margin:20px 16px 0}
.card{padding:20px}
.sec-title,.overview-title,.header .topline{flex-wrap:wrap}
.sec-title h2{font-size:16px;line-height:1.5}
.sec-title .hint{line-height:1.5}
.summary .ref{flex-wrap:wrap;align-items:flex-start;gap:8px 16px}
.summary .ref .r2{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px}
.bigcards,.sm-items{grid-template-columns:repeat(2,minmax(0,1fr))}
.bigcard,.miniitem,.sm-item,.task .tname,.idswitch select{min-width:0}
.task .tname,.task .tprod,.xi-meta,.alert-row{overflow-wrap:anywhere}
.task .tright{min-width:0;max-width:48%}
.status-chip{max-width:100%;white-space:normal;overflow-wrap:anywhere}
.task .tmeta{gap:6px 14px}
.optrow .opt{min-height:40px}
.extra-head .btn{flex-shrink:0}
.xrow{padding:14px;margin-bottom:12px}
.xrow .xhead .idx{font-size:14px;color:var(--text2)}
.xrow .inrow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.85fr) minmax(0,1.2fr);gap:12px}
.xrow .inrow .fld{min-width:0}
.xrow .inrow .fld label{font-size:12px;margin-bottom:6px}
.xrow .inrow input{display:block;min-width:0;max-width:100%;height:46px;padding:0 10px;font-size:16px;color:var(--text)}
.xrow .inrow input[type="date"]{appearance:none;-webkit-appearance:none}
.xrow .inrow input[type="date"]::-webkit-date-and-time-value{text-align:left;min-height:1.5em}
.xrow .inrow input::placeholder{color:var(--text3);font-size:14px}
.other-note{margin-top:8px;line-height:1.6}
.submit-row .btn{min-height:48px}
.qrow{margin-bottom:18px}
.qrow .qlabel{font-size:14px;margin-bottom:8px}
.qopts .opt{font-family:inherit;min-width:0;min-height:46px;border-radius:12px}
.qopts .opt.on-no{background:#E8FFEA;border-color:#00B42A;color:#008A20}
.qopts .opt.on-yes{background:#FFECE8;border-color:#F53F3F;color:#C93636}
.qrow textarea{font-size:16px;min-height:96px}
.weekly{background:#F5F6F8}
.weekly .whead{width:100%;border:0;background:transparent;color:inherit;font-family:inherit;text-align:left;flex-wrap:wrap;gap:8px 12px;min-height:48px}
.weekly .whead:hover{background:#EDF3FA}
.weekly .whead:focus-visible{outline:2px solid #1869AD;outline-offset:-3px}
.week-status{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:6px 10px;margin-left:auto}
.week-toggle{display:inline-flex;align-items:center;padding:5px 10px;border:1px solid #B8D4EF;border-radius:6px;background:#fff;font-size:12px;color:#1869AD;font-weight:600;white-space:nowrap}
.weekly .week-when-open{display:none}
.weekly[open] .week-when-open{display:inline}
.weekly[open] .week-when-closed{display:none}
.weekly .wbody .wrow{gap:12px;padding:8px 0;align-items:flex-start}
.weekly .wbody .wrow span{min-width:0;overflow-wrap:anywhere}
.weekly .wbody .wrow b{flex-shrink:0;white-space:nowrap;font-variant-numeric:tabular-nums}
.weekly .stat-ok{color:#008A20}.weekly .stat-warn{color:#986700}.weekly .stat-bad{color:#D43535}
.wlevel{line-height:1.8}
.workdays-field{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 12px;padding:12px 0;border-bottom:1px solid var(--line);margin-bottom:4px}
.workdays-field label{font-size:13px;color:var(--text);font-weight:600}
.workdays-field label span{display:block;font-size:11px;color:var(--text3);font-weight:400}
.workdays-input{display:flex;align-items:center;gap:8px}
.workdays-input input,.workdays-input select{width:100px;min-width:0;min-height:44px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font:inherit;font-size:16px;background:#fff;color:var(--text)}
.workdays-input{flex-wrap:wrap}.workdays-field{grid-template-columns:minmax(0,1fr)}
.workdays-hint{grid-column:1 / -1;font-size:11px;line-height:1.7;color:var(--text3)}
.footer{width:100%;max-width:760px;margin:0 auto;padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.96)}
.footer .btn{min-width:0;padding:0 10px;min-height:48px}
.confirm-state{padding:12px 0 4px}
.alert-toggle{flex-shrink:0}
button:focus-visible,.opt:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--blue);outline-offset:3px}
@media(max-width:600px){
  .header{padding:20px 16px 14px}
  .sec{margin:16px 12px 0}
  .card{padding:14px}
  .xrow{padding:12px}
  .xrow .inrow{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:12px 10px}
  .xrow .inrow .fld-note{grid-column:1 / -1}
  .summary .ref{flex-direction:column}
  .sec-title{align-items:flex-start;gap:4px 10px}
  .sec-title .hint{font-size:11px}
  .idswitch select,.ext input,.ext select{font-size:16px}
  .task .ext input{max-width:100%;min-width:0!important}
  .task .ext .note-line{flex:1 1 100%!important}
  .footer{padding-left:12px;padding-right:12px}
}
@media(max-width:359px){
  .xrow .inrow{grid-template-columns:minmax(0,1fr)}
  .xrow .inrow .fld-note{grid-column:auto}
  .bigcard{padding:12px 10px}
  .bigcard .num{font-size:28px}
  .task .trow{flex-direction:column;gap:8px}
  .task .tright{max-width:100%;text-align:left}
}


/* Flask 一体化页面 */
a{color:#287CB8;text-decoration:none}a:hover{text-decoration:underline}
fieldset{border:0;min-width:0;padding:0;margin:0}
input,select,textarea,button{font-family:inherit}input,select,textarea{max-width:100%}
button:disabled,fieldset:disabled .choice{opacity:.55;cursor:not-allowed}
[hidden]{display:none!important}
h1{font-size:21px;line-height:1.5;margin-bottom:10px}h2{font-size:16px}h3{font-size:14px;margin:14px 0 10px}
.userbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-top:18px;font-size:14px}
.nav-actions{display:flex;gap:12px;align-items:center;font-size:12px}
.text-button{background:none;border:0;color:var(--text2);cursor:pointer;font-size:12px;min-height:36px}
.message,.environment-note{margin:12px 16px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.7;background:var(--blue-bg);overflow-wrap:anywhere}
.message.error{background:#FFF0ED;color:#A53932;border:1px solid #F1C5BE}.message.success{background:#E9F8EE;color:#26743B}
.environment-note{background:#FFF7DE;color:#87601A}
.page-footnote{font-size:11px;color:var(--text3);padding:20px 16px 26px;text-align:center}
.login-card{padding:28px 22px}.login-card p{color:var(--text2);margin:12px 0 24px}.login-card label{display:block;font-size:13px;color:var(--text2);margin-bottom:6px}.login-card select{width:100%;padding:12px;margin-bottom:16px;font-size:16px;border:1px solid var(--line);border-radius:10px}
.date-picker{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px}.date-picker input{min-width:0;width:170px;min-height:44px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;font-size:16px;background:white;color:var(--text)}
.hours-progress{width:100%;height:10px;margin-bottom:12px;border:0;border-radius:8px;overflow:hidden;accent-color:var(--blue)}
.hours-progress::-webkit-progress-bar{background:var(--gray-bg)}.hours-progress::-webkit-progress-value{background:var(--blue)}
.task-section-title{margin-top:18px}
fieldset.task{border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:10px}
.choice{position:relative;display:inline-flex;cursor:pointer;min-width:0}.choice input{position:absolute;opacity:0;width:1px;height:1px}.choice span{display:flex;align-items:center;justify-content:center;min-height:40px;padding:7px 12px;border:1px solid var(--line);border-radius:20px;font-size:12px;line-height:1.5;color:var(--text2);background:white}
.choice input:checked+span{background:var(--blue-bg);border-color:var(--blue);color:#287CB8;font-weight:600}.choice input:focus-visible+span{outline:2px solid var(--blue);outline-offset:3px}
.qopts .choice{flex:1}.qopts .choice span{width:100%;min-height:46px;border-radius:12px;font-size:14px}.answer input[value="无"]:checked+span{background:#E8FFEA;border-color:#00B42A;color:#008A20}.answer input[value="有"]:checked+span{background:#FFECE8;border-color:#F53F3F;color:#C93636}
.task-detail{margin-top:12px;display:grid;gap:6px;font-size:12px}.task-detail input{width:100%;min-width:0;padding:10px;font-size:16px;border:1px solid var(--line);border-radius:10px;background:white}.task-detail small{color:var(--text3)}
.delivered{background:#FFF9E6;border-color:#FFE8A8}.form-hint{font-size:12px;color:var(--text3);line-height:1.7;margin:8px 0 14px}
.extra-form .btn{min-height:48px}.xrow .inrow input{width:100%}
.rejection-reason{font-size:12px;color:#B84B40;margin:7px 0}.legacy-block{margin:12px 0;font-size:12px}.legacy-block pre,.legacy-text{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.7}
.weekly summary{list-style:none}.weekly summary::-webkit-details-marker{display:none}.weekly .wstat{color:var(--text2)}.weekly .wstat.stat-ok{color:#008A20}.weekly .wstat.stat-warn{color:#986700}.weekly .wstat.stat-bad{color:#B94A36}
#anomaly-detail textarea{margin-top:10px;width:100%;min-height:96px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.supplement-controls{padding:12px 0;font-size:12px;color:var(--text2);line-height:1.7}
.supplement-controls p{margin-bottom:8px;overflow-wrap:anywhere}
.supplement-controls .btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;text-decoration:none}
.section-warning{padding:10px 12px;margin:10px 0;border-radius:8px;background:#FFF7DE;color:#87601A;font-size:12px;line-height:1.7;overflow-wrap:anywhere}
.section-warning ul{padding-left:18px}.section-warning summary{cursor:pointer}
[data-supplement][data-state="error"] .supplement-controls p{color:#A53932}
/* Loading feedback stays in this stylesheet to respect style-src 'self'. */
[data-supplement][aria-busy="true"] .supplement-controls{min-height:72px;border-radius:10px;background:linear-gradient(90deg,#f1f3f6 25%,#e6eaf0 37%,#f1f3f6 63%);background-size:400% 100%;animation:supplement-loading 1.2s ease infinite}
[data-supplement][aria-busy="true"] [data-load-message]{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
@keyframes supplement-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}
@media(prefers-reduced-motion:reduce){[data-supplement][aria-busy="true"] .supplement-controls{animation:none}}
.date-picker [aria-disabled="true"]{opacity:.65;cursor:wait}
.date-picker .date-view-button{flex:0 0 auto;min-width:76px;min-height:44px;padding:10px 18px;background:#1769b3;color:#fff;font-size:16px;font-weight:700;box-shadow:0 3px 8px rgba(23,105,179,.22)}
.date-picker .date-view-button:hover{background:#12558f}
.date-picker .date-view-button:focus-visible{outline:3px solid #1769b3;outline-offset:3px}
.ops-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(100px,150px) auto;align-items:center;gap:16px}.ops-input label{font-size:12px;display:block;margin-bottom:6px}.ops-input input,.ops-input select{width:100%;min-width:0;min-height:44px;border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:16px}.error-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
@media(max-width:600px){.message,.environment-note{margin-left:12px;margin-right:12px}.ops-form{grid-template-columns:minmax(0,1fr) minmax(100px,130px);gap:12px}.ops-form .btn{grid-column:1/-1}.date-picker{gap:8px}.date-picker input{flex:1}.extra-head{flex-wrap:wrap}.choice span{padding:7px 10px}}

/* 手机页头：标题/日期一行，姓名/操作一行，避免按钮高度造成错位。 */
.schedule-dialog{width:min(480px,calc(100% - 32px));max-height:80vh;overflow:auto;border:1px solid var(--line);border-radius:16px;padding:20px;color:var(--text);box-sizing:border-box;overflow-wrap:anywhere}
.schedule-dialog::backdrop{background:rgba(0,0,0,.35)}
.schedule-alert,.schedule-month{margin:12px 16px}
.schedule-dialog ul{padding-left:20px;line-height:1.7}.schedule-dialog form{text-align:right;margin-top:16px}
@media(max-width:600px){
  .header{padding:16px 16px 10px}
  .header .topline{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px}
  .header .brand{min-width:0;overflow-wrap:anywhere}
  .header .brand b{margin-top:0;line-height:1.5}
  .header .datechip{padding:4px 10px;line-height:18px;font-variant-numeric:tabular-nums}
  .header .userbar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;margin-top:10px}
  .header .userbar>span{min-width:0;overflow-wrap:anywhere}
  .header .nav-actions{justify-content:flex-end;gap:12px;white-space:nowrap}
  .header .nav-actions form{display:flex;align-items:center;margin:0}
  .header .text-button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 4px;line-height:1.5}
}
