/* TCM data platform · shared visual and interaction system */
:root{--ink:#243b33;--ink2:#516159;--mute:#77847c;--faint:#a1aaa4;--bg:#f5f7f4;--card:#fff;--inner:#f8faf7;--line:#e1e7e0;--line2:#edf0eb;--pine:#2b6553;--pine-d:#1e503f;--pine-l:#e8f0e9;--pine-ll:#f1f6ef;--xuan:#203e32;--xuan2:#2d4c3e;--cin:#af5141;--cin-l:#f9eeea;--ochre:#b58b44;--ochre-l:#faf4e7;--indigo:#55788e;--indigo-l:#edf3f6;--r:7px}
body{font-size:13px;line-height:1.65;letter-spacing:.05px}h1,h2,h3{font-family:var(--sans);letter-spacing:0}b,strong{font-weight:600}::selection{background:#dae8da}*{scrollbar-width:thin;scrollbar-color:#cfd8ce transparent}.ui-icon{vertical-align:middle;flex-shrink:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.page{padding:28px 30px 48px;max-width:1760px;margin:0 auto}.page>.ph{align-items:center;margin-bottom:23px;gap:20px}.ph h1{font-size:25px;font-weight:650;letter-spacing:.2px;line-height:1.5}.page>.ph .crumb{display:none}.page-description{font-size:12px;color:var(--mute);margin:5px 0 0;max-width:800px}.ph .acts{flex-wrap:wrap;justify-content:flex-end}.card{border-color:var(--line);border-radius:11px;padding:20px;margin-bottom:18px;box-shadow:0 2px 3px #243b3302}.card>.hd{margin-bottom:17px}.card>.hd h3{font-size:14px;font-weight:600}.grid2,.grid3,.grid4{gap:18px}.grid2>*,.grid3>*,.grid4>*,.lay>*{min-width:0}.btn{height:36px;padding:0 14px;font-size:12px;justify-content:center;transition:background .14s,border-color .14s,box-shadow .14s}.btn.pri{box-shadow:0 2px 2px #1d4a3612}.btn:hover:not([disabled]){box-shadow:0 2px 5px #21412f0d}.btn:disabled{box-shadow:none}.btn.sm{height:29px}.input,.select,select{height:36px;font-size:12px}.input::placeholder{color:#9aa49d}.input[readonly]:not([data-date]):not([data-month]){background:var(--inner);cursor:default}.filter{gap:12px 20px;padding:18px 20px;align-items:flex-end}.filter>label{flex-direction:column;align-items:flex-start;gap:6px;font-size:11px;color:var(--mute)}.filter .acts{align-items:center;align-self:flex-end}.filter select{max-width:280px}.filter .btn.pri{background:var(--pine-l);border-color:var(--pine-l);color:var(--pine);box-shadow:none}.filter .btn.pri:hover{background:#dce9dc}.filter-status{font-size:11px;color:var(--pine);margin-right:4px}.filter .btn{height:36px}.stat{border-radius:10px;padding:20px;border-color:var(--line);min-width:0}.stat .l{font-size:11px;color:var(--mute)}.stat .v{font-size:29px;line-height:1.45;margin-top:6px;font-weight:600;color:var(--ink);letter-spacing:-.7px}.stat .v small{font-size:11px;letter-spacing:0}.tag{font-size:11px;height:23px;border-radius:5px;padding:0 8px;border-color:transparent}.tag.ok{background:#edf4eb;border-color:transparent;color:#426a3b}.tag.warn{background:#fbf4e5;border-color:transparent;color:#956f2d}.tag.bad{background:#faeeea;border-color:transparent;color:#a75040}.tag.info{background:#edf3f6;border-color:transparent;color:#55798e}.tag.dot::before{width:5px;height:5px}.table-block{min-width:0}.table-scroll{overflow:auto;width:100%;outline-offset:-3px}.tbl{font-size:12px;min-width:640px}.tbl th{height:43px;padding:11px 18px;background:#f8faf7;font-size:11px;color:#788277;border-bottom-color:var(--line2)}.tbl td{padding:16px 18px;border-bottom-color:var(--line2)}.tbl tr:last-child td{border-bottom:0}.tbl tr:hover td{background:#f6f9f3}.tbl td.ops{position:sticky;right:0;background:#fff;box-shadow:-8px 0 9px -9px #425d4433;z-index:1}.tbl tr:hover td.ops{background:#f6f9f3}.tbl td.ops a{display:inline-block;margin-left:14px;padding:5px 0;font-size:12px}.tbl td.ops a:first-child{margin-left:0}.tbl .sub{font-size:11px;margin-top:4px}.tbl th.num,.tbl td.num{font-variant-numeric:tabular-nums}.tbl tbody tr[hidden]{display:none}.pager{border-top:1px solid var(--line2);padding:14px 18px;font-size:11px;gap:8px}.pager .pg{height:28px;min-width:28px;border-radius:5px}.pager .pg.on{background:var(--pine-l);border-color:transparent}.pager select{min-width:90px;height:28px;font-size:11px}.empty{padding:48px 20px;font-size:13px}.empty .ui-icon{display:block;margin:0 auto 12px;width:30px;height:30px;color:#a5b5a2}.empty p{font-size:11px;color:var(--mute);margin:6px 0 14px}.tabs{gap:20px;margin-bottom:20px}.tabs a{padding:11px 4px;font-size:13px}.tabs a:hover{color:var(--pine)}.seg{padding:3px;gap:3px;background:var(--inner);border:1px solid var(--line2);border-radius:8px}.seg a{border:0!important;border-radius:5px;padding:4px 12px;font-size:12px}.seg a.on{background:#fff;color:var(--pine);box-shadow:0 1px 4px #1c392218}.form .fi{margin-bottom:21px}.form .fi>label{font-size:12px;color:var(--ink);margin-bottom:8px}.form .fi .hint{font-size:11px;margin-top:7px}.form .opts{gap:10px 0}.form textarea{min-height:90px}.upz{min-height:120px;justify-content:center;gap:8px;background:#fafbf8}.upz-n::before{content:'↳ '}.upz-t{font-size:13px}.upz-h{font-size:11px}.mask{background:#1c302e47;backdrop-filter:blur(2px)}.drawer{width:580px;max-width:100vw;box-shadow:-10px 0 50px #173d291a}.drawer .dh{padding:24px;border-bottom:1px solid var(--line2)}.drawer .dh h3,.modal .dh h3{font-size:18px}.drawer .db{padding:24px}.drawer .df{padding:16px 24px;background:#fcfdfa;box-shadow:0 -3px 10px #23392304}.drawer .x,.modal .x{min-width:30px;min-height:30px;border-radius:6px}.drawer .x:hover,.modal .x:hover{background:var(--inner)}.modal{border-radius:14px;border:1px solid var(--line);box-shadow:0 20px 70px #15302d25}.modal .dh{padding:24px 24px 12px}.modal .db{padding:8px 24px 24px}.modal .df{padding:16px 24px;background:#fcfdfa;border-radius:0 0 14px 14px}.toast{background:#fff;color:var(--pine);border:1px solid #dbe6d7;border-radius:9px;box-shadow:0 6px 24px #2139231a;padding:11px 20px}.toast::before{content:'✓';margin-right:10px;font-weight:700}.toast.bad{background:#fff;color:var(--cin);border-color:#efd6cf}.toast.bad::before{content:'!'}
.back-link{display:inline-flex;align-items:center;gap:6px;font-size:11px;margin-bottom:10px;color:var(--mute)}.src{background:#fbfcf8;border-color:var(--line2);font-size:15px;line-height:2.1}.seal{opacity:.9}.states{position:static;transform:none;width:fit-content;max-width:100%;flex-wrap:wrap;background:#fff;color:var(--mute);box-shadow:none;border:1px solid var(--line);border-radius:7px;margin:0 0 18px;padding:5px;font-size:10px}.states .lb{font-size:10px}.states button{background:transparent;color:var(--ink2);border:0;border-radius:4px;font-size:11px;height:28px}.states button.on{background:var(--pine-l);color:var(--pine)}.spec-fab{display:none}.spec-open .spec-fab{display:none}.spec{width:460px;max-width:96vw;z-index:85}.spec-mask{background:#14372b22;z-index:84}.spec-h{background:var(--pine);padding:24px 42px 20px 24px}.spec-h .t{font-family:var(--sans)}.spec-body{padding:8px 24px 30px}.spec-close{top:22px}.note,.rule,.env{line-height:1.8}.cats a{font-family:var(--sans)!important;font-size:13px!important}.cats a.on{background:var(--pine-l)!important;color:var(--pine)!important}.page .lay{gap:20px}.act{bottom:16px!important;left:30px!important;right:30px!important;border-radius:10px!important;box-shadow:0 4px 25px #24443014!important;flex-wrap:wrap}.compact .tbl td{padding-top:9px;padding-bottom:9px}.compact .stat{padding:14px 18px}.compact .card{padding-top:15px;padding-bottom:15px}.compact .card.flush{padding:0}.compact .page>.ph{margin-bottom:17px}
/* Page-family adaptations, including pages with local styles. */
body[data-page='ag-workflow'] .canvas{background-color:#f8faf6;background-size:20px 20px}body[data-page='dg-label-bench'] .lay{grid-template-columns:180px minmax(0,1fr) minmax(0,1fr)}body[data-page='dg-label-bench'] .page{padding-bottom:130px}body[data-page='ed-archive'] .who{flex-wrap:wrap}body[data-page='ed-archive'] .who .stat{flex:1;min-width:110px}body[data-page='map'] .subs{grid-template-columns:repeat(3,minmax(0,1fr))}body[data-page='map'] .hero{background:var(--xuan);padding:30px}body[data-page='map'] .hero h1{font-size:25px}body[data-page='map'] .hero .flow{gap:5px}body[data-page^='cl-'] .ah{background:#fff;color:var(--ink2);border-bottom:1px solid var(--line);padding:22px 28px 0}body[data-page^='cl-'] .ah .t b{font-family:var(--sans);color:var(--ink)}body[data-page^='cl-'] .ah .t .tag{background:var(--pine-l)!important;border:0;color:var(--pine)!important}body[data-page^='cl-'] .ah .who span{color:var(--ink2)!important}body[data-page^='cl-'] .ah .pt{background:var(--inner);padding:12px;color:var(--ink2)}body[data-page^='cl-'] .ah .pt b{color:var(--ink)}body[data-page^='cl-'] .ah nav a{color:var(--mute);padding:12px 16px}body[data-page^='cl-'] .ah nav a.on{color:var(--pine);border-color:var(--pine)}body[data-page^='cl-'] .cbody{padding:22px 24px 36px}body[data-page^='cl-'] .ws.solo .as .cbody{max-width:1120px}body[data-page^='cl-'] .qa button{padding:22px}body[data-page^='cl-'] .qa b{font-family:var(--sans)}body[data-page^='cl-'] .as{box-shadow:none}body[data-page^='cl-'] .comp{padding:15px 24px;background:#fcfdfa}body[data-page^='cl-'] .comp .row{align-items:flex-end}body[data-page^='cl-'] .states{margin:0 0 18px}body[data-page='plaza'] .hero{padding:32px 30px 24px}body[data-page='plaza'] .hero h1{font-size:28px}body[data-page^='plaza'] .top{padding:0 30px;height:50px}body[data-page^='plaza'] .top .lg{font-family:var(--sans);font-size:15px}body[data-page^='plaza'] .wrap{padding-left:30px;padding-right:30px}body[data-page='plaza'] .mc:hover{box-shadow:0 6px 25px #23462e0b}
@media(max-width:1150px){.page{padding:24px 24px 50px}.filter{gap:12px 16px}.tbl td,.tbl th{padding-left:14px;padding-right:14px}.page .lay{gap:16px}body[data-page='dg-follow-edit'] .lay,body[data-page='dg-follow-tpl'] .lay{grid-template-columns:minmax(0,1fr) 310px}}
@media(max-width:900px){.page>.ph{align-items:flex-start}.ph h1{font-size:23px}.grid4,.head,.met,.apps{grid-template-columns:repeat(2,minmax(0,1fr))!important}.page .lay{grid-template-columns:1fr!important}.page .lay>.q{max-height:220px;overflow:auto}.page .lay>.q #q{display:flex;gap:8px}.page .lay>.q #q>a{flex:0 0 180px}.page .src{max-height:440px}.page .cats:not(.tabs){display:flex;gap:8px;flex-wrap:wrap}.page .cats a{flex-shrink:0}.act{left:24px!important;right:24px!important}.ph .acts{gap:7px}body[data-page='map'] .subs{grid-template-columns:repeat(2,minmax(0,1fr))}body[data-page='plaza'] .wrap{grid-template-columns:150px minmax(0,1fr);gap:18px}.ws:not(.solo) .host{display:none}body[data-page^='cl-'] .as{width:100%;flex:1}.perm{grid-template-columns:1fr!important}}
@media(max-width:600px){.page{padding:20px 16px 45px}.page>.ph{flex-wrap:wrap;gap:14px;margin-bottom:18px}.page>.ph .acts{margin-left:0;justify-content:flex-start;width:100%}.ph h1{font-size:23px}.page-description{font-size:11px}.card{padding:16px;margin-bottom:14px}.stat{padding:16px}.stat .v{font-size:24px}.grid2,.grid3,.grid4,.types,.head,.met,.tree,.id,.qa,.parse,.pv,.src3,.tiers{grid-template-columns:1fr!important}.grid4,.head,.met{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px!important}.filter{padding:16px;gap:12px;align-items:stretch}.filter>label{flex:1 1 135px}.filter .input,.filter select{width:100%!important;max-width:100%;min-width:0}.filter .acts{margin-left:0;flex-basis:100%;justify-content:flex-end}.tabs{gap:15px;overflow:auto;white-space:nowrap}.tbl{min-width:650px}.tbl td.ops{padding-left:12px;padding-right:12px}.pager{padding:12px;font-size:10px;gap:5px}.pager .range-label{display:none}.drawer .dh,.drawer .db{padding:20px}.drawer .df{padding:14px 20px}.modal{max-width:calc(100vw - 24px)}.states{width:100%}.act{left:12px!important;right:12px!important;bottom:10px!important;padding:12px!important;gap:8px!important}.act .lk{flex-wrap:wrap;gap:8px}.act .grow{flex-basis:100%}.page .asm{grid-template-columns:1fr}.page .art{padding:20px}.page .kv{grid-template-columns:78px minmax(0,1fr)}body[data-page='map'] .subs{grid-template-columns:1fr}body[data-page='map'] .hero{padding:22px;display:block}body[data-page='map'] .hero .seal{display:none}body[data-page='map'] .paths{grid-template-columns:1fr}body[data-page^='cl-'] .ah{padding:18px 16px 0}body[data-page^='cl-'] .ah .t{flex-wrap:wrap}body[data-page^='cl-'] .ah .who{display:none}body[data-page^='cl-'] .ah .pt{flex-wrap:wrap;gap:8px}body[data-page^='cl-'] .cbody{padding:18px 16px}body[data-page^='cl-'] .comp{padding:12px 16px}body[data-page^='plaza'] .top{padding:0 16px;gap:12px;overflow:auto;white-space:nowrap}body[data-page^='plaza'] .top .r{display:none}body[data-page^='plaza'] .wrap{padding:0 16px 35px;grid-template-columns:1fr}body[data-page='plaza'] .hero{padding:24px 16px}body[data-page='plaza'] .wrap>aside{display:none}body[data-page='plaza-detail'] .lay{grid-template-columns:1fr}.score{flex-wrap:wrap}}
.discard-dialog{border:1px solid var(--line);border-radius:12px;padding:25px;width:420px;max-width:calc(100vw - 32px);box-shadow:0 20px 80px #10251f30;color:var(--ink)}.discard-dialog::backdrop{background:#173e2955}.discard-dialog h3{font-size:18px}.discard-dialog p{font-size:12px;color:var(--mute);margin:12px 0 22px}.discard-dialog .row{justify-content:flex-end}
@media(max-width:600px){.verdict{flex-wrap:wrap}body[data-page='ag-workflow'] .nd{width:100%;flex-wrap:wrap}body[data-page='ag-workflow'] .nd .br{position:static;transform:none;margin:6px 0 0;white-space:normal}body[data-page='ag-workflow'] .nd .br::before{display:none}body[data-page='ed-case-detail'] .st .h{flex-wrap:wrap}body[data-page=ed-ask] .states{position:static!important;margin:0 0 12px!important}}
body.embedded[data-page^='plaza'] .top{display:none}
/* 抽屉、弹窗内的表格按容器宽度排版，不沿用列表页的最小宽度（否则右侧列被挤出看不到） */
.drawer .tbl,.modal .tbl{min-width:0}.drawer .db,.modal .db{overflow-x:auto}.drawer .tbl td>.input:only-child,.modal .tbl td>.input:only-child{width:100%}
