:root{--ink:#262624;--accent:#325a71;--muted:#5f5d58;--line:#e7e5e0;--surface:#f3f2ef;--amber:var(--qf-amber);--red:#ad3f3b;font-family:Arial,'PingFang SC','Microsoft YaHei',sans-serif;color:var(--ink);background:var(--surface);font-size:16px}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:7px;padding:10px 15px}button:hover{background:#edf1f3}button:disabled{cursor:wait;opacity:.5}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.danger{color:var(--red)}a{color:var(--accent)}input,select,textarea{border:1px solid #d8d5ce;border-radius:6px;padding:11px;background:white;color:var(--ink);width:100%;min-width:0}textarea{min-height:90px;resize:vertical}input:focus-visible,button:focus-visible,a:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #c5d3db;outline-offset:3px}label{display:block;font-size:13px;margin-bottom:18px}label input,label select,label textarea{margin-top:7px}h1,h2,h3,p{margin:0}h1{font-size:28px;font-weight:600}h2{font-size:20px}h3{font-size:15px}p{line-height:1.8}.muted,small{color:var(--muted)}small{font-size:12px}.brand{font-size:20px;letter-spacing:3px;font-weight:600}.brand span{font-size:13px;letter-spacing:1px;display:block;color:var(--qf-ink-3);margin-top:8px}.login{display:grid;grid-template-columns:1fr 1fr;min-height:100vh}.login-intro{background:#262624;color:white;padding:12vh 12%;display:flex;flex-direction:column;justify-content:space-between}.login-intro h1{font-size:clamp(2rem,4vw,3.5rem);line-height:1.55;margin:50px 0 24px}.login-intro p{color:#d8d5ce}.login-form{max-width:470px;width:100%;padding:70px 35px;align-self:center;justify-self:center}.login-form h2{font-size:24px;margin-bottom:12px}.login-form>p{margin-bottom:30px}.login-form button{width:100%}.trial{font-size:12px;border:1px solid #d8d5ce;padding:10px 14px;line-height:1.7;margin:24px 0;color:var(--muted);border-radius:6px}.shell{display:grid;grid-template-columns:230px 1fr;min-height:100vh}.sidebar{background:#262624;color:#fff;padding:30px 20px;display:flex;flex-direction:column;gap:40px}.sidebar .brand{padding:0 12px}.sidebar nav{display:grid;gap:9px}.sidebar button{background:transparent;color:#d8d5ce;border-color:transparent;text-align:left;padding:13px 17px}.sidebar button.active{background:#325a71;color:white}.sidebar .bottom{margin-top:auto;padding:10px;font-size:13px;color:var(--qf-ink-3);line-height:1.9}.sidebar a{color:#d8d5ce}.workspace{min-width:0}.topbar{padding:18px 4%;background:#fff;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:13px}.main{padding:35px 4% 60px}.heading,.toolbar{display:flex;gap:20px;justify-content:space-between;align-items:center;margin-bottom:28px}.heading p{margin-top:8px;color:var(--muted)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:28px}.stat{padding:22px;background:#fff;border:1px solid var(--line);border-radius:9px}.stat strong{font-size:30px;display:block;margin-top:10px}.stat span{font-size:13px;color:var(--muted)}.panel{background:#fff;border:1px solid var(--line);border-radius:10px;padding:25px;margin-bottom:22px}.panel-title{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:22px}.toolbar input{max-width:350px}.toolbar select{width:auto;min-width:140px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;text-align:left;white-space:nowrap}th{font-size:12px;color:var(--muted);font-weight:500;background:#f7f7f5}td,th{padding:16px 13px;border-bottom:1px solid var(--line)}td{font-size:14px}td .title{font-weight:600;background:none;border:none;padding:0;text-align:left;color:var(--accent)}td small{display:block;margin-top:6px}.pill{display:inline-block;background:#edf1f3;color:#3f6c86;border-radius:4px;padding:4px 8px;font-size:12px;white-space:nowrap}.pill.paused,.pill.review{background:#f7f0e2;color:var(--amber)}.pill.terminated{background:#f8eceb;color:var(--red)}.pill.queued,.pill.draft{background:#e7e5e0;color:#5f5d58}.empty{text-align:center;padding:65px 15px;color:var(--muted)}.empty h2{color:var(--ink);margin-bottom:12px}.empty button{margin-top:25px}.actions{display:flex;flex-wrap:wrap;gap:10px}.project-meta{display:flex;flex-wrap:wrap;gap:12px 30px;color:var(--muted);font-size:14px;margin-top:18px}.node{padding:22px 0;border-top:1px solid var(--line)}.node-head{display:flex;justify-content:space-between;gap:20px;align-items:center}.node-head h3{font-size:17px}.node p{margin:10px 0}.node .actions{margin-top:14px}.node-number{display:inline-flex;width:29px;height:29px;justify-content:center;align-items:center;background:#edf1f3;border-radius:50%;margin-right:12px;font-size:13px}.files{display:flex;flex-wrap:wrap;gap:12px;font-size:13px;margin-top:12px}.submission{border-left:3px solid #d8d5ce;padding:12px 18px;margin:16px 0;background:#f7f7f5;white-space:pre-wrap}.log{padding:12px 0;border-bottom:1px solid var(--line);font-size:13px;overflow-wrap:anywhere}.log small{display:block}.alert{background:#f7f0e2;color:var(--qf-amber);padding:15px 20px;border-radius:7px;margin:18px 0;font-size:14px}dialog{border:1px solid var(--line);border-radius:12px;padding:30px;width:min(760px,94vw);max-height:90vh;color:var(--ink)}dialog::backdrop{background:#26262499}dialog h2{margin-bottom:22px}dialog .actions{justify-content:flex-end;margin-top:24px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.node-input{background:#f7f7f5;border:1px solid var(--line);border-radius:7px;padding:18px;margin:15px 0}.node-input .form-grid{grid-template-columns:repeat(3,1fr)}.node-input label{font-size:12px;margin-bottom:10px}#notice{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);max-width:90vw;background:#262624;color:white;padding:15px 22px;border-radius:8px;z-index:10;display:none}.loading{padding:60px}.error-text{color:var(--red);margin:12px 0}.migration{font-size:13px;color:var(--muted);padding-top:20px;line-height:1.9}@media(max-width:1000px){.shell{grid-template-columns:180px 1fr}.sidebar{padding:25px 12px}.stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.login{grid-template-columns:1fr}.login-intro{padding:35px 8%}.login-intro h1{font-size:30px;margin:24px 0 12px}.login-intro .brand{font-size:15px}.login-form{padding:35px 25px}.shell{grid-template-columns:1fr}.sidebar{padding:20px;gap:20px}.sidebar nav{display:flex;flex-wrap:wrap;gap:4px}.sidebar button{padding:9px 12px}.sidebar .bottom{display:none}.sidebar .brand span{display:inline;margin-left:15px}.main{padding:25px 5%}.topbar{padding:15px 5%}.heading{align-items:flex-start;flex-direction:column;gap:16px}.panel{padding:18px}.toolbar{flex-wrap:wrap;gap:12px}.toolbar input{max-width:none}.form-grid,.node-input .form-grid{grid-template-columns:1fr}.node-head{align-items:flex-start}.stats{gap:10px}.stat{padding:17px}.project-meta{gap:8px 18px}dialog{padding:22px}.actions button{font-size:13px}}
/* Restrained workspace: neutral surfaces, one navy accent, no decorative effects. */
:root{--ink:#262624;--muted:#5f5d58;--line:#e7e5e0;--surface:#f3f2ef;--accent:#325a71}
.sidebar{background:#fff;color:var(--ink);border-right:1px solid var(--line);gap:36px}
.sidebar .brand{font-size:17px;letter-spacing:1px}.sidebar .brand span{color:var(--muted);font-size:12px;letter-spacing:0}
.sidebar button{color:#5f5d58;padding:12px 16px}.sidebar button:hover{background:#f3f2ef}.sidebar button.active{background:#edf1f3;color:#325a71;font-weight:600}
.sidebar .bottom,.sidebar a{color:var(--muted)}.topbar{min-height:72px}.topbar>span:last-child{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.topbar button{padding:7px 10px;font-size:12px}
.main{max-width:1600px;margin:0 auto;padding-top:36px}.heading{margin-bottom:24px}h1{font-size:26px;letter-spacing:-.02em}.panel{border-radius:8px;padding:24px;box-shadow:none}
.stats{gap:12px}.stat{border-radius:7px;min-width:0;padding:20px}.stat strong{font-size:clamp(1.15rem,2.2vw,1.8rem);font-weight:600;letter-spacing:-.02em;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.stat span{line-height:1.6}
th{font-size:13px;background:#f7f7f5}td,th{padding:15px 12px}.node-number{border-radius:5px;background:#edf1f3;color:var(--muted)}.node-head{gap:12px}.node-head h3{line-height:1.65}
.standard{color:var(--ink);font-size:14px;line-height:1.8}.standard span{color:var(--muted);display:block;font-size:12px}.rule-row{padding:18px 0;border-bottom:1px solid var(--line)}.rule-row>span{font-size:12px;color:var(--muted);margin-left:16px}.rule-row p{margin:6px 0}summary{cursor:pointer;color:var(--accent);font-size:13px;padding:12px 0}details{margin-top:12px}
@media(max-width:700px){.sidebar{border-right:0;border-bottom:1px solid var(--line);padding:18px 5%;gap:16px}.sidebar nav{flex-wrap:nowrap;overflow-x:auto;padding-bottom:3px}.sidebar nav button{flex-shrink:0;white-space:nowrap;padding:9px 12px}.topbar{align-items:flex-start;gap:12px;flex-wrap:wrap}.topbar>span:last-child{font-size:12px}.panel{padding:16px}.main{padding-top:24px}.stat{padding:15px}.stat strong{font-size:20px}.node-head h3{font-size:15px}.rule-row>span{display:block;margin:5px 0}.heading p{font-size:13px}.toolbar label{width:100%;margin-bottom:0}}
.compact-node{margin:0;border-top:1px solid var(--line)}.compact-node>summary{display:flex;justify-content:space-between;align-items:center;gap:15px;list-style:none;padding:20px 0;color:var(--ink);font-size:14px}.compact-node>summary>span:first-child:before{content:'›';display:inline-block;width:20px;color:var(--muted)}.compact-node[open]>summary>span:first-child:before{content:'⌄'}.compact-node>.node{border-top:0;padding-top:0}.main>.actions{margin-bottom:18px}
.sidebar,.sidebar nav{min-width:0}@media(max-width:700px){.shell{grid-template-columns:minmax(0,1fr)}.panel-title{flex-wrap:wrap}.heading>div{min-width:0;max-width:100%}h1{overflow-wrap:anywhere}}
.history-fields{margin:20px 0}.history-fields>div{display:grid;grid-template-columns:170px minmax(0,1fr);border-bottom:1px solid var(--line);gap:16px;padding:12px 0;font-size:13px}.history-fields dt{color:var(--muted)}.history-fields dd{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}@media(max-width:700px){.history-fields>div{grid-template-columns:1fr;gap:6px}}
.migration-issues{max-height:420px;margin-top:16px}.migration-issues thead{position:sticky;top:0;background:#fff;z-index:1}

/* Daily work overview shares the existing project and task data. */
.section-kicker{font-size:13px;margin-bottom:8px;color:var(--muted)}
.overview-stats .stat{text-align:left;position:relative}.overview-stats .stat small{position:absolute;right:18px;bottom:22px}
.overview-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:22px}.overview-grid>.panel{min-width:0}
.work-row{display:flex;align-items:center;justify-content:space-between;gap:18px;text-align:left;width:100%;border:0;border-top:1px solid var(--line);border-radius:0;padding:18px 0;background:transparent}.work-row:hover{background:#f7f7f5}.work-row strong{font-size:14px;line-height:1.7;font-weight:600}.work-row>span:first-child{min-width:0;overflow-wrap:anywhere}.row-context{display:block;font-size:13px;color:var(--muted);line-height:1.7;margin-top:5px}.row-end{display:grid;gap:8px;justify-items:end;flex-shrink:0}.overdue{color:var(--red)}.quiet{border:0;padding:6px 0;background:transparent;font-size:13px;color:var(--accent)}.overview-links{display:flex;align-items:center;justify-content:space-between;gap:20px}.overview-links p{margin-top:8px;font-size:13px}
@media(max-width:1000px){.overview-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:700px){.overview-links{align-items:flex-start;flex-direction:column}.overview-stats .stat small{position:static;display:block;margin-top:8px}.work-row{gap:10px}.row-end{max-width:45%}.overview-grid{gap:0}}

.task-tabs{display:flex;gap:8px;margin:0 0 20px;flex-wrap:wrap}.task-tabs button[aria-pressed=true]{color:var(--accent);background:#edf1f3;border-color:#d8d5ce}.project-summary h2{margin-top:10px;line-height:1.7}.summary-fields{display:flex;gap:24px 48px;flex-wrap:wrap;margin-top:20px}.summary-fields span{display:block;font-size:13px;color:var(--muted);margin-bottom:8px}.summary-fields strong{font-size:15px;font-weight:500}

.wecom-login{display:block;text-align:center;padding:12px;margin:20px 0;border:1px solid var(--line);border-radius:6px;text-decoration:none;background:#edf1f3}

#upload-progress progress{display:block;width:100%;height:8px;accent-color:#325a71;margin-top:16px}#upload-progress p{font-size:14px;color:#5f5d58}

/* Long project titles and report names must stay inside the mobile workspace. */
.node-head>h3,.node-head>div,.compact-node summary>span:first-child{min-width:0;overflow-wrap:anywhere}
.node-head>.pill,.compact-node summary>.pill{flex-shrink:0}
.project-summary h2,.summary-fields strong,.node p,.submission,.files a,.project-meta span{overflow-wrap:anywhere}
.files>a{min-width:0;max-width:100%}
@media(max-width:700px){dialog{max-height:90dvh;overflow-y:auto}.node-head{gap:12px}.compact-node summary{gap:12px}}

.history-archive p,.history-archive a{overflow-wrap:anywhere;white-space:pre-wrap}

.sidebar .publication-nav{display:block;padding:12px 16px;color:inherit;font-size:16px;text-decoration:none;border-radius:6px}.sidebar .publication-nav:hover{background:#edf1f3;color:#325a71}

/* Apple-inspired workspace. Presentation only; access remains server-controlled. */
:root {
 --ink:#262624; --accent:#3f6c86; --muted:#5f5d58; --line:#e7e5e0;
 --surface:#f3f2ef; --amber:var(--qf-amber); --red:#ad3f3b;
 font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
 font-optical-sizing:auto; line-height:1.6; color-scheme:light;
}
h1 { font-size:clamp(1.65rem,2.4vw,2.25rem); line-height:1.28; font-weight:650; letter-spacing:-.035em; }
h2 { font-size:20px; font-weight:600; letter-spacing:-.015em; line-height:1.45; }
h3 { line-height:1.5; }
button { min-height:2.75rem; border-radius:12px; padding:.625rem 1rem; transition:background 140ms ease-out,box-shadow 140ms ease-out,transform 140ms ease-out; }
button:not(:disabled):active { transform:scale(.98); transition-duration:70ms; }
button.primary { border-radius:999px; background:var(--accent); box-shadow:0 2px 4px #3f6c8614; }
button.primary:hover { background:#325a71; }
button:disabled { cursor:not-allowed; }
button.danger { background:#f8eceb; border-color:#f8eceb; }
input,select,textarea { border-radius:12px; border-color:#d8d5ce; min-height:2.75rem; padding:.7rem .8rem; box-shadow:0 1px 2px #26262403; }
input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,a:focus-visible,summary:focus-visible { outline:3px solid #3f6c86; outline-offset:3px; }
label { line-height:1.6; color:#5f5d58; font-weight:500; }
.shell { grid-template-columns:246px minmax(0,1fr); }
.sidebar { position:sticky; top:0; height:100dvh; overflow-y:auto; padding:2rem 1rem 1rem; gap:2rem; background:rgb(247 247 245 / .92); backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px); border-color:#e7e5e0; }
.sidebar .brand { position:relative; padding:.15rem 0 .15rem 3.5rem; letter-spacing:0; font-size:17px; line-height:1.4; }
.sidebar .brand::before { content:'QF'; position:absolute; left:.3rem; top:0; display:grid; place-items:center; width:2.5rem; height:2.5rem; border-radius:12px; background:var(--accent); color:#fff; font-size:17px; letter-spacing:-.06em; }
.sidebar .brand span { font-size:12px; margin-top:4px; }
.sidebar nav { gap:4px; }
.sidebar button,.sidebar .publication-nav { border-radius:12px; padding:.65rem 1rem; font-size:13px; min-height:2.75rem; display:flex; align-items:center; text-decoration:none; color:#5f5d58; }
.sidebar button.active { background:#e7e5e0; color:#3f6c86; box-shadow:inset 0 0 0 1px #3f6c8608; }
.sidebar .publication-nav:first-of-type { margin-top:1.25rem; }
.sidebar .bottom { padding:1rem; font-size:12px; }
.topbar { background:rgba(255,255,255,.82); min-height:76px; border-bottom:1px solid #e7e5e0; padding:1rem 4%; gap:1rem; }
.topbar>span:first-child { color:var(--muted); font-size:12px; }
.topbar button { background:#f3f2ef; border-color:transparent; padding:.5rem .8rem; }
.main { max-width:1540px; padding:2.5rem 4% 4rem; }
.heading { margin-bottom:2rem; gap:1.25rem; }
.heading p { margin-top:.65rem; line-height:1.7; }
.section-kicker { font-size:12px; letter-spacing:.025em; color:#3f6c86; margin-bottom:.6rem; }
.stats { gap:1rem; margin-bottom:1.75rem; }
.stat { border:1px solid #e7e5e0; border-radius:22px; padding:1.5rem; background:white; box-shadow:0 3px 16px #26262403; }
.stat strong { font-size:clamp(1.5rem,2.8vw,2.35rem); font-weight:600; line-height:1.25; margin-top:.8rem; letter-spacing:-.04em; font-variant-numeric:tabular-nums; }
.stat span { font-size:12px; }
.overview-stats .stat small { color:var(--accent); right:1.5rem; bottom:1.7rem; }
.panel { border:1px solid #e7e5e0; border-radius:24px; padding:1.75rem; margin-bottom:1.5rem; box-shadow:0 3px 18px #26262403; }
.panel-title { margin-bottom:1.25rem; gap:1rem; }
.table-wrap { border-radius:14px; }
th { background:#f3f2ef; color:#5f5d58; font-size:12px; padding:1rem; }
td { padding:1rem; } td .title { min-height:2.75rem; max-width:100%; }
.table-wrap td { border-color:#e7e5e0; }
.pill { border-radius:999px; padding:.3rem .65rem; font-size:12px; font-weight:500; }
.pill.active,.pill.working { background:#edf1f3; color:#3f6c86; }
.pill.archived,.pill.done { background:#ebf3ee; color:#3b7553; }
.node-number { border-radius:10px; background:#edf1f3; color:#3f6c86; }
.node { padding:1.5rem 0; }
.submission { border-radius:0 12px 12px 0; background:#f7f7f5; padding:1rem 1.25rem; }
.alert,.trial { border-radius:14px; padding:1rem 1.25rem; }
.node-input { border-radius:16px; background:#f7f7f5; padding:1.25rem; }
.task-tabs { gap:6px; padding:5px; background:#e7e5e0; border-radius:16px; width:fit-content; max-width:100%; }
.task-tabs button { border-color:transparent; background:transparent; font-size:13px; min-height:2.5rem; }
.task-tabs button[aria-pressed=true] { background:#fff; color:var(--accent); border-color:transparent; box-shadow:0 2px 6px #2626240c; }
.work-row { padding:1.25rem .25rem; border-radius:0; box-shadow:none; }
.quiet { color:var(--accent); border-radius:10px; padding:.4rem .5rem; }
.empty { padding:4rem 1.25rem; }
dialog { border:1px solid #e7e5e0; border-radius:26px; padding:2rem; box-shadow:0 24px 80px #26262426; background:#fff; }
dialog::backdrop { background:#26262450; }
dialog h2 { font-size:22px; letter-spacing:-.025em; }
#notice { border-radius:16px; background:#325a71; box-shadow:0 8px 28px #26262422; line-height:1.6; }
.login { background:#f3f2ef; }
.login-intro { background:#edf1f3; color:var(--ink); padding:10vh 12%; }
.login-intro .brand { color:var(--accent); letter-spacing:1px; }
.login-intro .brand span { color:#3f6c86; font-size:12px; }
.login-intro h1 { font-size:clamp(2rem,3.6vw,3.4rem); font-weight:650; letter-spacing:-.04em; line-height:1.35; }
.login-intro p { color:#5f5d58; }
.login-form { background:#fff; border:1px solid #e7e5e0; border-radius:28px; padding:2.5rem; margin:2rem; width:calc(100% - 4rem); box-shadow:0 12px 48px #26262405; }
.login-form h2 { font-size:26px; letter-spacing:-.03em; }
.wecom-login { border-radius:14px; background:#edf1f3; color:var(--accent); padding:.85rem; }
@media(hover:hover) {
 button.stat:hover { background:#fbfcfe; box-shadow:0 6px 22px #2626240c; transform:translateY(-2px); }
 button.stat:active { transform:scale(.98); }
 .sidebar button:hover,.sidebar .publication-nav:hover { background:#edf1f3; color:#3f6c86; }
 .work-row:hover { background:#f7f7f5; }
}
@media(max-width:1100px) { .shell { grid-template-columns:210px minmax(0,1fr); } .sidebar { padding-inline:.75rem; } .panel { padding:1.4rem; } }
@media(max-width:700px) {
 .shell { grid-template-columns:minmax(0,1fr); }
 .sidebar { position:static; height:auto; padding:1rem 5% .65rem; gap:1rem; backdrop-filter:none; -webkit-backdrop-filter:none; background:#fbfbfd; }
 .sidebar .brand { padding-left:3.5rem; min-height:2.5rem; }
 .sidebar .brand span { display:block; margin-left:0; }
 .sidebar nav { padding-bottom:.35rem; gap:5px; }
 .sidebar nav button,.sidebar .publication-nav { flex:0 0 auto; white-space:nowrap; min-height:2.75rem; }
 .sidebar .publication-nav:first-of-type { margin-top:0; margin-left:.5rem; }
 .topbar { padding:.75rem 5%; min-height:0; }
 .main { padding:1.75rem 5% 3rem; }
 .heading { margin-bottom:1.5rem; }
 .stats { gap:.75rem; } .stat { padding:1.1rem; border-radius:18px; }
 .stat strong { font-size:23px; }
 .overview-stats .stat small { position:static; margin-top:.5rem; }
 .panel { padding:1.1rem; border-radius:20px; }
 .panel-title { align-items:flex-start; }
 .task-tabs { width:100%; }
 dialog { padding:1.35rem; border-radius:22px; }
 .login-intro { padding:2rem 7%; } .login-intro h1 { margin:1.5rem 0 1rem; }
 .login-form { margin:1.5rem; padding:1.75rem; width:calc(100% - 3rem); }
}
@media(prefers-reduced-motion:reduce) { *,*::before,*::after { transition:none!important; animation:none!important; scroll-behavior:auto!important; } button:not(:disabled):active,button.stat:hover { transform:none; } }
/* 切换视图 150ms 淡入 (2026-11-01): the class is put on by render() when the page changes; prefers-reduced-motion beside it turns every animation off */
.qf-ui main.page-in{animation:qf-page-in .15s ease-out}@keyframes qf-page-in{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-transparency:reduce) { .sidebar,.topbar { background:#fff; backdrop-filter:none; -webkit-backdrop-filter:none; } }
@media(prefers-contrast:more) { :root { --muted:#262624; --line:var(--qf-ink-3); } .sidebar,.topbar { background:#fff; backdrop-filter:none; -webkit-backdrop-filter:none; } .stat,.panel,dialog,input,select,textarea { border-color:var(--qf-ink-3); } .sidebar button.active { outline:2px solid var(--accent); outline-offset:-2px; } }

/* Complete project names in lists, tasks, finance and detail headings. */
.project-name-cell{white-space:normal;width:32rem;min-width:min(18rem,60vw);max-width:32rem;overflow-wrap:anywhere;word-break:normal}
.project-name-cell .title,.work-row,.work-row strong,.row-context,.heading h1,dialog h2,[data-project]{white-space:normal;overflow-wrap:anywhere;word-break:normal;text-overflow:clip;-webkit-line-clamp:unset;max-height:none}
.heading>div{min-width:0;flex:1}
.heading h1{max-width:100%}
.project-name-cell .title{display:block;width:100%;height:auto}
@media(max-width:700px){.work-row{align-items:flex-start;flex-wrap:wrap}.work-row>span:first-child{flex:1 1 100%}.row-end{display:flex;flex-wrap:wrap;align-items:center;max-width:100%;justify-items:start}.project-name-cell{min-width:60vw}}

/* Approved Stratify-inspired Qingfeng workspace, 2026-09-16. */
:root{--ink:#262624;--accent:#3f6c86;--muted:var(--qf-ink-3);--line:#e7e5e0;--surface:#fff;font-size:15px}
body{background:#fff}.shell{grid-template-columns:190px minmax(0,1fr)}
.sidebar{background:#fff;color:#5f5d58;border-right:1px solid #e7e5e0;backdrop-filter:none;-webkit-backdrop-filter:none;padding:1.8rem .8rem 1rem;gap:1.8rem}
.sidebar .brand{padding:.1rem 0 .1rem 3rem;color:#5f5d58;font-size:15px;min-height:2.2rem}
.sidebar .brand::before{width:2rem;height:2rem;left:.3rem;background:#e7e5e0;color:#3f6c86;font-size:.8rem;border-radius:9px;letter-spacing:-.06em}
.sidebar .brand span{color:var(--qf-ink-3);font-size:10px;letter-spacing:.09em}
.sidebar nav{gap:4px}.sidebar button,.sidebar .publication-nav{font-size:.8rem;min-height:2.6rem;border-radius:9px;gap:10px;padding:.55rem .65rem;color:var(--qf-ink-3)}
.sidebar button.active{background:#edf1f3;color:#3f6c86;box-shadow:none;font-weight:600}.sidebar .publication-nav:first-of-type{margin-top:.9rem}
.sidebar .bottom{border-top:1px solid #e7e5e0;color:var(--qf-ink-3);font-size:12px}.sidebar .bottom a{color:var(--qf-ink-3)}
.workspace-icon{width:17px;height:17px;vertical-align:middle;flex-shrink:0}.sidebar .workspace-icon{width:16px;height:16px}
.topbar{background:#fff;border-bottom:0;min-height:64px;padding:.8rem 4%;font-size:.8rem}.topbar>span:first-child{font-size:12px;color:var(--qf-ink-3)}.topbar button{background:transparent;border:0;font-size:12px;color:var(--qf-ink-3);min-height:2.5rem}
.main{max-width:1540px;padding:2rem 4% 4rem}.main-overview{max-width:1050px;margin-inline:auto;padding:1.7rem 6% 2.5rem}
h1{font-size:clamp(1.5rem,2.2vw,2rem);font-weight:550;line-height:1.5;letter-spacing:-.025em}h2{font-size:17px;font-weight:550}h3{font-weight:550}
.heading{margin-bottom:1.7rem}.heading p{font-size:13px;color:var(--qf-ink-3)}.panel{border:1px solid #e7e5e0;border-radius:15px;box-shadow:none;padding:1.5rem}.stat{border:1px solid #e7e5e0;border-radius:14px;box-shadow:none;padding:1.2rem}.stat strong{font-size:26px;font-weight:500;color:#3f6c86}.stat span{font-size:.8rem}.stats{gap:12px}
button{border-radius:9px;font-weight:400;box-shadow:none}button.primary{background:#3f6c86;border-color:#3f6c86;box-shadow:none}button.primary:hover{background:#3f6c86}button:hover{background:#f7f7f5}input,select,textarea{border-radius:9px;border-color:#d8d5ce;box-shadow:none}.pill{border-radius:6px;font-size:12px;padding:.2rem .45rem}.pill.active,.pill.working{background:#edf1f3;color:#3f6c86}.pill.review,.pill.paused{background:#f7f0e2;color:var(--qf-amber)}
th{background:#f7f7f5;font-size:.8rem;padding:.85rem}td{padding:1rem .85rem;font-size:13px;vertical-align:top}.table-wrap{border-radius:10px}.project-name-cell{width:34rem;max-width:34rem}.project-meta{font-size:13px}.task-tabs{background:#f3f2ef;border-radius:11px}.task-tabs button[aria-pressed=true]{box-shadow:0 1px 4px #2626240b}.node-input{background:#f7f7f5;border-radius:12px}.submission{background:#f7f7f5}.alert,.trial{border-radius:11px}.project-summary{margin-top:1.5rem}dialog{border-radius:18px;box-shadow:0 20px 65px #26262422}.work-row strong,.row-context{font-weight:400;font-size:13px;line-height:1.75}.row-context{font-size:.8rem;color:var(--qf-ink-3)}.quiet{font-size:.8rem;color:#3f6c86;padding:.3rem}.empty h2{font-size:15px}.empty p{font-size:13px}
.studio-overview{max-width:1180px;margin:0}.studio-greeting{margin:0 0 2rem}.studio-greeting h1{font-size:clamp(1.8rem,2.7vw,2.25rem);line-height:1.65;font-weight:500;letter-spacing:-.03em}.studio-greeting mark{background:#e7e5e0;color:#3f6c86;padding:.1rem .6rem .25rem;border-radius:8px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.studio-greeting>p{font-size:clamp(1.35rem,2.1vw,1.85rem);line-height:1.5;color:var(--qf-ink-3);letter-spacing:-.025em;margin:.4rem 0 .85rem}.studio-date{font-size:.8rem;color:var(--qf-ink-3)}
.studio-features{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}.studio-note,.studio-focus{border:1px solid #e7e5e0;border-radius:14px;padding:1.2rem;min-width:0;background:#fff}.studio-note{background:#f7f0e2;border-color:#f7f0e2;box-shadow:0 4px 12px var(--qf-amber)05;transform:rotate(-.65deg)}.studio-note h2,.studio-focus h2{font-size:.8rem;font-weight:500;display:flex;gap:7px;align-items:center;margin-bottom:.6rem;color:var(--qf-ink-3)}.studio-note h2{color:var(--qf-amber)}.studio-note .workspace-icon,.studio-focus .workspace-icon{width:14px;height:14px}
.studio-file{display:flex;gap:8px;padding:.55rem 0;border:0;border-radius:0;background:none;width:100%;align-items:flex-start;text-align:left;white-space:normal;overflow-wrap:anywhere;font-size:.8rem;line-height:1.7}.studio-file>svg{margin-top:4px;color:#9da96b}.studio-file>span{min-width:0}.studio-file small{display:block;color:var(--qf-amber);font-size:12px;margin-top:2px}.studio-focus-link{width:100%;border:0;padding:.4rem 0;background:none;text-align:left;border-radius:0;white-space:normal;overflow-wrap:anywhere}.studio-focus-link strong{display:block;line-height:1.8;font-weight:500;font-size:14px}.studio-focus-link>span{display:block;font-size:13px;color:var(--qf-ink-3);margin:.65rem 0}.studio-focus-link>small{display:block;margin-top:1.2rem;font-size:12px;color:var(--qf-ink-3)}.studio-empty{font-size:13px;color:var(--qf-ink-3);line-height:1.8;padding:1rem 0}
.studio-tools{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0 24px}.studio-tools>a{display:grid;gap:5px;padding:.9rem 1.1rem;border:1px solid #e7e5e0;border-radius:14px;background:#fff;text-decoration:none;color:#5f5d58}.studio-tools>a:hover{background:#f7f7f5;border-color:#e7e5e0}.studio-tools small{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--qf-ink-3)}.studio-tools svg{width:13px;height:13px}.studio-tools strong{font-weight:500;font-size:14px}
.studio-tasks{border:1px solid #e7e5e0;border-radius:14px;padding:.6rem 1.2rem .3rem}.studio-tasks .panel-title{margin:0 0 .2rem;gap:1rem}.studio-tasks h2{font-size:.8rem;display:flex;gap:7px;align-items:center}.studio-tasks h2>span{color:var(--qf-ink-3);font-size:12px}.studio-tasks .workspace-icon{width:14px;height:14px}.studio-tasks .work-row{padding:.8rem 0;gap:12px;align-items:flex-start}.studio-tasks .work-row>span:first-child{flex:1}.studio-tasks .work-row strong{font-size:13px}.studio-tasks .row-end{padding-top:3px}.studio-tasks .row-end small{font-size:12px}.studio-tasks .row-context{margin-top:3px;font-size:12px}
.studio-status{display:flex;gap:8px 18px;flex-wrap:wrap;margin:1rem 0}.studio-status>button{font-size:12px;border:0;color:var(--qf-ink-3);padding:0;min-height:2rem;background:none}.studio-status strong{font-weight:500;color:#3f6c86;margin-left:6px}.studio-attention{font-size:.8rem;color:var(--qf-ink-3);margin:1rem 0;padding:.75rem 0;border-top:1px solid #e7e5e0}.studio-attention summary{cursor:pointer;padding:.3rem 0}.studio-search{display:flex;gap:10px;align-items:center;padding:.6rem .75rem .6rem 1.1rem;background:#fff;border:1px solid #e7e5e0;border-radius:40px;box-shadow:0 9px 28px #2626240d;margin-top:1.3rem}.studio-search>svg{color:#c5d3db;width:16px;height:16px}.studio-search input{border:0;background:transparent;box-shadow:none;min-width:0;flex:1;font-size:.8rem;padding:.25rem 0;min-height:2rem}.studio-search button{border:0;background:#e7e5e0;color:#3f6c86;border-radius:50%;width:32px;height:32px;min-height:32px;flex-shrink:0;padding:7px;display:grid;place-items:center}.studio-search input::placeholder{color:var(--qf-ink-3)}.studio-footer{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:12px;color:var(--qf-ink-3);font-size:12px}.studio-footer button{font-size:12px}
.login{background:#fff}.login-intro{background:#f7f7f5;color:#3f6c86}.login-intro h1{font-weight:500}.login-form{border-radius:16px;box-shadow:none}.wecom-login{background:#edf1f3;border-color:#e7e5e0;border-radius:10px}
@media(max-width:1100px){.shell{grid-template-columns:172px minmax(0,1fr)}.sidebar{padding-inline:.65rem}.main-overview{padding-inline:5%}.sidebar .brand{font-size:14px}.sidebar button,.sidebar .publication-nav{padding-inline:.5rem;gap:7px}}
@media(max-width:700px){.shell{grid-template-columns:minmax(0,1fr)}.sidebar{position:static;height:auto;padding:1rem 5% .6rem;border-right:0;border-bottom:1px solid #e7e5e0;gap:12px}.sidebar .brand{padding-left:3rem;min-height:2rem}.sidebar nav{flex-wrap:wrap;overflow:visible;gap:3px}.sidebar nav button,.sidebar .publication-nav{font-size:12px;min-height:2.75rem;padding:.5rem .65rem}.sidebar nav .workspace-icon{display:none}.sidebar .publication-nav:first-of-type{margin-top:0;margin-left:0}.main-overview{padding:1.5rem 5% 2.5rem}.studio-features{grid-template-columns:1fr;gap:14px}.studio-greeting{margin-bottom:1.5rem}.studio-greeting>p{font-size:20px}.studio-tools{gap:10px}.studio-tools>a{padding:.8rem}.studio-tools strong{font-size:13px}.studio-tasks{padding:.6rem 1rem}.studio-tasks .work-row{flex-wrap:wrap;gap:3px}.studio-tasks .work-row>span:first-child{flex:1 1 100%}.studio-tasks .row-end{padding:0}.studio-status{gap:5px 15px}.studio-search input{font-size:16px}.studio-note{transform:none}.studio-footer{flex-wrap:wrap}.panel{padding:1.1rem}.topbar{padding:.6rem 5%}.topbar>span:last-child{font-size:12px}.project-name-cell{min-width:60vw}}
@media(prefers-contrast:more){:root{--muted:#5f5d58;--line:#a9a69f}.studio-date,.studio-status>button,.studio-tools small,.studio-footer,.row-context{color:#5f5d58}.studio-note,.studio-focus,.studio-tasks,.panel,.stat{border-color:var(--qf-ink-3)}}

/* Compact project ledger rows; keep full project names and touch targets. */
#project-results th{padding:.65rem .85rem}
#project-results td{padding:.55rem .85rem;vertical-align:middle}
#project-results .project-name-cell .title{line-height:1.5}

/* Moderate density for day-to-day internal work. */
.topbar{min-height:54px;padding:.4rem 4%}
.main{padding:1.2rem 4% 2.5rem}
.main .heading{margin-bottom:1rem;gap:1rem}
.main .heading h1{font-size:clamp(1.5rem,2vw,1.8rem);line-height:1.35}
.main .heading p{margin-top:.35rem;line-height:1.55}
.main .stats{gap:10px;margin-bottom:1rem}
.main .stat{padding:.8rem 1rem;border-radius:12px}
.main .stat strong{margin-top:.35rem;font-size:24px;line-height:1.2}
.main .panel{padding:1rem 1.1rem;margin-bottom:1rem}
.main .panel-title{margin-bottom:.8rem}
.main .toolbar{margin-bottom:.8rem;gap:12px}
.main .toolbar input,.main .toolbar select{padding:.5rem .7rem}
#project-results>p{font-size:.8rem;line-height:1.5;margin-bottom:.35rem}
@media(max-width:700px){.topbar{padding:.4rem 5%;min-height:0}.main{padding:1rem 5% 2rem}.main .stat{padding:.75rem}.main .panel{padding:.85rem}.main .toolbar{gap:10px}}

/* Ledger totals link to their complete matching lists. */
.main .stats button.stat[data-ledger-stat]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}

/* Group navigation around daily work; keep occasional administration folded. */
.sidebar nav{display:block}
.sidebar .nav-group{margin:0 0 .8rem;min-width:0}
.sidebar .nav-group-title{margin:0;padding:.3rem .65rem;color:var(--qf-ink-3);font-size:10px;font-weight:600;line-height:1.5;letter-spacing:.04em}
.sidebar .nav-links{display:flex;flex-direction:column;gap:2px;min-width:0}
.sidebar .nav-links button,.sidebar .nav-links .publication-nav{width:100%;margin:0;text-align:left;min-height:2.6rem}
.sidebar .nav-system{border-top:1px solid #e7e5e0;padding-top:.4rem}
.sidebar .nav-system summary{cursor:pointer;min-height:2.75rem;display:flex;align-items:center;justify-content:space-between;list-style:none}
.sidebar .nav-system summary::-webkit-details-marker{display:none}
.sidebar .nav-system summary::after{content:'›';font-size:17px;line-height:1;transform:rotate(0)}
.sidebar .nav-system[open] summary::after{transform:rotate(90deg)}
.sidebar .nav-system summary:hover{color:#3f6c86;background:#f7f7f5;border-radius:8px}
.sidebar .nav-system summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:8px}
@media(max-width:700px){.sidebar .nav-group{margin-bottom:.5rem}.sidebar .nav-links{flex-direction:row;flex-wrap:wrap;gap:2px}.sidebar .nav-links button,.sidebar .nav-links .publication-nav{width:auto;min-height:2.75rem}.sidebar .nav-group-title{padding:.2rem .65rem}.sidebar .nav-system{margin-bottom:0}}
@media(prefers-contrast:more){.sidebar .nav-group-title{color:#5f5d58}.sidebar .nav-system{border-color:var(--qf-ink-3)}}

/* Ledger filters wrap without widening the page. */
.main .project-filters{display:grid;grid-template-columns:minmax(12rem,2fr) minmax(7rem,.8fr) minmax(12rem,1.4fr) minmax(8rem,1fr) minmax(7rem,.8fr);align-items:center;gap:10px}
.main .project-filters input,.main .project-filters select{width:100%;min-width:0;max-width:none;margin:0}
@media(max-width:1200px){.main .project-filters{grid-template-columns:repeat(2,minmax(0,1fr))}.main .project-filters input{grid-column:1/-1}}
@media(max-width:400px){.main .project-filters{grid-template-columns:minmax(0,1fr)}}

/* Consistent compact spacing across every internal workspace view. */
@media screen{
 .topbar{min-height:48px;padding:.25rem 3%;gap:.6rem}
 .topbar button{padding:.3rem .55rem;min-height:2.25rem}
 .main,.main.main-overview{padding:1rem 3% 2rem}
 .main .heading{margin-bottom:.75rem;gap:.75rem}
 .main .heading h1{font-size:clamp(1.4rem,1.8vw,1.65rem)}
 .main .heading p{margin-top:.25rem;line-height:1.5}
 .main .panel{padding:.8rem 1rem;margin-bottom:.8rem;border-radius:12px}
 .main .panel-title{margin-bottom:.6rem}
 .main .stats{margin-bottom:.8rem;gap:8px}
 .main .stat{padding:.65rem .85rem}
 .main .stat strong{font-size:22px;margin-top:.2rem}
 .main button,dialog button{min-height:2.25rem;padding:.4rem .75rem}
 .main input,.main select,.main textarea,dialog input,dialog select,dialog textarea{min-height:2.25rem;padding:.4rem .6rem}
 .main label,dialog label{margin-bottom:.6rem;line-height:1.5}
 .main th,.main td{padding:.55rem .75rem}
 .main td .title{min-height:2.25rem}
 .main .node{padding:.8rem 0}
 .main .node-head{gap:.75rem;align-items:center}
 .main .node-head h3{font-size:15px;line-height:1.45}
 .main .node p{margin:.35rem 0;line-height:1.5}
 .main .node .actions{margin-top:.5rem;gap:.5rem}
 .main .task-tabs{padding:3px;gap:3px;margin-bottom:.75rem;border-radius:9px}
 .main .task-list .node{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:center}
 .main .task-list .node:first-child{border-top:0;padding-top:.2rem}
 .main .task-list .node:last-child{padding-bottom:.2rem}
 .main .task-list .node-head>div{min-width:0}
 .main .task-list .node>button{white-space:nowrap}
 .main .compact-node>summary{padding:.65rem 0;min-height:2.5rem}
 .main .submission{margin:.65rem 0;padding:.65rem .8rem}
 .main .project-summary{margin-top:.75rem}
 .main .project-summary h2{margin-top:.3rem;line-height:1.5}
 .main .project-meta{gap:.4rem 1rem}
 .main .log{padding:.6rem 0}
 .main .alert,.main .trial{padding:.65rem .85rem;margin:.75rem 0}
 .main .node-input{padding:.85rem;margin:.65rem 0}
 .main .empty{padding:2rem 1rem}
 .main .migration{padding-top:.5rem}
 .main .studio-greeting{margin-bottom:1.1rem}
 .main .studio-greeting>p{font-size:22px;margin:.25rem 0 .55rem}
 .main .studio-features,.main .studio-tools{gap:12px}
 .main .studio-note,.main .studio-focus{padding:.85rem 1rem}
 .main .studio-focus-link>small{margin-top:.65rem}
 .main .studio-tools{margin:12px 0 16px}
 .main .studio-tools>a{padding:.65rem .85rem}
 .main .studio-tasks{padding:.45rem 1rem}
 .main .studio-tasks .work-row{padding:.55rem 0}
 .main .studio-search{margin-top:.8rem;padding:.4rem .6rem .4rem .85rem}
 dialog{padding:1.2rem;border-radius:16px}
 dialog h2{font-size:20px;margin-bottom:1rem}
 dialog .actions{margin-top:1rem;gap:.5rem}
 .login-intro{padding:6vh 10%}.login-form{padding:1.75rem;margin:1.5rem;width:calc(100% - 3rem)}
}
@media screen and (max-width:700px){
 .main,.main.main-overview{padding:.85rem 4% 1.5rem}.topbar{padding:.3rem 4%}
 .main .panel{padding:.75rem}.main .task-list .node{grid-template-columns:minmax(0,1fr);gap:.35rem}
 .main .task-list .node>button{justify-self:start}.main .node-head{align-items:flex-start}
 .main button,.main input,.main select,dialog button,dialog input,dialog select,.topbar button{min-height:2.75rem}
 .main .studio-search button{min-height:32px}.main .studio-greeting>p{font-size:20px}
 .main input,.main select,.main textarea,dialog input,dialog select,dialog textarea{font-size:16px}
}
/* 大家手上的活 (2026-10-17): the members' nodes on the administrators' overview, laid out as 我的待办 above it. */
.studio-team{margin-top:16px}
/* The first open (2026-10-17, N8): grey blocks laid out as the workplace, no words, no motion. */
.loading-shell{display:flex;min-height:100vh}.sk-side{width:190px;background:#fff;border-right:1px solid #e7e5e0}.sk-main{flex:1;padding:44px 40px}.sk-bar{height:14px;width:220px;background:#edece8;border-radius:6px;margin-bottom:14px}.sk-bar.short{width:140px;margin-bottom:28px}.sk-card{height:120px;background:#f3f2ef;border-radius:14px;margin-bottom:16px}@media(max-width:900px){.sk-side{display:none}.sk-main{padding:28px 16px}}
/* The cockpit (2026-10-17, N6): the greeting with the search beside it, four figures, two columns - the work on the left, the glance and the team on the right; one column on a narrow screen. */
.studio-head{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:1.2rem}
.studio-head .studio-greeting{margin:0;min-width:0}
.studio-head .studio-greeting h1{font-size:clamp(1.45rem,2vw,1.8rem);line-height:1.5}
.studio-head .studio-greeting>p{font-size:clamp(1rem,1.3vw,1.2rem);margin:.3rem 0 .5rem}
.studio-head .studio-actions{flex-shrink:0;display:flex;gap:10px;align-items:center}
.studio-head .studio-search{margin:0;width:300px;box-shadow:none}
.studio-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 16px}
.studio-stats .stat{padding:14px 16px;text-align:left;border-radius:14px;min-width:0}
.studio-stats button.stat{cursor:pointer}
.studio-stats .stat span{font-size:13px;color:#5f5d58}
.studio-stats .stat strong{font-size:26px;line-height:1.2;margin-top:6px;display:block}
.studio-stats .stat.late strong{color:#ad3f3b}
.studio-stats .stat small{display:block;margin-top:6px;font-size:13px;color:#3f6c86;line-height:1.6}
.studio-stats .stat small a,.studio-stats .stat small button{color:#3f6c86;background:none;border:0;padding:0;min-height:0;font-size:13px;text-decoration:none;border-radius:0}
.studio-stats .stat small a:hover,.studio-stats .stat small button:hover{text-decoration:underline}
.studio-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:16px;align-items:start}
.studio-col{display:grid;gap:16px;min-width:0}
.studio-col>*{margin:0}
.studio-col .studio-tools{grid-template-columns:1fr;margin:0}
.studio-kinds .kind-row{display:grid;grid-template-columns:8rem minmax(0,1fr) 2.5rem;align-items:center;gap:10px;width:100%;border:0;border-radius:0;background:none;padding:.35rem 0;font-size:13px;text-align:left;color:#262624;min-height:0;white-space:normal}
.studio-kinds .kind-row>span:last-child{text-align:right;color:#5f5d58}
.studio-kinds .kind-bar{width:100%;height:8px;display:block}
.studio-kinds .kind-bar .bg{fill:#e7e5e0}
.studio-kinds .kind-bar .fg{fill:#3f6c86}
.studio-focus h2>span{color:var(--qf-ink-3);font-weight:400}
.studio-glance .glance-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:13px;color:#5f5d58;padding:.3rem 0}
.studio-glance .glance-row strong{font-size:18px;color:#262624;font-variant-numeric:tabular-nums}
.studio-glance .quiet{margin-top:.4rem;padding-left:0}
.studio-status{margin:16px 0 0}
@media(max-width:1000px){.studio-grid{grid-template-columns:minmax(0,1fr)}.studio-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.studio-head{flex-direction:column;gap:12px}.studio-head .studio-actions{width:100%;flex-wrap:wrap}.studio-head .studio-search{width:auto;flex:1 1 220px}.studio-kinds .kind-row{grid-template-columns:6.5rem minmax(0,1fr) 2.2rem}}
/* The search box in the top bar of every view (2026-10-17, N7): "/" puts the cursor in it; the hits drop down under it. */
.topbar .global-search{position:relative;order:1;margin-left:auto;display:flex;align-items:center;gap:6px;border:1px solid #e7e5e0;border-radius:10px;background:#fff;padding:0 8px 0 10px;min-height:36px;width:260px;flex-shrink:0}
.topbar .global-search input{border:0;background:transparent;box-shadow:none;min-width:0;flex:1;font-size:13px;min-height:34px;padding:0;border-radius:0}
.qf-ui .topbar .global-search input:focus,.qf-ui .topbar .global-search input:focus-visible{outline:none;box-shadow:none;border:0}
.topbar .global-search:focus-within{border-color:#3f6c86}
.topbar .global-search kbd{font:12px/1 Arial,sans-serif;color:var(--qf-ink-3);border:1px solid #d8d5ce;border-radius:4px;padding:3px 5px;background:#f7f7f5}
.topbar .global-search .qf-picker-list{left:auto;right:0;top:calc(100% + 4px);width:min(32rem,calc(100vw - 32px))}
.topbar .global-search .qf-picker-list p{margin:0;padding:10px;font-size:13px;color:var(--qf-ink-3)}
.topbar .global-search .qf-picker-list h3{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:8px 10px 2px;font-size:12px;font-weight:600;line-height:1.4;color:var(--qf-ink-3,var(--qf-ink-3))}.topbar .global-search .qf-picker-list h3:first-child{margin-top:2px}.topbar .global-search .qf-picker-list h3 span{font-weight:400}
@media(max-width:700px){.topbar .global-search{order:3;width:100%;margin-left:0}.topbar .global-search kbd{display:none}.topbar .global-search .qf-picker-list{left:0;right:auto;width:100%}}
/* The files across the whole width under the two columns (2026-10-17 evening): a row of cards, as many as fit. */
.studio-overview>.studio-note{margin:16px 0 0}
.studio-files{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:0 24px}

/* 2026-10-25: the look borrowed from the admin template the owner showed - a tinted badge before each of the four figures, sparklines in the glance, the side bar folded to icons. */
.studio-stats .stat{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;align-items:center;column-gap:4px;padding:16px 18px;border:1px solid #e7e5e0;background:#fff}
.studio-stats .stat .stat-badge{grid-row:1/3;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px;margin-right:10px;flex:none}
.studio-stats .stat .stat-badge svg{width:20px;height:20px}
.studio-stats .stat span,.studio-stats .stat strong,.studio-stats .stat small{grid-column:2}
.studio-stats .stat strong{margin-top:2px}
.stat-badge-blue{background:#edf1f3;color:#3f6c86}.stat-badge-amber{background:#f7f0e2;color:var(--qf-amber)}.stat-badge-green{background:#ebf3ee;color:#3b7553}.stat-badge-red{background:#f8eceb;color:#ad3f3b}
.studio-glance .glance-row-spark>span{display:block;flex:1 1 auto;min-width:0}
.studio-glance .glance-spark{display:block;width:min(140px,100%);height:22px;margin-top:4px}
.studio-glance .glance-spark .dash-spark{height:22px}
.studio-glance .glance-spark.signed .line{stroke:var(--qf-series-1,#2f74a6)}.studio-glance .glance-spark.signed .area{fill:var(--qf-series-1,#2f74a6)}
.studio-glance .glance-spark.received .line{stroke:var(--qf-series-3,#2a9a66)}.studio-glance .glance-spark.received .area{fill:var(--qf-series-3,#2a9a66)}

@media(min-width:701px){













}
/* 健康灯与台账工具 (2026-10-25, 建议清单第1、6、7条): the light before a project's name, the chips and the columns' list over the ledger, the saved filters, the checks' rows. */
.health{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;margin-right:.45rem;vertical-align:middle;background:#2a9a66;flex-shrink:0}.health-amber{background:var(--qf-amber)}.health-red{background:#ad3f3b}
#project-results .ledger-line{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:.35rem}#project-results .ledger-line p{margin:0;font-size:.8rem;line-height:1.5}.ledger-tools{display:flex;align-items:center;gap:14px}
.health-strip{display:flex;gap:6px}.health-chip{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;padding:3px 10px 3px 8px;font-size:.8rem;line-height:1.4;background:#fff;min-height:0;color:var(--ink)}.health-chip .health{margin-right:.35rem}.health-chip.on{background:#edf1f3;border-color:#3f6c86}
.col-pick{position:relative;font-size:.8rem}.col-pick summary{cursor:pointer;list-style:none;border:1px solid var(--line);border-radius:999px;padding:3px 12px;line-height:1.4;background:#fff;color:var(--ink);white-space:nowrap}.col-pick summary::-webkit-details-marker{display:none}.col-pick[open] summary{background:#edf1f3;border-color:#3f6c86}.col-pick-list{position:absolute;right:0;top:calc(100% + 6px);z-index:5;background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 14px;box-shadow:0 8px 24px #26262414;display:grid;gap:6px;min-width:11rem}.col-pick-list label{display:flex;align-items:center;gap:8px;margin:0;font-size:13px;white-space:nowrap}.col-pick-list input{width:auto;margin:0}
.ledger-views{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:-12px 0 16px}.view-chip{display:inline-flex;align-items:stretch;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:#fff}.view-chip button{border:0;border-radius:0;padding:3px 10px;font-size:.8rem;line-height:1.4;min-height:0;background:transparent;color:var(--ink)}.view-chip .view-drop{padding:3px 9px 3px 2px;color:var(--muted)}.view-chip.on{background:#edf1f3;border-color:#3f6c86}.ledger-views .quiet{font-size:.8rem;padding:3px 0}
.check-group h2{display:flex;align-items:center;gap:8px;margin-bottom:6px}.check-group h2 span{font-size:13px;font-weight:400;color:var(--muted)}.check-row{cursor:default}.check-row:hover{background:transparent}.check-row .title{font-weight:600;background:none;border:none;padding:0;text-align:left;color:var(--accent);font-size:14px;min-height:0}.check-row .row-end{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.check-row .row-end button{padding:5px 10px;font-size:.8rem;min-height:0}.check-row a.title{text-decoration:none}
.studio-status .health{margin-right:.35rem}
@media(max-width:700px){#project-results .ledger-line{align-items:flex-start}.ledger-tools{width:100%;justify-content:space-between}}
/* 应收跟进 (2026-10-25, 建议清单第3条): the four figures, the aging buckets, the follow-up column, a customer's detail row, and the cards a phone shows instead of the table. */
.ar-stats .stat small{display:block;margin-top:6px;font-size:.8rem;color:#5f5d58}.ar-stats .stat.red strong{color:#ad3f3b}
.ar-toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.ar-toolbar input{max-width:360px;flex:1 1 16rem}.ar-toolbar select{width:auto;min-width:9rem}.ar-line{font-size:.8rem;margin-bottom:.35rem}
.ar-table th,.ar-table td{vertical-align:top}.ar-table td.sum,.ar-table th.sum{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ar-table td.cust{white-space:normal;min-width:16rem}.ar-table td.cust strong{display:block;font-size:14px;line-height:1.5}.ar-table td.cust small{display:block;margin-top:4px;color:#5f5d58}
.ar-age{display:grid;grid-template-columns:repeat(4,minmax(4.6rem,1fr));gap:4px;min-width:19rem}.ar-age span{display:block;border-radius:6px;padding:6px 6px;text-align:right;font-size:.8rem;font-variant-numeric:tabular-nums;background:#f3f2ef;color:var(--qf-ink-3)}
.ar-age span.has{color:#262624}.ar-age span.b2.has{background:#f7f0e2}.ar-age span.b3.has{background:#f0dfb8;color:#6b4a0f}.ar-age span.b4.has{background:#f8e3e1;color:#ad3f3b;font-weight:600}
.ar-age-head{display:grid;grid-template-columns:repeat(4,minmax(4.6rem,1fr));gap:4px;font-weight:400;color:var(--qf-ink-3);font-size:12px}.ar-age-head span{text-align:right}
.ar-follow{white-space:normal;min-width:11rem}.ar-follow small{display:block;margin-top:4px}.ar-follow .due{color:#ad3f3b;font-weight:600}.ar-follow .promise{color:#3b7553}
.ar-acts{display:flex;flex-wrap:wrap;gap:6px}.ar-acts button{padding:6px 10px;font-size:.8rem;min-height:0}
.ar-chip{display:inline-block;border-radius:999px;padding:3px 10px;font-size:12px;background:#f3f2ef;color:#5f5d58;white-space:nowrap}.ar-chip.b2{background:#f7f0e2;color:var(--qf-amber)}.ar-chip.b3{background:#f0dfb8;color:#6b4a0f}.ar-chip.b4{background:#f8e3e1;color:#ad3f3b;font-weight:600}
tr.ar-detail>td{background:#fafaf8;padding:14px 18px 18px;white-space:normal}.ar-detail-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:18px}.ar-detail-grid h3{font-size:14px;margin-bottom:8px;color:#262624}.ar-detail-grid .table-wrap{overflow:auto}
.ar-mini{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}.ar-mini th{font-weight:500;color:var(--qf-ink-3);background:transparent;padding:4px 8px 6px;border-bottom:1px solid #e7e5e0}.ar-mini td{padding:7px 8px;border-bottom:1px solid #eeede9;background:transparent;vertical-align:top}.ar-mini td.n,.ar-mini th.n{text-align:right;font-variant-numeric:tabular-nums}.ar-mini td small{display:block;margin-top:3px}.ar-mini .title{font-weight:600;background:none;border:none;padding:0;color:#3f6c86;min-height:0;white-space:normal;text-align:left}.ar-mini button{padding:5px 9px;font-size:12px;min-height:0}
.ar-timeline{list-style:none;margin:0;padding:0 0 0 14px;border-left:2px solid #e7e5e0}.ar-timeline li{position:relative;padding:0 0 14px 14px;font-size:13px;line-height:1.6;overflow-wrap:anywhere}.ar-timeline li::before{content:'';position:absolute;left:-19px;top:7px;width:8px;height:8px;border-radius:50%;background:#3f6c86}.ar-timeline li b{font-weight:600;color:#262624;margin-right:6px}.ar-timeline li small{display:block;color:var(--qf-ink-3)}
.panel .ar-cards{display:none;gap:10px}.ar-card{border:1px solid #e7e5e0;border-radius:12px;padding:14px 14px 12px;background:#fff}.ar-card h3{font-size:14px;line-height:1.5;margin-bottom:2px}.ar-card .sub{font-size:.8rem;color:#5f5d58;margin-bottom:10px}.ar-card .row{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:13px;padding:5px 0;border-top:1px solid #f0efeb}.ar-card .row b{font-variant-numeric:tabular-nums;font-weight:600}.ar-card .ar-acts{margin-top:10px}.ar-card .due{color:#ad3f3b;font-weight:600}.ar-card .promise{color:#3b7553}.ar-card .ar-card-detail{margin-top:12px;padding-top:12px;border-top:1px solid #e7e5e0}.ar-card .ar-detail-grid{grid-template-columns:minmax(0,1fr);gap:16px}
@media(max-width:700px){.panel .ar-table{display:none}.panel .ar-cards{display:grid}.ar-stats .stat{padding:14px}.ar-stats .stat strong{font-size:17px;margin-top:6px;white-space:nowrap}.ar-stats .stat span{font-size:12px}.ar-toolbar select{min-width:0;flex:1 1 40%}.ar-toolbar input{max-width:none}}
/* 归档清单 (2026-10-25, 建议清单第4条): the checklist in the acceptance dialog, the strip on an archived project, the overview's 待补资料. */
.ac-list{margin:14px 0 18px;border:1px solid #e7e5e0;border-radius:10px;overflow:hidden}.ac-list h3{font-size:14px;margin:0;padding:10px 14px;background:#f7f7f5;border-bottom:1px solid #e7e5e0;display:flex;justify-content:space-between;align-items:center}.ac-list h3 span{font-weight:400;color:#5f5d58;font-size:.8rem}
.ac-row{display:flex;gap:12px;align-items:flex-start;padding:10px 14px;border-top:1px solid #f0efeb;font-size:13px;line-height:1.6}.ac-row:first-of-type{border-top:0}.ac-row>span{flex:1 1 0;min-width:0;overflow-wrap:anywhere}.ac-row i{flex:0 0 1.35rem;height:1.35rem;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-style:normal;font-size:.8rem;font-weight:700;margin-top:2px}
.ac-row.ok i{background:#ebf3ee;color:#3b7553}.ac-row.warn i{background:#f7f0e2;color:var(--qf-amber)}.ac-row.off i{background:#f3f2ef;color:var(--qf-ink-3)}.ac-row b{font-weight:600;color:#262624;margin-right:6px}.ac-row .muted{display:block;font-size:.8rem}
.ac-link{flex-shrink:0;font-size:.8rem;color:#3f6c86;white-space:nowrap;align-self:flex-start;margin-top:2px;background:none;border:0;padding:0;min-height:0;text-decoration:underline;cursor:pointer}
.ac-strip{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:12px 16px;border:1px solid #e7e5e0;border-radius:12px;background:#fff;margin:0 0 16px}.ac-strip strong{font-size:14px;margin-right:4px}.ac-strip .meter{display:inline-flex;gap:3px;margin-right:6px}.ac-strip .meter i{display:block;width:14px;height:8px;border-radius:3px;background:#e7e5e0}.ac-strip .meter i.on{background:#3b7553}.ac-strip .meter i.bad{background:var(--qf-amber)}
.ac-chip{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:3px 10px;font-size:12px;background:#f7f0e2;color:var(--qf-amber);white-space:nowrap}.ac-strip .acts{margin-left:auto;display:flex;flex-wrap:wrap;gap:6px}.ac-strip .acts .ac-link{border:1px solid var(--line);border-radius:7px;padding:5px 10px;text-decoration:none;color:var(--ink);background:#fff;margin:0;align-self:auto}
.qf-ui .ac-strip .acts .ac-link,.ac-strip .acts .ac-link{font:inherit;font-size:12px;font-weight:500;line-height:1.3;min-height:0;height:auto;padding:6px 12px;border-radius:9px}   /* a button and a link side by side look the same (2026-10-26: "字体大小为什么不一样") */.ac-strip .acts .ac-link:hover{background:#edf1f3}
.studio-gaps .gap-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border:0;border-top:1px solid var(--line);border-radius:0;width:100%;background:transparent;text-align:left;min-height:0}.studio-gaps .gap-row:hover{background:#f7f7f5}.studio-gaps .gap-row>span:first-child{min-width:0}.studio-gaps .gap-row strong{display:block;font-size:14px;line-height:1.5;overflow-wrap:anywhere}.studio-gaps .gap-row .chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.studio-gaps .gap-row .ac-chip{font-size:12px;padding:2px 8px}.studio-gaps .gap-row small{flex-shrink:0;color:var(--qf-ink-3);font-size:12px;text-align:right}
.gap-tally{display:flex;gap:16px;flex-wrap:wrap;font-size:.8rem;color:#5f5d58;margin:-6px 0 6px}.gap-tally b{color:#262624;font-weight:600;margin-left:4px}
@media(max-width:700px){.ac-row{gap:10px;padding:10px 12px}.ac-strip .acts{margin-left:0;width:100%}.studio-gaps .gap-row{flex-wrap:wrap}.studio-gaps .gap-row small{text-align:left}}
/* The side bar hidden and shown (2026-10-26): hidden, the top bar carries the button that brings it back; a phone keeps its own menu. */
.shell.nav-hidden{grid-template-columns:minmax(0,1fr)}   /* one column: the workspace alone (the hidden side bar would otherwise leave it in a column of nothing) */
.shell.nav-hidden .sidebar{display:none}
.topbar .nav-side{display:inline-block;width:28px;height:28px;min-height:0;margin:0 10px 0 0;padding:0;border:1px solid #e7e5e0;border-radius:8px;vertical-align:middle;cursor:pointer;background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235f5d58' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='M14.5 6 8.5 12l6 6'/></svg>") center/16px no-repeat}
.topbar .nav-side:hover{background-color:#f7f7f5}
.shell.nav-hidden .topbar .nav-side{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235f5d58' stroke-width='1.8' stroke-linecap='round'><path d='M4 7h16M4 12h16M4 17h16'/></svg>")}
.topbar .page-back{color:var(--qf-ink-3);text-decoration:none;margin-right:14px;white-space:nowrap}
.topbar .page-back:hover{color:var(--ink,#1f1d1a);text-decoration:underline}
@media(max-width:700px){.shell.nav-hidden{grid-template-columns:1fr}.shell.nav-hidden .sidebar{display:flex}.topbar .nav-side{display:none!important}}
/* A page of its own inside the shell (shell.js): no centring of its own, the workspace's padding instead. */
.qf-ui .shell.seal-shell,.qf-ui .shell.testing-shell,.qf-ui .shell.pf-shell{max-width:none;margin:0;padding:0}
.qf-ui .shell.seal-shell>.workspace>main,.qf-ui .shell.testing-shell>.workspace>main,.qf-ui .shell.pf-shell>.workspace>main{padding:24px 28px 40px;max-width:none}
.shell>.workspace>header.topbar{height:auto;min-height:56px;padding:8px 28px;background:#fff}
@media(max-width:700px){.qf-ui .shell.seal-shell>.workspace>main,.qf-ui .shell.testing-shell>.workspace>main,.qf-ui .shell.pf-shell>.workspace>main{padding:16px 16px 28px}.shell>.workspace>header.topbar{padding:8px 16px}}
/* The project heading (2026-10-26, "这里做的有点丑，能不能做好看的排版？" → "做A"): the status beside the title; the facts in a row, a small label above each value, thin lines between; two columns on a phone, the long names across both. */
.qf-ui .main .heading .title-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0;margin-top:10px}
.qf-ui .main .heading .title-row h1{margin:0;min-width:0}
.qf-ui .main .heading .title-row .pill-group{display:inline-flex;gap:6px;align-items:center;flex-shrink:0}
.qf-ui .project-facts{display:flex;flex-wrap:wrap;gap:10px 0;margin-top:16px}
.qf-ui .project-facts .fact{display:flex;flex-direction:column;gap:3px;padding-right:22px;margin-right:22px;border-right:1px solid #e7e5e0;min-width:0}
.qf-ui .project-facts .fact:last-child{border-right:0;margin-right:0;padding-right:0}
.qf-ui .project-facts .fact small{font-size:12px;line-height:1.3;color:var(--qf-ink-3)}
.qf-ui .project-facts .fact span{font-size:14px;line-height:1.5;color:#2b2926;overflow-wrap:anywhere}
.qf-ui .project-facts .fact.number span{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;letter-spacing:.02em}
@media(max-width:700px){.qf-ui .project-facts{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin-top:12px}.qf-ui .project-facts .fact{border:0;padding:0;margin:0}.qf-ui .project-facts .fact.wide{grid-column:1/-1}}
/* The second batch of pages in the shell (2026-10-26, "接着做第二批页面" → "按这个做"): their own roots lose the centring, the tool pages' main its card (internal-ui's body>main no longer reaches it; water-balance.css's bare main is overruled); 公示管理 keeps its usage button beside the content, its message and footer below. */
.qf-ui .shell.invoice-shell,.qf-ui .shell.iw-shell,.qf-ui .shell.sr-shell,.qf-ui .shell.security-shell,.qf-ui .shell.tool-shell,.qf-ui .shell.pub-shell{max-width:none;margin:0;padding:0}
.qf-ui .shell.invoice-shell>.workspace>main,.qf-ui .shell.iw-shell>.workspace>main,.qf-ui .shell.sr-shell>.workspace>main,.qf-ui .shell.security-shell>.workspace>main,.qf-ui .shell.tool-shell>.workspace>main,.qf-ui .shell.pub-shell>.workspace>main{max-width:none;width:auto;margin:0;padding:24px 28px 40px;background:transparent;border:0;border-radius:0;box-shadow:none}
.qf-ui .shell.tool-shell>.workspace>header.topbar{margin:0}   /* cover-print.css styles every header */
.qf-ui .shell.pub-shell .pub-tools{display:flex;justify-content:flex-end;padding:16px 28px 0}
.qf-ui .shell.pub-shell .pub-tools>.qf-usage{position:relative;top:auto;right:auto;margin:0}
.qf-ui .shell.pub-shell>.workspace>#message{margin:0;padding:0 28px}
.qf-ui .shell.pub-shell>.workspace>footer{padding:12px 28px 28px;color:var(--qf-ink-3);font-size:13px}
@media(max-width:700px){.qf-ui .shell.invoice-shell>.workspace>main,.qf-ui .shell.iw-shell>.workspace>main,.qf-ui .shell.sr-shell>.workspace>main,.qf-ui .shell.security-shell>.workspace>main,.qf-ui .shell.tool-shell>.workspace>main,.qf-ui .shell.pub-shell>.workspace>main{padding:16px 16px 28px}.qf-ui .shell.pub-shell .pub-tools{padding:12px 16px 0}.qf-ui .shell.pub-shell>.workspace>#message{padding:0 16px}.qf-ui .shell.pub-shell>.workspace>footer{padding:10px 16px 24px}}
/* The heading's units as links into 客户档案 (2026-10-26 evening); the button back to the top of every page. */
.qf-ui .project-facts .fact-link{background:none;border:0;border-radius:0;padding:0;min-height:0;height:auto;font:inherit;line-height:inherit;color:#3f6c86;cursor:pointer;border-bottom:1px dotted #3f6c86;text-align:left;overflow-wrap:anywhere}
.qf-ui .project-facts .fact-link:hover{border-bottom-style:solid;background:none}
.qf-ui .qf-top{position:fixed;right:24px;bottom:24px;width:40px;height:40px;min-height:0;padding:0;border:1px solid #e7e5e0;border-radius:20px;background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235f5d58' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='M6 14.5 12 8.5l6 6'/></svg>") center/18px 18px no-repeat;box-shadow:0 4px 14px rgba(0,0,0,.12);cursor:pointer;z-index:40}
.qf-ui .qf-top:hover{background-color:#f7f7f5}
.qf-ui .qf-top[hidden]{display:none}
@media(max-width:700px){.qf-ui .qf-top{right:14px;bottom:14px;width:36px;height:36px}}
/* 批量操作 (2026-10-26 evening): the tick column of 项目台账 and the bar at the foot of the window while some projects are ticked. */
.qf-ui .main th.pick,.qf-ui .main td.pick{width:36px;padding-right:0}
.qf-ui .main td.pick{vertical-align:top;padding-top:22px}
.qf-ui .main .pick input{width:16px;height:16px;margin:0;vertical-align:middle;cursor:pointer}
.qf-ui .main tr.picked{background:#f3f6f8}
.qf-ui .batch-bar{position:fixed;left:218px;right:28px;bottom:20px;z-index:45;display:flex;align-items:center;gap:12px;padding:12px 18px;background:#262624;color:#fff;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.18);font-size:14px}
.qf-ui .shell.nav-hidden .batch-bar{left:28px}
.qf-ui .batch-bar .batch-count{font-weight:500;margin-right:6px}
.qf-ui .batch-bar button{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.45);border-radius:8px;padding:8px 14px;min-height:36px;font-size:14px}
.qf-ui .batch-bar button.primary{background:#3f6c86;border-color:#3f6c86}
.qf-ui .batch-bar button.batch-clear{margin-left:auto;border:0;color:rgba(255,255,255,.75)}
.qf-ui .batch-bar button:hover{background:rgba(255,255,255,.12)}
.qf-ui .batch-bar button.primary:hover{background:#35607a}
.qf-ui .batch-space{height:72px}
.qf-ui dialog .batch-list{margin:0 0 4px;padding:10px 14px;background:#f7f7f5;border-radius:10px;list-style:none;display:grid;gap:6px;font-size:14px;max-height:220px;overflow:auto}
@media(max-width:700px){.qf-ui .batch-bar{left:12px;right:12px;bottom:12px;flex-wrap:wrap;gap:8px;padding:10px 12px}.qf-ui .batch-bar button{padding:7px 10px;min-height:34px}.qf-ui .main td.pick{padding-top:14px}}
/* The bell (2026-10-26 evening): in the top bar before the account menu; its panel of the notices WeCom pushed. */
.qf-ui .topbar .nav-bell{position:relative;display:inline-flex;align-items:center;order:2;margin-left:auto;margin-right:14px}
.qf-ui .topbar .global-search+.nav-bell{margin-left:0}
.qf-ui .topbar .nav-bell .bell{width:32px;height:32px;min-height:0;padding:0;border:1px solid #e7e5e0;border-radius:8px;background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235f5d58' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='M6 16V11a6 6 0 0 1 12 0v5l1.5 2h-15z'/><path d='M10 20a2 2 0 0 0 4 0'/></svg>") center/18px 18px no-repeat;cursor:pointer;position:relative}
.qf-ui .topbar .nav-bell .bell:hover{background-color:#f7f7f5}
.qf-ui .topbar .nav-bell-count{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#c0392b;color:#fff;font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;line-height:1}
.qf-ui .bell-panel{position:absolute;top:40px;right:0;width:420px;max-height:70vh;overflow:auto;background:#fff;border:1px solid #e7e5e0;border-radius:12px;box-shadow:0 10px 30px rgba(0,0,0,.12);z-index:60;font-size:14px;color:#262624;text-align:left;padding:0;font-weight:400}
.qf-ui .bell-panel.loading{padding:14px 16px;color:var(--qf-ink-3)}
.qf-ui .bell-head{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #eeede9;font-size:15px}
.qf-ui .bell-head .bell-all{background:none;border:0;padding:0;min-height:0;font-size:13px;color:#3f6c86;cursor:pointer}
.qf-ui .bell-empty{margin:0;padding:18px 16px;color:var(--qf-ink-3)}
.qf-ui .bell-row{display:grid;grid-template-columns:8px 1fr auto;gap:10px;align-items:start;padding:11px 16px;border-bottom:1px solid #f1f0ec;text-decoration:none;color:var(--qf-ink-3);line-height:1.55}
.qf-ui .bell-row:last-child{border-bottom:0}
.qf-ui .bell-row:hover{background:#faf9f7}
.qf-ui .bell-row.unread{color:#262624}
.qf-ui .bell-body{min-width:0}
.qf-ui .bell-dot{width:8px;height:8px;border-radius:4px;margin-top:7px;background:transparent}
.qf-ui .bell-row.unread .bell-dot{background:#3f6c86}
.qf-ui .bell-kind{display:inline-block;font-size:12px;padding:1px 7px;border-radius:6px;background:#edf1f3;color:#3f6c86;margin-right:8px;vertical-align:1px}
.qf-ui .bell-text{display:block;font-size:12px;color:var(--qf-ink-3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qf-ui .bell-when{font-size:12px;color:var(--qf-ink-3);white-space:nowrap;margin-top:3px}
@media(max-width:700px){.qf-ui .topbar .nav-bell,.qf-ui .topbar .global-search+.nav-bell{margin-left:auto;margin-right:0}.qf-ui .bell-panel{position:fixed;left:8px;right:8px;top:120px;width:auto}}
/* 操作日志 (2026-10-27): the filters in one row, the time and the words kept narrow. */
.qf-ui .log-filters input{max-width:320px}.qf-ui .log-filters select{width:auto;min-width:150px}.qf-ui .log-filters .log-export{margin-left:auto;white-space:nowrap}
.qf-ui .log-table .title{padding:0;text-align:left;min-height:0;height:auto}
.qf-ui .log-table td{vertical-align:top}.qf-ui .log-table .log-when{white-space:nowrap;color:#5f5d58}.qf-ui .log-table td small{display:block;margin-top:4px}
.qf-ui .log-table .log-detail{white-space:normal;max-width:420px;overflow-wrap:anywhere;color:#5f5d58}.qf-ui .log-more{margin-top:14px;text-align:center}
/* 台账紧凑 (2026-10-27): lower rows, the second lines folded away. */
.qf-ui .ledger-compact.on{background:#edf1f3;color:#3f6c86}
.qf-ui .table-wrap.compact td{padding-top:6px;padding-bottom:6px}.qf-ui .table-wrap.compact td small{display:none}.qf-ui .table-wrap.compact .pill{padding:1px 6px}
/* 手机端筛选收起 (2026-10-27): on a phone the pickers fold into one button under the search. */
.qf-ui .project-filters .filter-toggle{display:none}
@media(max-width:700px){.qf-ui .project-filters .filter-toggle{display:block;width:100%}.qf-ui .project-filters:not(.open)>.mp{display:none}.qf-ui .project-filters.open .filter-toggle{background:#edf1f3}}
/* 日历 (2026-10-27) */
.qf-ui .cal-heading{align-items:center}.qf-ui .cal-nav{display:flex;align-items:center;gap:8px}.qf-ui .cal-nav strong{min-width:110px;text-align:center;font-size:17px}.qf-ui .cal-nav button{min-width:40px;padding:8px 12px}
.qf-ui .cal-bar{margin-bottom:16px;flex-wrap:wrap}.qf-ui .cal-bar select{width:auto;min-width:150px}.qf-ui .cal-kinds{display:flex;gap:8px;flex-wrap:wrap}
.qf-ui .cal-kind{padding:8px 14px;font-size:13px;display:inline-flex;align-items:center;gap:7px}.qf-ui .cal-kind::before{content:"";width:9px;height:9px;border-radius:3px;background:currentColor;opacity:.35}
.qf-ui .cal-kind[aria-pressed=true]{background:#edf1f3;border-color:#c5d3db}.qf-ui .cal-kind[aria-pressed=true]::before{opacity:1}.qf-ui .cal-kind[aria-pressed=false]{color:var(--qf-ink-3)}
.qf-ui .cal-kind.node{color:#325a71}.qf-ui .cal-kind.testing{color:#3f7a55}.qf-ui .cal-kind.revision{color:#7869a9}.qf-ui .cal-kind.reminder{color:var(--qf-amber)}
.qf-ui .cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:10px;overflow:hidden}
.qf-ui .cal-week{padding:9px 10px;font-size:12px;color:var(--muted);background:#f7f7f5;border-bottom:1px solid var(--line)}
.qf-ui .cal-cell{min-height:112px;padding:6px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:4px;min-width:0}
.qf-ui .cal-cell:nth-child(7n){border-right:0}.qf-ui .cal-cell.weekend{background:#fbfaf8}.qf-ui .cal-cell.out{background:#f7f7f5}.qf-ui .cal-cell.out .cal-date{color:#b5b2ab}
.qf-ui .cal-cell.picked{box-shadow:inset 0 0 0 2px #c5d3db}
.qf-ui .cal-date{font-size:12px;color:var(--muted);padding:2px 4px}.qf-ui .cal-cell.today .cal-date{background:var(--accent);color:#fff;border-radius:999px;align-self:flex-start;min-width:24px;text-align:center;font-weight:600}
.qf-ui .cal-chip{display:block;width:100%;text-align:left;font-size:12px;line-height:1.35;padding:3px 7px;border-radius:5px;border:0;border-left:3px solid currentColor;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:0;height:auto;font-weight:400}
.qf-ui .cal-chip.node{background:#edf1f3;color:#325a71}.qf-ui .cal-chip.node.late{background:#f8eceb;color:var(--red)}.qf-ui .cal-chip.testing{background:#e9f2ec;color:#3f7a55}.qf-ui .cal-chip.revision{background:#efecf6;color:#5f528f}.qf-ui .cal-chip.reminder{background:#f7f0e2;color:var(--qf-amber)}
.qf-ui .cal-chip:hover{filter:brightness(.96)}
.qf-ui .cal-more{border:0;background:none;padding:2px 6px;font-size:12px;color:var(--muted);text-align:left;min-height:0;height:auto}.qf-ui .cal-more:hover{color:var(--accent);background:none}
.qf-ui .cal-day-list{margin-top:16px;border:1px solid var(--line);border-radius:10px;padding:14px;display:grid;gap:6px}.qf-ui .cal-day-list h2{display:flex;justify-content:space-between;align-items:center;font-size:15px;margin-bottom:4px}
.qf-ui .cal-day-list .cal-chip,.qf-ui .cal-list .cal-chip{font-size:13px;padding:8px 10px;white-space:normal}
.qf-ui .cal-list{display:none}
@media(max-width:700px){.qf-ui .cal-heading{flex-direction:column;align-items:flex-start}.qf-ui .cal-grid,.qf-ui .cal-day-list{display:none}.qf-ui .cal-list{display:grid;gap:14px}.qf-ui .cal-list section{display:grid;gap:6px}.qf-ui .cal-list h3{font-size:13px;color:var(--muted);font-weight:500}.qf-ui .cal-list section.today h3{color:var(--accent);font-weight:600}.qf-ui .cal-bar select{flex:1}}
/* 命令面板 (2026-10-27) */
.qf-palette{position:fixed;inset:0;z-index:200;background:#26262466;display:flex;justify-content:center;align-items:flex-start;padding:12vh 16px 16px}
.qf-palette-box{width:min(640px,100%);max-height:72vh;display:flex;flex-direction:column;background:#fff;border-radius:14px;box-shadow:0 24px 60px #26262440;overflow:hidden}
.qf-ui .qf-palette-box input{border:0;border-bottom:1px solid var(--line);border-radius:0;padding:18px 20px;font-size:17px;margin:0;outline:none;box-shadow:none}.qf-ui .qf-palette-box input:focus,.qf-ui .qf-palette-box input:focus-visible{outline:none;box-shadow:none;border-color:var(--line)}
.qf-palette-list{overflow:auto;padding:6px 8px 10px}.qf-ui .qf-palette-list h3{font-size:12px;line-height:1.4;color:var(--qf-ink-3);font-weight:500;margin:12px 12px 4px}.qf-ui .qf-palette-list p{margin:14px 12px;color:var(--qf-ink-3)}
.qf-ui .qf-palette-list button{display:flex;justify-content:space-between;align-items:center;gap:16px;width:100%;text-align:left;border:0;background:transparent;border-radius:8px;padding:10px 12px;min-height:42px;height:auto;font-weight:400;color:#262624}
.qf-ui .qf-palette-list button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qf-ui .qf-palette-list button small{flex:none;color:var(--qf-ink-3);font-size:12px;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qf-ui .qf-palette-list button[aria-selected=true],.qf-ui .qf-palette-list button:hover{background:#edf1f3}
html.qf-palette-on{overflow:hidden}
/* 项目留言、周期提醒 (2026-10-27) */
.qf-ui .project-notes .note{padding:12px 0;border-bottom:1px solid var(--line)}.qf-ui .project-notes .note:first-of-type{padding-top:0}
.qf-ui .note-head{display:flex;align-items:baseline;gap:10px}.qf-ui .note-head small{color:var(--qf-ink-3)}.qf-ui .note-head .note-del{margin-left:auto;padding:2px 8px;font-size:12px;color:var(--qf-ink-3);border:0;background:none;min-height:0;height:auto}.qf-ui .note-head .note-del:hover{color:var(--red)}
.qf-ui .project-notes .note p{margin:6px 0 0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}.qf-ui .mention{color:var(--accent);font-weight:600}
.qf-ui .note-form{margin-top:16px}.qf-ui .note-input{position:relative}.qf-ui .note-input textarea{min-height:76px}.qf-ui .note-form .actions{justify-content:flex-end;margin-top:10px}
.qf-ui .note-input .note-pick{min-width:180px;width:max-content;max-width:280px;left:0;right:auto}
.qf-ui .reminder-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid var(--line)}.qf-ui .reminder-row:last-child{border-bottom:0}
.qf-ui .reminder-row strong{display:block}.qf-ui .reminder-row small{display:block;margin-top:4px}.qf-ui .reminder-row .actions{flex:none;gap:8px}.qf-ui .reminder-row .actions button{padding:6px 12px;font-size:13px}
.qf-ui .resume-nudge{margin-top:12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.qf-ui .resume-nudge .settings-check{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0}.qf-ui .resume-nudge input[type=number]{width:3.4rem;margin:0;padding:4px 6px;text-align:center}.qf-ui .resume-nudge small{display:block;margin-top:6px;color:var(--muted)}
.qf-ui .reminder-every{display:flex;gap:8px;margin-top:7px}.qf-ui .reminder-every input{width:90px;flex:none;margin:0}.qf-ui .reminder-every select{margin:0}
.qf-ui .reminder-people{border:0;padding:0;margin:0 0 8px;display:flex;flex-wrap:wrap;gap:8px 18px}.qf-ui .reminder-people legend{font-size:13px;margin-bottom:8px;padding:0}
@media(max-width:700px){.qf-ui .reminder-row{flex-direction:column;align-items:flex-start}}
/* 加载骨架、外观、新手引导 (2026-10-27) */
.qf-skeleton{display:grid;gap:14px;padding:6px 0}.qf-skeleton i{display:block;height:14px;border-radius:7px;background:#edece8}   /* still grey, as the first open's .loading-shell */
.qf-skeleton i:nth-child(1){width:42%}.qf-skeleton i:nth-child(2){width:86%}.qf-skeleton i:nth-child(3){width:73%}.qf-skeleton i:nth-child(4){width:58%}
.qf-ui .account-menu-list:has(.account-theme){min-width:14.5rem}.qf-ui .account-theme{display:flex;gap:4px;padding:4px 6px 6px;margin:2px 0;border-top:1px solid #e7e5e0;border-bottom:1px solid #e7e5e0}
.qf-ui .account-menu-list .account-theme button{flex:1 1 auto;width:auto;justify-content:center;text-align:center;white-space:nowrap;min-height:2rem;padding:.25rem .5rem;font-size:13px;border:1px solid transparent}
.qf-ui .account-menu-list .account-theme button[aria-pressed=true]{background:#edf1f3;border-color:#c5d3db;color:#325a71;font-weight:600}
.qf-tour{position:fixed;inset:0;z-index:210}.qf-tour-hole{position:fixed;border-radius:10px;box-shadow:0 0 0 9999px #26262473;pointer-events:none;transition:all .2s ease}
.qf-tour-card{position:fixed;width:min(320px,calc(100vw - 24px));background:#fff;border-radius:12px;padding:16px 18px;box-shadow:0 18px 44px #26262440}
.qf-tour-card small{display:block;color:var(--qf-ink-3)}.qf-tour-card strong{display:block;margin:4px 0 6px;font-size:16px}.qf-tour-card p{margin:0 0 14px;line-height:1.7;color:#5f5d58}
.qf-tour-actions{display:flex;gap:8px}.qf-tour-actions [data-tour-next]{margin-left:auto}.qf-ui .qf-tour-actions button{padding:8px 14px;min-height:0}
html[data-theme="dark"]{color-scheme:dark}
html[data-theme="dark"] .qf-ui :is(button.primary,a.button.primary,.button.primary){color:#0f1d26}
/* 整体合同收款 (2026-10-27) */
.qf-ui .contract-split td,.qf-ui .contract-split th{white-space:nowrap;padding:10px 12px}.qf-ui .contract-split .amt{text-align:right}.qf-ui .contract-split input{width:9.5rem;text-align:right;margin:0;padding:7px 9px}
.qf-ui .contract-split tr.total td{font-weight:600;border-top:2px solid #e7e5e0}.qf-ui dialog:has(.contract-split){width:min(880px,94vw)}
/* 人员负荷、批量补资料 (2026-10-27) */
.qf-ui .load-table{white-space:normal;table-layout:fixed}.qf-ui .load-table th,.qf-ui .load-table td{vertical-align:top;padding:10px 8px}.qf-ui .load-table thead th:first-child,.qf-ui .load-who{width:120px}
.qf-ui .load-who strong{display:block;font-size:15px}.qf-ui .load-who small{display:block;margin-top:4px}.qf-ui .load-late{color:var(--red);font-weight:600}
.qf-ui .load-table .cal-chip{white-space:normal;margin-bottom:5px;line-height:1.45}.qf-ui .load-table .cal-chip small{display:block;color:var(--qf-amber)}
.qf-ui .node-delay{margin:6px 0 0;color:var(--qf-amber);font-size:14px}
.qf-ui .gap-links{display:inline-flex;gap:6px;flex-wrap:wrap}
.qf-ui .gaps-bar{margin-bottom:14px}.qf-ui .gaps-bar select{width:auto;min-width:150px}
.qf-ui .gaps-table{white-space:normal;table-layout:fixed}.qf-ui .gaps-table th,.qf-ui .gaps-table td{vertical-align:top}.qf-ui .gaps-table thead th:first-child{width:40%}.qf-ui .gaps-table thead th:last-child{width:170px}
.qf-ui .gap-proj .title{text-align:left}.qf-ui .gap-proj small{display:block;margin-top:4px}.qf-ui .gap-other{color:var(--qf-amber)}.qf-ui .gap-other .button-link{padding:0;min-height:0;font-size:inherit}
.qf-ui .gaps-table textarea{min-height:64px;margin:0}
@media(max-width:700px){.qf-ui .load-table{min-width:760px}.qf-ui .gaps-table{min-width:640px}}

/* 暂停项目 · 补恢复日期 (2026-10-27) */
.qf-ui .pp-table{white-space:normal;min-width:1000px}.qf-ui .pp-table td,.qf-ui .pp-table th{vertical-align:top}.qf-ui .pp-table td small{display:block;margin-top:4px}.qf-ui .pp-table .title{text-align:left}.qf-ui .pp-date input{width:10.5rem;margin:0}.qf-ui .pp-acts{white-space:nowrap}.qf-ui .pp-acts button{padding:6px 10px}.qf-ui .pp-reason select{margin:0;min-width:7.5rem}.qf-ui .pp-nudge{display:flex;align-items:center;gap:4px;white-space:nowrap;margin:0}.qf-ui .pp-nudge input[type=number]{width:3.2rem;margin:0;padding:4px 4px;text-align:center}
/* 客户档案 rows open on a click, their buttons quiet at the end (2026-10-29 evening) */
#customer-results tr[data-customer-open]{cursor:pointer}#customer-results tr[data-customer-open]:hover td,#customer-results tr[data-customer-open]:focus-visible td{background:#f7f7f5}#customer-results tr[data-customer-open]:focus-visible{outline:none}#customer-results .row-acts{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}#customer-results .row-acts button.quiet{min-height:0;height:auto;width:auto;padding:4px 8px;margin:0;border:0;background:none;color:#3f6c86;font-size:13px;border-radius:6px}#customer-results .row-acts button.quiet:hover{background:#edf1f3}
.health-chip .health-word{margin-left:4px;font-size:12px;color:var(--qf-ink-3)}
.regions-table thead th:first-child{width:60%}.regions-table td small{display:block;color:var(--muted);margin-top:2px}.regions-table select{min-width:9rem}@media(max-width:700px){.qf-ui .main table.regions-table,.main table.regions-table{min-width:0;width:100%}.regions-table thead th:first-child{width:52%}.regions-table select{min-width:0;width:100%}}
/* a node's attachments, folded (2026-10-30) */
.qf-ui .files-toggle{display:flex;align-items:center;gap:8px;width:100%;min-height:36px;padding:4px 0;margin:0;border:0;background:none;text-align:left;font:inherit;font-size:13px;color:var(--ink);cursor:pointer;box-shadow:none}
.qf-ui .files-toggle b{font-weight:500;white-space:nowrap}.qf-ui .files-toggle .muted{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qf-ui .files-toggle .chev{flex:none;width:8px;height:8px;border-right:1.5px solid var(--qf-ink-3);border-bottom:1.5px solid var(--qf-ink-3);transform:rotate(-45deg);transition:transform .15s}
.qf-ui .files.open .files-toggle .chev{transform:rotate(45deg)}
.qf-ui .files.open .files-toggle{border-bottom:1px solid var(--line);margin-bottom:6px}
/* 逾期原因分组 on 人员负荷 (2026-10-30 evening) */
.qf-ui .delay-groups .panel-title{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}
.qf-ui .delay-sum{display:flex;gap:6px;flex-wrap:wrap}
.qf-ui .delay-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:13px;background:#f1f0ec;color:#5f5d58}
.qf-ui .delay-pill b{font-weight:600}
.qf-ui .delay-pill.outside{background:#f7f0e2;color:var(--qf-amber)}
.qf-ui .delay-cols{display:flex;flex-wrap:wrap;gap:14px 18px;margin-top:12px}
.qf-ui .delay-col{flex:1 1 220px;min-width:0}.qf-ui .delay-col.some{flex-grow:3}.qf-ui .delay-col.many{flex-grow:8}
.qf-ui .delay-chips{columns:220px;column-gap:12px}
.qf-ui .delay-col h3{display:flex;align-items:center;gap:8px;margin:0 0 8px;font-size:14px;font-weight:600}
.qf-ui .delay-col h3 b{font-weight:600;font-size:12px;padding:1px 8px;border-radius:999px;background:#f1f0ec;color:#5f5d58}
.qf-ui .delay-col.outside h3 b{background:#f7f0e2;color:var(--qf-amber)}
.qf-ui .delay-col .cal-chip{display:block;width:100%;white-space:normal;margin-bottom:5px;line-height:1.45;break-inside:avoid}.qf-ui .delay-col .cal-chip small{display:block;color:var(--qf-amber)}
.qf-ui .delay-col.none .cal-chip small{color:var(--qf-ink-3)}
/* 已归档未开票 under its row in 经营财务's 待处理 (2026-10-30 evening) */
.qf-ui .finance-todo .todo-list{display:grid;gap:6px;margin:0 0 12px}
.qf-ui .finance-todo .todo-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border:1px solid #e7e5e0;border-radius:10px;background:#fbfbfa}
.qf-ui .finance-todo .todo-item:hover{background:#f3f2ef}.qf-ui .finance-todo .todo-item.planned{background:#fff;border-style:dashed}
.qf-ui .finance-todo .todo-item a{color:inherit;text-decoration:none}
.qf-ui .finance-todo .todo-main{flex:1;min-width:0}.qf-ui .finance-todo .todo-main span{display:flex;flex-direction:column;min-width:0}
.qf-ui .finance-todo .todo-main strong{font-weight:500;overflow-wrap:anywhere}
.qf-ui .finance-todo .todo-main small{color:var(--qf-ink-3);font-size:12px}.qf-ui .finance-todo .todo-main small em{font-style:normal;color:var(--qf-amber)}
.qf-ui .finance-todo .todo-acts{flex:none;display:flex;align-items:center;gap:14px}.qf-ui .finance-todo .todo-acts a{font-weight:500;font-size:13px;color:#3f6c86}
.qf-ui .finance-todo .todo-acts a.todo-plan{display:inline-flex;align-items:center;justify-content:center;font-weight:400;color:#5f5d58}
.qf-ui .finance-todo .todo-plan{min-width:76px;min-height:30px;padding:2px 10px;margin:0;border:1px solid #e1dfd9;border-radius:8px;background:#fff;box-shadow:none;font:inherit;font-size:13px;color:#5f5d58;cursor:pointer}
.qf-ui .finance-todo .todo-later{display:grid;gap:6px}
@media (max-width:640px){.qf-ui .finance-todo .todo-acts{flex-direction:column;align-items:flex-end;gap:6px}}
.qf-ui .task-list .node .actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.qf-ui .task-list .node .node-delay{margin:4px 0 0}
/* 已逾期 red as everywhere else; 填原因 / 改原因 a small chip right after it (2026-11-01), its tap reach drawn out to 34px */
.qf-ui .task-list .node .late{color:var(--qf-red)}
.qf-ui .main button.delay-link{position:relative;display:inline-flex;align-items:center;vertical-align:middle;min-height:26px;height:26px;padding:0 9px;margin:0;border:1px solid #3f6c86;border-radius:6px;background:#fff;color:#3f6c86;font:inherit;font-size:13px;font-weight:500;line-height:1;cursor:pointer}
.qf-ui .main button.delay-link::after{content:"";position:absolute;inset:-4px -3px}
.qf-ui .node-head>.delay-link{flex-shrink:0}
.qf-ui .finance-todo .todo-more{display:inline-flex;align-items:center;gap:8px;justify-self:start;min-height:32px;padding:2px 4px;margin:0;border:0;background:none;box-shadow:none;font:inherit;font-size:13px;color:#3f6c86;cursor:pointer}
.qf-ui .finance-todo .todo-more .chev{width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .15s}
.qf-ui .finance-todo .todo-more[aria-expanded="true"] .chev{transform:rotate(-135deg) translateY(-2px)}

