:root{--navy:#24345c;--navy2:#1b2747;--primary:#5664d8;--blue:#edf0ff;--line:#e4e7f0;--red:#c53f4d;--amber:#b97613;--green:#218761}*{box-sizing:border-box}body{margin:0;background:#f7f8fc;color:#26324a;font:15px Arial,"Microsoft YaHei",sans-serif;display:flex;min-height:100vh}aside{width:192px;background:var(--navy2);color:#d9e1ff;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column}.brand{padding:22px 18px 17px;border-bottom:1px solid #33436a}.brand b{display:block;color:#fff;font-size:19px;letter-spacing:.3px}.brand b:before{content:'✦';color:#aeb8ff;margin-right:8px}.brand span{display:block;margin-top:7px;font-size:12px;color:#a9b9e5}nav{padding:12px 9px}nav p{font-size:11px;letter-spacing:.5px;color:#8192c0;margin:17px 7px 7px}.nav{display:block;width:100%;border:0;background:transparent;color:#c9d4f4;padding:11px 13px;border-radius:9px;text-align:left;cursor:pointer;font:inherit;margin:2px 0}.nav:hover{color:#fff}.nav.active{background:#5969df;color:#fff;font-weight:bold;box-shadow:0 7px 16px #0d163d44}.side-note{margin:auto 16px 16px;padding-top:14px;border-top:1px solid #35466f;color:#97a9d1;font-size:12px;line-height:1.6}.shell{margin-left:192px;min-width:0;width:calc(100% - 192px)}header{background:#fff;border-bottom:1px solid var(--line);padding:23px 34px;display:flex;justify-content:space-between;align-items:center}h1{font-size:24px;margin:0 0 6px;color:var(--navy)}header p{margin:0;color:#7a879c}main{max-width:1320px;margin:0 auto;padding:26px 30px}.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:18px}.card,article{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 6px 20px #27355d0a}.card{padding:20px}.card span{display:block;color:#78849a;margin-bottom:9px}.card strong{font-size:24px;color:var(--navy)}.grid{display:grid;gap:18px;margin:18px 0}.two{grid-template-columns:1.3fr 1fr}article{padding:21px}h2{font-size:18px;margin:0 0 15px;color:var(--navy)}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:15px;min-width:700px}th{text-align:left;background:#f1f3ff;color:#596789;padding:12px 11px;font-size:14px}td{padding:13px 11px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.45}small{display:block;color:#7b879a;margin-top:4px;font-size:13px}.tag{border-radius:999px;padding:4px 9px;font-weight:bold;font-size:13px}.tag.high{color:#a72b38;background:#ffedf0}.tag.mid{color:#9a620e;background:#fff4dd}.tag.low{color:#197553;background:#e5f7ef}.risk{display:flex;gap:11px;padding:12px 0;border-bottom:1px solid var(--line)}.risk>span{height:27px;min-width:28px;text-align:center;padding-top:4px;border-radius:7px;background:#fff2d8;color:var(--amber);font-weight:bold}.risk.high>span{background:#ffebee;color:var(--red)}.risk p{margin:4px 0;line-height:1.55}form{display:grid;gap:14px}label{display:grid;gap:6px;color:#536079;font-weight:bold}input,select,textarea{padding:11px;border:1px solid #d2d8e7;border-radius:8px;font:inherit;background:#fff;color:#26324a}textarea{resize:vertical;line-height:1.5}button{background:var(--primary);color:#fff;border:0;border-radius:8px;padding:11px 16px;font-weight:bold;cursor:pointer;box-shadow:0 5px 10px #5664d82e}button:hover{background:#4351c4}.secondary{background:#fff;color:#5364d4;border:1px solid #cfd5fa;box-shadow:none}.hint{color:#718096;line-height:1.65}li{margin:11px 0}code{font-size:12px;background:#f0f2fb;padding:2px 4px;border-radius:3px}.answer{white-space:pre-wrap;min-height:160px;padding:12px;background:#f8f9fe;border:1px solid var(--line);border-radius:9px}.toolbar{display:flex;align-items:center;justify-content:space-between;padding:4px 2px 14px}.toolbar b{display:block;font-size:18px;color:var(--navy)}.eyebrow{display:block;color:#7d8ab2;font-size:12px;margin-bottom:4px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:13px}.drawer-layer{position:fixed;inset:0;z-index:10;pointer-events:none}.drawer-layer.open{pointer-events:auto}.drawer-mask{position:absolute;inset:0;background:#202b4a66;opacity:0;transition:.18s}.open .drawer-mask{opacity:1}.drawer{position:absolute;right:0;top:0;width:min(570px,100vw);height:100%;background:#fff;box-shadow:-10px 0 34px #1723402e;transform:translateX(100%);transition:.2s;display:flex;flex-direction:column}.open .drawer{transform:translateX(0)}.drawer header{padding:21px 25px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:flex-start}.drawer header h2{margin:0}.drawer .close{width:36px;height:36px;padding:0;border-radius:50%;font-size:26px;line-height:1;background:#f1f3fb;color:#55627d;box-shadow:none}.drawer-content{overflow:auto;padding:24px 25px 34px}.drawer-section{font-size:14px;font-weight:bold;color:#4c5cbe;background:#f0f2ff;border-radius:7px;padding:8px 10px;margin:4px 0 1px}.nodes-title{display:flex;justify-content:space-between;align-items:center}.text-btn{padding:3px 7px;background:transparent;color:#5364d4;box-shadow:none;font-size:13px}.upload-box{border:2px dashed #b9c3ef;background:#f8f9ff;border-radius:10px;min-height:106px;display:grid;place-content:center;text-align:center;gap:7px;color:#536079;cursor:pointer;padding:16px}.upload-box b{color:#4c5cbe;font-size:15px}.upload-box span{font-size:13px;color:#7d8aa5}.upload-box.dragging{border-color:#5664d8;background:#eef0ff}.upload-box input{display:none}.node-row{display:grid;grid-template-columns:150px minmax(0,1fr) 32px;gap:8px;margin:8px 0}.remove-node{padding:0;font-size:20px;background:#fff0f1;color:#c53f4d;border:1px solid #ffd7db;box-shadow:none}#toast{position:fixed;right:24px;bottom:24px;opacity:0;transform:translateY(12px);background:#218761;color:#fff;padding:12px 16px;border-radius:8px;transition:.2s;z-index:12}#toast.show,#toast.bad{opacity:1;transform:translateY(0)}#toast.bad{background:#c53f4d}@media(max-width:900px){aside{width:62px}.brand{padding:20px 8px;text-align:center}.brand span,.brand b{font-size:0}.brand b:before{content:'✦';font-size:17px;margin:0}.nav{font-size:0;text-align:center;height:44px}.nav:after{content:'•';font-size:22px}.side-note{display:none}.shell{margin-left:62px;width:calc(100% - 62px)}.cards,.two{grid-template-columns:1fr}header{padding:17px}main{padding:16px}.form-row{grid-template-columns:1fr}.node-row{grid-template-columns:1fr 1fr 32px}}
:root{}.toolbar-actions{display:flex;gap:9px}.search-bar{display:grid;grid-template-columns:minmax(210px,2fr) repeat(3,minmax(110px,1fr)) auto auto;align-items:end;gap:10px;margin:4px 0 18px}.search-bar button{height:42px}.pagination{display:flex;align-items:center;justify-content:space-between;padding-top:14px;color:#758198;font-size:13px}.small-btn{padding:7px 10px;margin-left:6px;font-size:13px}.small-btn:disabled{opacity:.45;cursor:not-allowed}.row-actions{white-space:nowrap}.link-btn{background:transparent;color:#5061ce;padding:3px 5px;box-shadow:none;font-size:13px}.link-btn:hover{background:#edf0ff}.danger-link{color:#c53f4d}.node-summary{position:relative;background:transparent;color:#26324a;box-shadow:none;padding:0;text-align:left;min-width:120px}.node-summary:hover{background:transparent;color:#4351c4}.node-summary strong{display:block;font-size:16px;line-height:1.1}.node-summary small{max-width:155px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.node-tooltip{display:none;position:absolute;z-index:20;left:-10px;top:100%;width:300px;padding:11px;background:#273452;color:#fff;border-radius:8px;box-shadow:0 10px 22px #1723404d}.node-summary:hover .node-tooltip{display:block}.node-tip-row{display:grid;grid-template-columns:86px 1fr auto;gap:6px;padding:6px 0;border-bottom:1px solid #ffffff24;align-items:center;font-size:12px}.node-tip-row:last-child{border:0}.node-tip-row .tag{font-size:11px;padding:2px 5px}.node-state{display:inline-block;color:#218761;background:#e5f7ef;border-radius:999px;padding:5px 8px;font-size:12px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:19px}.detail-grid span{display:grid;gap:4px;padding:10px;background:#f7f8fc;border-radius:8px;color:#7a879c;font-size:13px}.detail-grid b{color:#26324a;font-size:14px}.detail-actions{display:flex;gap:10px;margin:12px 0 22px}.drawer h3{font-size:14px;margin:19px 0 7px;color:#5061a0}.detail-copy{white-space:pre-wrap;margin:0;padding:11px;background:#f8f9fd;border-radius:8px;color:#526079;line-height:1.6}.nodes-list{display:grid;gap:9px;margin-bottom:19px}.node-card{display:flex;justify-content:space-between;gap:12px;padding:13px;border:1px solid var(--line);border-radius:9px}.node-card>div{display:grid;gap:5px}.node-card span{color:#66748c}.node-card .tag{align-self:start}.category-list{border:1px solid var(--line);border-radius:9px;margin-bottom:18px}.category-list>div{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}.category-list>div:last-child{border:0}.empty{text-align:center;color:#7b879a;padding:28px}@media(max-width:900px){.search-bar{grid-template-columns:1fr 1fr}.search-bar input{grid-column:span 2}.detail-grid{grid-template-columns:1fr}.node-tooltip{left:auto;right:0;width:260px}}

/* Global notices stay clear of form controls and are shared by every module. */
#toast{top:24px;bottom:auto;left:50%;right:auto;max-width:min(560px,calc(100vw - 32px));transform:translate(-50%,-12px);text-align:center;z-index:1000}#toast.show,#toast.bad{transform:translate(-50%,0)}
.form-parse-entry.parsing{border-color:#5664d8;background:#f0f2ff;pointer-events:none}.form-parse-entry.parsing .upload-box{opacity:.65}.form-parse-entry.parsing b:before{content:'◌';display:inline-block;margin-right:7px;animation:contract-spin 1s linear infinite}.form-parse-entry.done{border-color:#79c6a5;background:#f3fbf7}.contract-parse-risks{display:grid;gap:8px}.contract-parse-risks .hint{margin:0}.contract-parse-risk{display:grid;gap:4px;padding:11px 12px;border:1px solid #f0d9a8;border-left:4px solid #c98c25;border-radius:8px;background:#fffaf0}.contract-parse-risk.高{border-color:#f2bec4;border-left-color:#c53f4d;background:#fff7f8}.contract-parse-risk.低{border-color:#bfe7d5;border-left-color:#218761;background:#f5fcf8}.contract-parse-risk b{font-size:13px}.contract-parse-risk span{line-height:1.55;color:#536079}.contract-parse-risk small{margin:0;color:#5664d8}@keyframes contract-spin{to{transform:rotate(360deg)}}
/* Contract node timeline and dashboard presentation refinements */
.contract-ledger .table-wrap, .nearby-contracts .table-wrap { overflow: visible; }
.node-summary { position: relative; border: 0; background: transparent; padding: 0; text-align: left; color: inherit; font-weight: 400; cursor: default; }
.node-summary strong { display: block; font-size: 14px; font-weight: 400; color: #253858; }
.node-summary > span:not(.node-tooltip) { display: block; margin-top: 3px; color: #6b7a90; font-size: 12px; font-weight: 400; }
.node-tooltip { top: auto; bottom: calc(100% + 10px); left: -12px; z-index: 1005; width: 340px; padding: 14px 16px; border: 1px solid #dfe7f5; border-radius: 10px; box-shadow: 0 12px 28px rgba(29, 52, 91, .18); }
.node-tooltip em { display: block; margin-bottom: 10px; font-style: normal; font-size: 13px; font-weight: 500; color: #253858; }
.node-tip-row { position: relative; display: grid; grid-template-columns: 10px minmax(0, 1fr) auto; align-items: center; gap: 9px; min-height: 41px; padding: 0 0 10px; color: #61708a; font-weight: 400; }
.node-tip-row:last-child { padding-bottom: 0; }
.node-tip-row:not(:last-child)::before { content: ''; position: absolute; top: 16px; left: 4px; height: calc(100% - 7px); width: 1px; background: #dbe4f2; }
.node-tip-row i { position: relative; z-index: 1; width: 9px; height: 9px; border-radius: 50%; background: #d9a441; box-shadow: 0 0 0 3px #fff8e7; }
.node-tip-row.completed i { background: #2f9e70; box-shadow: 0 0 0 3px #eaf7f0; }
.node-tip-row.overdue i { background: #d95050; box-shadow: 0 0 0 3px #fff0f0; }
.timeline-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.timeline-copy > span { color: #52627b; font-size: 12px; font-weight: 400; }
.timeline-copy small { overflow: hidden; color: #253858; font-size: 13px; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
.timeline-state { display: inline-flex; align-items: center; border-radius: 999px; padding: 3px 7px; font-size: 11px; font-weight: 400; white-space: nowrap; }
.timeline-state.completed { color: #217654; background: #eaf7f0; }
.timeline-state.overdue { color: #bd4141; background: #fff0f0; }
.timeline-state.pending { color: #9a6815; background: #fff8e7; }
.dashboard-stack { grid-template-columns: minmax(0, 1fr); }
.dashboard-stack > article { min-width: 0; }
.module-title { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.module-title h2 { margin-bottom: 5px; }
.module-title p { margin: 0; color: #8390a5; font-size: 13px; }
.more-link { flex: 0 0 auto; border: 0; background: transparent; color: #3568d4; font-size: 14px; font-weight: 400; cursor: pointer; }
.more-link:hover { color: #2457be; text-decoration: underline; }
@media (max-width: 760px) { .contract-ledger .table-wrap, .nearby-contracts .table-wrap { overflow-x: auto; } .node-tooltip { left: 0; width: min(340px, calc(100vw - 36px)); } }
.service-control { border-color: #f2d7d7; }
.service-control .danger-button { background: #c94848; color: #fff; border-color: #c94848; }
.service-control .danger-button:hover:not(:disabled) { background: #ad3535; border-color: #ad3535; }
.service-control .danger-button:disabled { opacity: .65; cursor: wait; }
/* Wide-screen layout and readable contract-node timeline */
main { max-width: none; width: 100%; padding-left: clamp(28px, 3.5vw, 72px); padding-right: clamp(28px, 3.5vw, 72px); }
.more-link { padding: 0; background: transparent !important; box-shadow: none !important; }
.table-wrap:has(.node-summary) { overflow: visible; }
.node-summary { z-index: 1; }
.node-summary:hover { z-index: 1010; }
.node-tooltip { background: #ffffff; color: #253858; }
.node-tooltip .node-tip-row { border-color: #e7edf7; color: #52627b; }
.node-tooltip .timeline-copy > span, .node-tooltip .timeline-copy small { color: #253858; }
.nearby-contracts .table-wrap { overflow: visible; }
@media (max-width: 900px) { main { padding-left: 16px; padding-right: 16px; } .table-wrap:has(.node-summary) { overflow-x: auto; } }
.node-card { align-items: flex-start; }
.node-card-copy { min-width: 0; flex: 1 1 auto; }
.node-card-copy span { overflow-wrap: anywhere; }
.node-card .node-actions { display: flex; flex: 0 0 auto; align-items: center; justify-content: flex-end; gap: 8px; min-width: max-content; }
.node-card .node-actions .small-btn { margin: 0; white-space: nowrap; }
.node-card .node-actions small { margin: 0; white-space: nowrap; }
@media (max-width: 520px) { .node-card { gap: 8px; } .node-card .node-actions { flex-wrap: wrap; justify-content: flex-end; min-width: 82px; } }
.priority-risks { min-height: 362px; }
.priority-risks .module-title { align-items: center; margin-bottom: 4px; }
.priority-risks .module-title h2 { margin: 0; }
.risk-scroll { height: 290px; overflow-y: auto; overscroll-behavior: contain; padding-right: 5px; }
.risk-scroll::-webkit-scrollbar { width: 6px; }
.risk-scroll::-webkit-scrollbar-thumb { border-radius: 6px; background: #c9d4e8; }
.risk { align-items: flex-start; }
.risk-copy { min-width: 0; flex: 1 1 auto; }
.risk-detail-btn { flex: 0 0 auto; margin-top: 2px; }