:root{color:#17202a;background:#eef2f5;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--bg: #eef2f5;--surface: #ffffff;--surface-soft: #f8fafb;--line: #d9e0e6;--text: #17202a;--muted: #667789;--primary: #1769aa;--primary-strong: #0f4d80;--accent: #25846f;--warning: #a86517;--danger: #c2413b;--shadow: 0 18px 45px rgba(23, 32, 42, .1)}*{box-sizing:border-box}body{margin:0;min-width:320px}button,input,select,textarea{font:inherit}button{cursor:pointer}.login-page{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(380px,.85fr);min-height:100vh;background:linear-gradient(120deg,#1769aae0,#25846fc7),url(https://images.unsplash.com/photo-1497366754035-f200968a6e72?auto=format&fit=crop&w=1600&q=80) center/cover}.login-visual{display:flex;flex-direction:column;justify-content:flex-end;min-height:100vh;padding:clamp(32px,7vw,96px);color:#fff}.brand-mark,.app-logo,.module-icon{display:inline-grid;place-items:center;width:48px;height:48px;border-radius:8px;background:#fff;color:var(--primary);box-shadow:0 12px 34px #0f4d802e}.login-visual h1{max-width:720px;margin:26px 0 16px;font-size:clamp(42px,6vw,72px);line-height:1.02;letter-spacing:0}.login-visual p{max-width:580px;margin:0;color:#ffffffe0;font-size:18px;line-height:1.7}.login-stats{display:flex;flex-wrap:wrap;gap:12px;margin-top:34px}.login-stats span{border:1px solid rgba(255,255,255,.38);border-radius:999px;padding:9px 14px;background:#ffffff21;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.login-panel{display:grid;align-items:center;padding:32px;background:#fffffff0}.login-form{display:grid;gap:20px;width:min(100%,420px);margin:0 auto}.eyebrow{margin:0 0 8px;color:var(--accent);font-size:12px;font-weight:800;letter-spacing:0;text-transform:uppercase}.login-form h2{margin:0;font-size:32px}.login-form label{display:grid;gap:8px;color:var(--muted);font-size:14px;font-weight:700}.login-form input,.search-box input{width:100%;border:1px solid var(--line);outline:none;background:#fff;color:var(--text)}.login-form input{height:46px;border-radius:8px;padding:0 14px}.login-form input:focus,.search-box:focus-within{border-color:#1769aab3;box-shadow:0 0 0 4px #1769aa1f}.password-field{position:relative;display:flex;align-items:center}.password-field input{padding-right:48px}.password-field .icon-button{position:absolute;right:5px}.form-error{margin:0;border-radius:8px;padding:10px 12px;background:#c2413b1a;color:var(--danger);font-size:14px}.hint{margin:0;color:var(--muted);font-size:13px;text-align:center}.primary-button,.text-button,.icon-button,.nav-item,.quick-grid button,.sidebar-backdrop{border:0}.primary-button{min-height:44px;border-radius:8px;padding:0 18px;background:var(--primary);color:#fff;font-weight:800;box-shadow:0 12px 24px #1769aa38}.primary-button:hover{background:var(--primary-strong)}.primary-button:disabled,.row-action:disabled,.icon-action:disabled,.outline-button:disabled,.secondary-button:disabled,.danger-button:disabled{cursor:not-allowed;opacity:.55}.primary-button.compact,.outline-button.compact{min-height:38px;white-space:nowrap}.app-shell{display:grid;grid-template-columns:auto minmax(0,1fr);min-height:100vh;background:var(--bg)}.sidebar{position:sticky;top:0;z-index:20;display:flex;flex-direction:column;width:248px;height:100vh;border-right:1px solid var(--line);background:#102233;color:#d9e8f4;transition:width .18s ease,transform .18s ease}.sidebar.is-collapsed{width:76px}.sidebar-header{display:flex;align-items:center;gap:12px;min-height:72px;padding:14px}.app-logo{width:42px;height:42px;flex:0 0 42px}.sidebar-title{display:grid;min-width:0}.sidebar-title strong,.user-menu strong{white-space:nowrap}.sidebar-title span,.user-menu span{color:#91a9bb;font-size:12px;white-space:nowrap}.sidebar.is-collapsed .sidebar-title,.sidebar.is-collapsed .nav-item span,.sidebar.is-collapsed .nav-item em{display:none}.nav-list{display:grid;gap:4px;padding:8px;overflow:auto}.sidebar-footer{margin-top:auto;border-top:1px solid rgba(255,255,255,.1);padding:8px}.sync-status-card{display:grid;gap:5px;margin-bottom:8px;border:1px solid rgba(255,255,255,.13);border-radius:8px;padding:10px;background:#ffffff0f}.sync-status-card div{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.sync-status-card strong{color:#fff;font-size:12px}.sync-status-card span{border-radius:999px;padding:2px 7px;background:#ffffff1f;color:#c7d7e4;font-size:11px;font-weight:800;white-space:nowrap}.sync-status-card small{display:block;overflow:hidden;color:#91a9bb;font-size:11px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.sync-status-card:before{content:"";width:8px;height:8px;border-radius:999px;background:#e8a23a}.sync-status-card.is-connected:before{background:#46c495}.sync-status-card.is-offline:before{background:#ef6b64}.sidebar.is-collapsed .sync-status-card{display:none}.logout-nav{width:100%;color:#f4c7c4}.logout-nav:hover{background:#c2413b2e;color:#fff}.nav-item{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:42px;border-radius:8px;padding:0 12px;background:transparent;color:#c7d7e4;text-align:left}.nav-item:hover,.nav-item.is-active{background:#ffffff1f;color:#fff}.nav-item em{min-width:23px;border-radius:999px;padding:2px 7px;background:#e8a23a;color:#17202a;font-size:12px;font-style:normal;font-weight:800;text-align:center}.main-region{min-width:0}.app-version-badge{position:fixed;right:12px;bottom:10px;z-index:30;border:1px solid rgba(16,34,51,.12);border-radius:8px;padding:4px 8px;background:#ffffffeb;color:#5f6f7c;font-size:11px;font-weight:800;line-height:1;pointer-events:none;box-shadow:0 6px 16px #10223314}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:72px;border-bottom:1px solid var(--line);padding:0 24px;background:#ffffffed;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.topbar-left,.topbar-actions{display:flex;align-items:center;gap:12px;min-width:0}.topbar-left h2,.dashboard-head h1,.module-head h1{margin:0;letter-spacing:0}.topbar-left h2{font-size:20px}.breadcrumb{margin:0 0 2px;color:var(--muted);font-size:12px}.icon-button{display:inline-grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border-radius:8px;background:transparent;color:inherit}.icon-button:hover{background:#17202a14}.search-box{display:flex;align-items:center;gap:8px;width:min(28vw,360px);height:40px;border:1px solid var(--line);border-radius:8px;padding:0 12px;background:#fff;color:var(--muted)}.module-search{display:flex;align-items:center;gap:8px;width:min(420px,42vw);height:42px;border:1px solid var(--line);border-radius:8px;padding:0 12px;background:#fff;color:var(--muted)}.search-box input{height:100%;border:0;min-width:0}.module-search input{width:100%;min-width:0;height:100%;border:0;outline:none;color:var(--text)}.module-search:focus-within{border-color:#1769aab3;box-shadow:0 0 0 4px #1769aa1f}.user-menu{display:flex;align-items:center;gap:9px;min-width:0;border-left:1px solid var(--line);padding-left:12px}.user-menu div{display:grid;min-width:0}.permission-head-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;min-width:0}.content-area{padding:12px}.page-stack{display:grid;gap:20px;min-width:0}.page-stack>*,.panel{min-width:0}.contract-page,.project-page,.receivable-page{min-height:calc(100vh - 24px);overflow:visible;gap:10px}.dashboard-head,.module-head,.panel,.metric-card{border:1px solid var(--line);border-radius:8px;background:var(--surface);box-shadow:0 8px 24px #17202a0d}.dashboard-head,.module-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:18px;padding:clamp(20px,3vw,32px)}.compact-head{padding:7px 12px}.contract-head{min-height:42px}.contract-head .module-title{gap:9px}.contract-head .module-icon{width:32px;height:32px}.module-head.contract-head h1{font-size:24px;line-height:1.05}.contract-head .module-metrics{gap:8px}.contract-head .module-metrics article{min-height:38px;padding:7px 10px}.contract-head .module-metrics span{font-size:11px}.contract-head .module-metrics strong{font-size:16px}.dashboard-head h1,.module-head h1{font-size:clamp(26px,3vw,38px)}.dashboard-head p:last-child,.panel-heading p,.module-head p{max-width:760px;margin:8px 0 0;color:var(--muted);line-height:1.7}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}.metric-card{display:grid;gap:10px;min-height:142px;padding:20px}.metric-card span{color:var(--muted);font-size:14px;font-weight:700}.metric-card strong{font-size:34px;line-height:1}.metric-card p{margin:auto 0 0;color:var(--accent);font-size:13px;font-weight:700}.metric-action{text-align:left}.metric-action:hover{border-color:#1769aa73;background:#f6fbff}.workspace-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);gap:20px}.dashboard-workspace{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(360px,.85fr);gap:16px;min-height:0}.dashboard-column{display:grid;align-content:start;gap:16px;min-width:0}.panel{padding:20px}.panel-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.panel-heading h3{margin:0;font-size:18px}.text-button{background:transparent;color:var(--primary);font-weight:800}.outline-button,.secondary-button,.row-action,.danger-button,.icon-action{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);font-weight:800}.danger-button{padding:0 12px;color:var(--danger)}.danger-button:disabled{cursor:not-allowed;opacity:.48}.outline-button{padding:0 12px}.outline-button:hover,.secondary-button:hover,.row-action:not(:disabled):hover{border-color:#1769aa73;color:var(--primary);background:#eef6fb}.danger-button:not(:disabled):hover,.icon-action.danger:hover{border-color:#c2413b66;background:#fff1f0;color:var(--danger)}.table-list{display:grid}.table-row{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:66px;border-top:1px solid var(--line)}.table-row div{display:grid;gap:5px;min-width:0}.table-row strong,.table-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-row span,.table-row time{color:var(--muted);font-size:13px}.quick-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.quick-grid button{display:flex;align-items:center;gap:10px;min-height:58px;border-radius:8px;padding:0 14px;background:var(--surface-soft);color:var(--text);font-weight:800;text-align:left}.quick-grid button:hover{background:#e9f1f6;color:var(--primary)}.dashboard-list{display:grid;gap:8px}.notification-list{max-height:420px;overflow-y:auto;padding-right:4px}.dashboard-row,.dashboard-notice{width:100%;border:1px solid var(--line);border-radius:8px;background:#fff}.dashboard-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:58px;padding:10px 12px;color:var(--text);text-align:left}.dashboard-row:hover{border-color:#1769aa73;background:#f6fbff}.dashboard-row div{display:grid;gap:4px;min-width:0}.dashboard-row strong,.dashboard-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-row strong{font-size:14px}.dashboard-row span,.dashboard-row time,.dashboard-notice span{color:var(--muted);font-size:12px}.dashboard-empty-row{display:grid;place-items:center;min-height:58px;border:1px dashed var(--line);border-radius:8px;color:var(--muted);font-size:13px}.dashboard-notice{display:grid;gap:7px;padding:11px 12px}.dashboard-notice-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dashboard-notice-head strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.dashboard-notice p{margin:0;color:var(--text);font-size:13px;line-height:1.55}.dashboard-pill{display:inline-flex;align-items:center;justify-content:center;min-width:72px;border-radius:999px;padding:5px 8px;background:#edf3f7;color:var(--muted);font-size:12px;font-style:normal;font-weight:800;white-space:nowrap}.dashboard-pill.is-returned{background:#fdeceb;color:var(--danger)}.dashboard-pill.is-passed{background:#e4f6ef;color:var(--accent)}.module-title{display:flex;align-items:center;flex:1 1 260px;gap:14px;min-width:0}.module-metrics{display:grid;flex:1 1 460px;grid-template-columns:repeat(4,minmax(110px,1fr));gap:10px;width:min(760px,52vw);max-width:100%;min-width:0}.module-metrics article,.module-metrics button{display:grid;gap:2px;min-height:50px;border:1px solid var(--line);border-radius:8px;padding:12px;background:var(--surface-soft);color:inherit;text-align:left}.module-metrics button:hover{border-color:#1769aa6b;background:#eef6fb}.module-metrics span{color:var(--muted);font-size:12px;font-weight:900}.module-metrics strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:18px;line-height:1.1}.module-icon{background:#e9f5f1;color:var(--accent)}.empty-state{display:grid;place-items:center;min-height:320px;border:1px dashed #b8c5cf;border-radius:8px;background:var(--surface-soft);color:var(--muted);text-align:center}.empty-state strong{margin-top:12px;color:var(--text);font-size:18px}.empty-state span{margin-top:6px}.contract-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.contract-metrics article{display:grid;gap:8px;min-height:108px;border:1px solid var(--line);border-radius:8px;padding:18px;background:var(--surface)}.contract-metrics span{color:var(--muted);font-size:13px;font-weight:800}.contract-metrics strong{font-size:25px;line-height:1.1}.contract-layout{display:grid;grid-template-columns:minmax(0,1.62fr) minmax(312px,.46fr);gap:10px;align-items:start;min-height:0}.contract-list-panel,.contract-detail-panel{min-width:0}.contract-list-panel{padding:14px}.contract-detail-panel{min-height:calc(100vh - 96px);max-height:calc(100vh - 96px);overflow:hidden;padding:10px;font-size:12px}.contract-detail-panel .panel-heading{gap:8px;margin-bottom:7px}.contract-detail-panel .panel-heading h3{font-size:16px}.contract-detail-panel .panel-heading p{margin-top:3px;font-size:12px;line-height:1.35}.contract-panel-head{display:grid;grid-template-columns:auto minmax(260px,1fr) auto;align-items:center;gap:10px;margin-bottom:8px}.contract-panel-title{min-width:max-content}.contract-panel-head h3{margin:0;font-size:18px}.contract-panel-head p{margin:8px 0 0;color:var(--muted);line-height:1.6}.contract-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;min-width:0}.contract-toolbar{display:grid;grid-template-columns:minmax(116px,.28fr) minmax(180px,1fr);gap:8px;margin-bottom:0;min-width:0}.toolbar-field,.toolbar-search{display:flex;align-items:center;min-width:0;height:36px;border:1px solid var(--line);border-radius:8px;background:#fff}.toolbar-field{gap:10px;padding:0 12px}.toolbar-field span{color:var(--muted);font-size:13px;font-weight:900;white-space:nowrap}.toolbar-field select,.toolbar-search input{width:100%;min-width:0;height:100%;border:0;outline:none;background:transparent;color:var(--text)}.toolbar-search{gap:8px;padding:0 12px;color:var(--muted)}.toolbar-field:focus-within,.toolbar-search:focus-within{border-color:#1769aab3;box-shadow:0 0 0 4px #1769aa1f}.year-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:8px}.year-summary article{display:grid;gap:2px;border:1px solid var(--line);border-radius:8px;padding:8px 14px;background:var(--surface-soft)}.year-summary span{color:var(--muted);font-size:13px;font-weight:900}.year-summary strong{font-size:20px;line-height:1.1}.filter-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.filter-row div{display:flex;flex-wrap:wrap;gap:8px}.filter-row>span{color:var(--muted);font-size:13px;font-weight:800;white-space:nowrap}.filter-row button{min-height:30px;border:1px solid var(--line);border-radius:999px;padding:0 13px;background:#fff;color:var(--muted);font-weight:800}.filter-row button.is-active{border-color:#1769aa40;background:#e8f2f8;color:var(--primary)}.contract-table{display:grid;align-content:start;grid-auto-rows:max-content;width:100%;max-width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;height:610px;overflow:auto}.contract-table-head,.contract-row{display:grid;grid-template-columns:28px minmax(112px,.8fr) minmax(150px,1.15fr) minmax(74px,.55fr) minmax(132px,.95fr) minmax(92px,.62fr) minmax(92px,.62fr) minmax(62px,.42fr) minmax(72px,.48fr) minmax(96px,.56fr);align-items:center;gap:8px;min-width:1040px}.contract-table-head{position:sticky;top:0;z-index:2;min-height:44px;padding:0 10px;background:var(--surface-soft);color:var(--muted);font-size:12px;font-weight:900}.contract-row{width:100%;min-height:54px;border-top:1px solid var(--line);padding:8px 10px;background:#fff;color:var(--text);text-align:left;font-size:13px}.contract-row:hover,.contract-row.is-selected{background:#f2f8fb}.year-list,.year-group{display:grid;gap:10px}.year-group h4{margin:0;color:var(--text);font-size:14px}.contract-row>span{min-width:0}.contract-table-head>span:first-child,.contract-row>span:first-child{display:flex;justify-content:center}.contract-table input[type=checkbox]{width:16px;height:16px;accent-color:var(--primary)}.contract-row strong,.contract-row em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contract-row em{margin-top:5px;color:var(--muted);font-size:12px;font-style:normal}.receivable-layout{grid-template-columns:minmax(0,1.55fr) minmax(306px,.48fr)}.receivable-panel-head{grid-template-columns:auto minmax(260px,1fr) auto}.year-summary.receivable-summary{grid-template-columns:repeat(4,minmax(0,1fr))}.year-summary.receivable-summary article{min-height:50px}.receivable-table .contract-table-head,.receivable-table .contract-row{grid-template-columns:minmax(96px,.72fr) minmax(160px,1.1fr) minmax(138px,.92fr) minmax(92px,.58fr) minmax(108px,.7fr) minmax(132px,.86fr) minmax(132px,.84fr) minmax(88px,.52fr);gap:8px;min-width:980px}.receivable-table .contract-table-head>span:first-child,.receivable-table .contract-row>span:first-child{justify-content:flex-start}.receivable-table .contract-row{min-height:58px}.receivable-table .contract-row>span{min-width:0}.receivable-table .contract-row>span:first-child,.receivable-table .contract-row>span:nth-child(4){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all}.receivable-table .contract-row>span:nth-child(3),.receivable-table .contract-row>span:nth-child(6){line-height:1.35}.receivable-table .contract-row>span:last-child{display:flex;justify-content:flex-start}.settlement-audit-field{display:flex;align-items:center}.settlement-audit-input,.detail-number-input{width:100%;min-width:0;height:30px;border:1px solid var(--line);border-radius:7px;padding:0 8px;background:#fff;color:var(--text);font-weight:800}.settlement-audit-input:disabled,.detail-number-input:disabled{background:var(--surface-soft);color:var(--muted)}.settlement-audit-input:focus,.detail-number-input:focus{border-color:#1769aab3;outline:none;box-shadow:0 0 0 3px #1769aa1a}.receipt-action{min-width:82px;min-height:30px;padding:0 10px;font-size:12px}.receipt-done-action{border-color:#12795942;background:#e8f5ef;color:var(--accent)}.receipt-done-action:hover{border-color:#12795966;background:#dcf0e8;color:var(--accent)}.receivable-detail-panel{overflow-y:auto}.collection-list{display:grid;gap:8px;margin-top:8px}.collection-item{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}.collection-item strong,.collection-item em,.receivable-pending-note strong,.receivable-pending-note span{display:block}.collection-item strong,.receivable-pending-note strong{color:var(--text);font-size:12px;font-weight:900}.collection-item em,.receivable-pending-note span{margin-top:3px;color:var(--muted);font-size:12px;font-style:normal;font-weight:800}.collection-item b{white-space:nowrap}.receivable-pending-note{display:grid;gap:2px;margin-top:8px;border:1px solid rgba(209,151,51,.22);border-radius:8px;padding:8px 10px;background:#fff7e6}.procurement-layout{grid-template-columns:minmax(0,1.48fr) minmax(318px,.52fr)}.procurement-panel-head{grid-template-columns:auto minmax(260px,1fr) auto}.year-summary.procurement-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.year-summary.procurement-summary article{min-height:50px}.procurement-table{height:612px;overflow:auto}.procurement-table .contract-table-head,.procurement-table .contract-row{grid-template-columns:minmax(104px,.62fr) minmax(118px,.68fr) minmax(146px,.9fr) minmax(118px,.72fr) minmax(42px,.26fr) minmax(52px,.3fr) minmax(76px,.43fr) minmax(76px,.43fr) minmax(76px,.43fr) minmax(118px,.72fr) minmax(84px,.46fr) minmax(88px,.5fr) minmax(72px,.4fr);gap:6px;min-width:1310px}.procurement-table .contract-table-head{min-height:34px;padding:0 8px;font-size:11px}.procurement-table .contract-row{min-height:42px;padding:5px 8px;font-size:12px}.procurement-table .contract-row>span{min-width:0}.procurement-table .contract-row>span:nth-child(2),.procurement-table .contract-row>span:nth-child(3),.procurement-table .contract-row>span:nth-child(4),.procurement-table .contract-row>span:nth-child(10){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all}.procurement-material-cell{display:grid;gap:1px}.procurement-material-cell small{color:var(--muted);font-size:10px;line-height:1.1}.procurement-row-actions{display:flex;flex-wrap:nowrap;gap:4px;align-items:center;min-width:0}.procurement-row-actions .receipt-action{min-width:auto;min-height:26px;border-radius:6px;padding:0 7px;font-size:11px;line-height:1}.procurement-table .status-badge{min-height:20px;padding:0 7px;font-size:11px}.procurement-table .contract-row em{margin-top:2px;font-size:10px;line-height:1.1}.procurement-detail-panel{overflow-y:auto}.procurement-side-stack{display:grid;gap:10px;grid-template-rows:minmax(280px,.8fr) minmax(360px,1fr);min-width:0;align-content:start;max-height:calc(100vh - 106px);overflow:hidden}.procurement-side-stack>.panel{min-height:0;overflow-y:auto}.supplier-maintenance-panel{display:grid;gap:10px;padding:12px}.supplier-page-layout{display:grid}.supplier-page-layout .supplier-maintenance-panel{grid-template-columns:minmax(320px,.42fr) minmax(0,.58fr);align-items:start;gap:12px}.supplier-page-layout .supplier-maintenance-panel .panel-heading,.supplier-page-layout .supplier-maintenance-panel .supplier-metrics{grid-column:1 / -1}.supplier-page-layout .supplier-maintenance-panel .supplier-form{grid-column:1}.supplier-page-layout .supplier-maintenance-panel .supplier-list,.supplier-page-layout .supplier-maintenance-panel .supplier-detail-card{grid-column:2}.supplier-page-layout .supplier-maintenance-panel .supplier-list{max-height:430px}.supplier-maintenance-panel .panel-heading{margin-bottom:0}.supplier-maintenance-panel .panel-heading p{color:var(--muted);font-size:12px;line-height:1.45}.supplier-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.supplier-metrics article{display:grid;gap:4px;min-height:48px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#f8fbfd}.supplier-metrics span{color:var(--muted);font-size:12px;font-weight:800}.supplier-metrics strong{font-size:20px}.supplier-form{display:grid;gap:8px;border-top:1px solid var(--line);padding-top:10px}.supplier-form label{display:grid;gap:5px;min-width:0}.supplier-form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.supplier-form span{color:var(--muted);font-size:12px;font-weight:900}.supplier-form input,.supplier-form textarea{width:100%;border:1px solid var(--line);border-radius:8px;outline:none;background:#fff;color:var(--text);font-size:13px}.supplier-form input{height:34px;padding:0 10px}.supplier-form textarea{min-height:58px;resize:vertical;padding:8px 10px}.supplier-list{display:grid;gap:6px;max-height:188px;overflow-y:auto;border-top:1px solid var(--line);padding-top:10px}.supplier-form-actions,.supplier-item-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.supplier-form-actions{padding-top:2px}.supplier-item-actions{min-width:0}.supplier-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 9px;background:#fff;color:var(--text);text-align:left;cursor:pointer}.supplier-item.is-selected{border-color:#116db06b;background:#eef7fb}.supplier-item span{display:grid;gap:3px;min-width:0}.supplier-item strong,.supplier-item small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.supplier-item strong{font-size:13px}.supplier-item small{color:var(--muted);font-size:12px}.supplier-detail-card{display:grid;gap:5px;border:1px solid rgba(37,132,111,.16);border-radius:8px;padding:10px;background:#f4fbf8}.supplier-detail-card span,.supplier-detail-card small{color:var(--muted);font-size:12px;font-weight:800}.supplier-detail-card p{margin:0;color:var(--text);font-size:13px;line-height:1.45}.payable-page{min-height:0}.payable-layout{grid-template-columns:minmax(0,1.42fr) minmax(330px,.58fr)}.payable-panel-head{grid-template-columns:auto minmax(260px,1fr)}.year-summary.payable-summary{grid-template-columns:repeat(4,minmax(0,1fr))}.year-summary.payable-summary article{min-height:50px}.payable-table{height:612px;overflow:auto}.payable-table .contract-table-head,.payable-table .contract-row{grid-template-columns:minmax(130px,1.12fr) minmax(70px,.5fr) minmax(104px,.72fr) minmax(96px,.66fr) minmax(90px,.62fr) minmax(96px,.66fr) minmax(92px,.62fr) minmax(86px,.56fr);gap:8px;min-width:860px}.payable-table .contract-row{min-height:58px;cursor:pointer}.payable-table .contract-row>span{min-width:0}.payable-table .contract-row>span:first-child strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.payable-detail-panel{overflow-y:auto}.payable-procurement-block,.payable-procurement-list{display:grid;gap:8px}.payable-procurement-list article{display:grid;gap:4px;border:1px solid var(--line);border-radius:8px;padding:9px 10px;background:#f8fbfd}.payable-procurement-list strong{color:var(--text);font-size:13px}.payable-procurement-list span,.payable-procurement-list small{color:var(--muted);font-size:12px;line-height:1.45}.payable-procurement-list small{word-break:break-word}.procurement-modal{width:min(980px,100%)}.procurement-detail-editor{display:grid;gap:10px;min-width:0;padding:12px;border:1px solid var(--line);border-radius:8px;background:#f8fbfd}.procurement-detail-editor-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.procurement-detail-editor-head>div{display:grid;gap:3px}.procurement-detail-editor-head span{font-weight:800;color:var(--text)}.procurement-detail-editor-head small,.procurement-detail-total span{color:var(--muted);font-size:12px}.procurement-detail-table{display:grid;gap:6px;width:100%;max-width:100%;min-width:0;overflow-x:auto;padding-bottom:2px}.procurement-detail-table-head,.procurement-detail-row{display:grid;grid-template-columns:minmax(132px,1.1fr) minmax(116px,.95fr) 70px 86px 112px 124px 38px;gap:8px;align-items:center;min-width:860px}.arrival-detail-table-head,.arrival-detail-row{grid-template-columns:minmax(132px,1.1fr) minmax(116px,.95fr) 70px 86px 112px 124px}.procurement-detail-table-head{color:var(--muted);font-size:12px;font-weight:700}.procurement-detail-row input{min-height:36px;padding:0 8px}.procurement-detail-row input[type=number],.site-usage-editor-row input[type=number],.site-usage-price-settings input[type=number],.task-editor-row input[type=number],.detail-number-input{font-variant-numeric:tabular-nums;text-align:right}.procurement-detail-row input[type=number]::-webkit-outer-spin-button,.procurement-detail-row input[type=number]::-webkit-inner-spin-button,.site-usage-editor-row input[type=number]::-webkit-outer-spin-button,.site-usage-editor-row input[type=number]::-webkit-inner-spin-button,.site-usage-price-settings input[type=number]::-webkit-outer-spin-button,.site-usage-price-settings input[type=number]::-webkit-inner-spin-button,.task-editor-row input[type=number]::-webkit-outer-spin-button,.task-editor-row input[type=number]::-webkit-inner-spin-button,.detail-number-input::-webkit-outer-spin-button,.detail-number-input::-webkit-inner-spin-button{margin:0;-moz-appearance:none;appearance:none;-webkit-appearance:none}.procurement-detail-row input[readonly]{background:#eef5f9;color:var(--text);font-weight:800}.procurement-detail-total{display:flex;justify-content:flex-end;gap:16px;padding-top:2px}.procurement-detail-total strong{color:var(--text)}.procurement-details-block{display:grid;gap:8px}.procurement-detail-list{display:grid;gap:6px}.procurement-detail-card{display:grid;gap:2px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#f8fbfd}.procurement-detail-card strong{color:var(--text);font-size:13px}.procurement-detail-card span,.procurement-approval-detail-list span{color:var(--muted);font-size:12px}.payment-modal{width:min(560px,100%)}.modal-context-card{display:grid;gap:4px;border:1px solid var(--line);border-radius:8px;padding:10px;background:#f8fbfd}.modal-context-card strong{color:var(--text);font-size:14px}.modal-context-card span,.modal-context-card em{color:var(--muted);font-size:12px;font-style:normal}.procurement-payment-block{display:grid;gap:8px}.procurement-payment-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.procurement-payment-summary article{display:grid;gap:3px;border:1px solid var(--line);border-radius:8px;padding:8px;background:#f8fbfd}.procurement-payment-summary small{color:var(--muted);font-size:11px;font-weight:900}.procurement-payment-summary strong{color:var(--text);font-size:14px}.procurement-payment-summary em{color:var(--muted);font-size:11px;font-style:normal}.payment-detail-list{display:grid;gap:6px}.payment-detail-card{display:grid;gap:3px;border:1px solid var(--line);border-radius:8px;padding:8px;background:#fff}.payment-detail-card.is-paid{border-color:#25846f33;background:#f4fbf8}.payment-detail-card.is-pending{border-color:#edb14a4d;background:#fff8e8}.payment-detail-card.is-rejected{border-color:#dc52523d;background:#fff5f5}.payment-detail-card strong{color:var(--text);font-size:12px}.payment-detail-card span,.payment-detail-card small{color:var(--muted);font-size:11px}.site-usage-page{min-height:calc(100vh - 24px);overflow:visible;gap:10px}.site-usage-layout{grid-template-columns:minmax(0,1.35fr) minmax(330px,.65fr)}.site-usage-panel-head{grid-template-areas:"title toolbar actions" "prices prices prices";grid-template-columns:max-content minmax(300px,1fr) max-content;align-items:end}.site-usage-panel-head .contract-panel-title{grid-area:title}.site-usage-panel-head .contract-toolbar{grid-area:toolbar}.site-usage-panel-head .site-usage-price-settings{grid-area:prices}.site-usage-panel-head .contract-actions{grid-area:actions}.site-usage-price-settings{display:grid;grid-template-columns:minmax(96px,.75fr) repeat(6,minmax(82px,1fr));gap:8px;align-items:end;min-width:0}.site-usage-price-settings label{display:grid;gap:4px;min-width:0}.site-usage-price-settings span{overflow:hidden;color:var(--muted);font-size:11px;font-weight:900;text-overflow:ellipsis;white-space:nowrap}.site-usage-price-settings input,.site-usage-price-settings select{width:100%;height:34px;min-width:0;border:1px solid var(--line);border-radius:8px;padding:0 8px;background:#fff;color:var(--text)}.year-summary.site-usage-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.site-usage-table{height:612px;overflow:auto}.site-usage-table .contract-table-head,.site-usage-table .contract-row{grid-template-columns:88px 104px minmax(150px,1fr) 48px 48px 64px 64px 48px 48px 68px 92px 88px;gap:6px;min-width:950px}.site-usage-table .contract-row{min-height:54px;cursor:pointer}.site-usage-table .contract-row>span{min-width:0}.site-usage-table .contract-row>span:nth-child(3) strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-usage-detail-panel{overflow-y:auto}.site-usage-items{display:grid;gap:7px}.site-usage-items article{display:grid;grid-template-columns:minmax(80px,.6fr) minmax(0,1fr) auto;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#f8fbfd}.site-usage-items strong,.site-usage-items b{color:var(--text);font-size:13px}.site-usage-items span{color:var(--muted);font-size:12px}.site-usage-modal{width:min(760px,100%)}.site-usage-project-picker{position:relative;z-index:2}.site-usage-project-picker.is-open{margin-bottom:194px}.site-usage-project-picker .project-picker-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:8;max-height:186px}.site-usage-modal .site-usage-project-picker+label,.site-usage-modal .site-usage-project-picker+label+label{margin-top:6px}.site-usage-editor{display:grid;gap:10px;border:1px solid var(--line);border-radius:8px;padding:12px;background:#f8fbfd}.site-usage-editor-head{display:grid;gap:3px}.site-usage-editor-head span{color:var(--text);font-weight:800}.site-usage-editor-head small{color:var(--muted);font-size:12px}.site-usage-editor-table{display:grid;gap:6px;overflow-x:auto}.site-usage-editor-head-row,.site-usage-editor-row{display:grid;grid-template-columns:minmax(84px,.8fr) 64px 86px 104px minmax(96px,.8fr);gap:8px;align-items:center;min-width:520px}.site-usage-editor-head-row{color:var(--muted);font-size:12px;font-weight:800}.site-usage-editor-row input{min-height:36px;border:1px solid var(--line);border-radius:8px;padding:0 10px}.site-usage-editor-row strong,.site-usage-editor-row b{color:var(--text);font-size:13px}.site-usage-editor-row span{color:var(--muted);font-size:12px}.attachment-inline-action{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;border:1px solid var(--line);border-radius:8px;padding:5px 8px;background:#fff;color:var(--primary);font-size:12px;font-weight:800}.attachment-inline-action:hover{border-color:#1769aa73;background:#eef6fb}.single-action{grid-template-columns:minmax(0,1fr)}.row-actions{display:grid;grid-template-columns:30px minmax(54px,1fr);grid-template-rows:repeat(2,28px);gap:4px;align-items:stretch}.row-action.approve:not(:disabled):hover,.detail-approve:not(:disabled){border-color:#25846f73;background:#e9f5f1;color:var(--accent)}.icon-action{width:30px;min-height:28px;padding:0}.row-action{grid-column:2;grid-row:1 / span 2;display:inline-flex;align-items:center;justify-content:center;flex-direction:column;gap:2px;min-height:100%;padding:0 6px;font-size:12px;line-height:1}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-height:24px;border-radius:999px;padding:0 10px;font-size:12px;font-style:normal;font-weight:900;white-space:nowrap}.status-draft{background:#eef2f5;color:#516172}.status-pending{background:#fff2d7;color:var(--warning)}.status-active{background:#e5f5ee;color:var(--accent)}.status-rejected{background:#fde7e7;color:#b84242}.status-archived{background:#eef2f5;color:#516172}.status-risk{background:#fff1f0;color:var(--danger)}.status-complete{background:#e8f2f8;color:var(--primary)}.project-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(390px,.56fr);gap:10px;align-items:start;min-height:0}.project-list-panel,.project-detail-panel{min-width:0}.project-list-panel{padding:14px}.project-panel-head{display:grid;grid-template-columns:auto minmax(260px,1fr) auto;align-items:center;gap:10px;margin-bottom:8px}.project-panel-head h3{margin:0;font-size:18px}.project-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:8px}.project-summary article{display:grid;gap:2px;border:1px solid var(--line);border-radius:8px;padding:8px 14px;background:var(--surface-soft)}.project-summary span{color:var(--muted);font-size:13px;font-weight:900}.project-summary strong{font-size:20px;line-height:1.1}.project-table{display:grid;align-content:start;grid-auto-rows:max-content;width:100%;max-width:100%;min-width:0;height:610px;overflow:auto;border:1px solid var(--line);border-radius:8px}.project-table-head,.project-row{display:grid;grid-template-columns:minmax(120px,.82fr) minmax(250px,1.55fr) minmax(82px,.52fr) minmax(110px,.64fr) minmax(150px,.82fr) minmax(82px,.45fr) minmax(42px,.2fr);align-items:center;gap:8px;min-width:860px}.project-table-head{position:sticky;top:0;z-index:2;min-height:42px;padding:0 10px;background:var(--surface-soft);color:var(--muted);font-size:12px;font-weight:900}.project-row{min-height:58px;border-top:1px solid var(--line);padding:8px 10px;background:#fff;color:var(--text);font-size:13px}.project-row:hover,.project-row.is-selected{background:#f2f8fb}.project-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-row strong,.project-row em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-row em{margin-top:4px;color:var(--muted);font-size:12px;font-style:normal}.project-row-actions{display:grid;gap:4px;justify-items:start}.project-row-actions .icon-action{width:30px;min-height:26px}.year-group-title{margin:0 0 8px;color:var(--text);font-size:14px}.project-detail-panel{min-height:calc(100vh - 96px);max-height:calc(100vh - 96px);overflow-y:auto;overflow-x:hidden;padding:10px;font-size:12px}.project-detail-panel .panel-heading{gap:8px;margin-bottom:7px}.project-detail-head-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.project-detail-head-actions .outline-button.compact{min-height:30px;padding:0 9px;border-radius:7px;font-size:12px;white-space:nowrap}.project-detail-panel .panel-heading h3{font-size:16px}.project-detail-panel .panel-heading p{margin-top:3px;font-size:12px;line-height:1.35}.project-detail-panel .info-list div{min-height:28px;padding:5px 0}.project-detail-panel .project-detail-block{margin-top:7px;padding:9px}.project-detail-panel .progress-meter{min-width:0}.project-detail-actions{grid-template-columns:minmax(0,1fr);gap:4px}.progress-meter{position:relative;display:flex;align-items:center;min-width:96px;height:24px;overflow:hidden;border-radius:999px;background:#edf2f5}.progress-meter span{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:linear-gradient(90deg,#25846f47,#1769aa38)}.progress-meter strong{position:relative;z-index:1;width:100%;color:var(--text);font-size:12px;text-align:center}.project-detail-block{display:grid;gap:8px;margin-top:10px;border-radius:8px;padding:12px;background:var(--surface-soft)}.project-detail-block>span{color:var(--muted);font-size:12px;font-weight:900}.project-detail-block p{margin:0;line-height:1.55}.member-list{display:flex;flex-wrap:wrap;gap:8px}.member-list em{display:inline-flex;align-items:center;min-height:28px;border:1px solid var(--line);border-radius:999px;padding:0 10px;background:#fff;font-size:12px;font-style:normal;font-weight:900}.task-list{display:grid;gap:8px}.task-list .task-item{display:grid;grid-template-columns:54px minmax(0,1fr);gap:4px 8px;align-items:center;border-top:1px solid var(--line);padding-top:8px}.task-list .task-item.has-pending-change{border-radius:8px;border-top-color:transparent;padding:8px;background:#fff8e8}.task-list .task-item em{grid-row:span 2;display:inline-flex;align-items:center;justify-content:center;min-height:24px;border-radius:999px;padding:0 8px;background:#eef2f5;color:var(--muted);font-style:normal;font-size:11px;font-weight:900;white-space:nowrap}.task-list .task-item em.is-done{background:#e5f5ee;color:var(--accent)}.task-list .task-item em.is-risk{background:#fff1f0;color:var(--danger)}.task-list strong,.task-list small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-list small{color:var(--muted)}.task-progress-rule,.pending-progress-tip{color:var(--muted);font-size:12px;font-weight:800}.pending-progress-tip{color:var(--warning)}.project-change-list li{grid-template-columns:minmax(110px,1fr) minmax(70px,.65fr) 42px minmax(70px,.65fr)}.project-warning-note,.project-normal-note{margin-top:8px;border-radius:8px;padding:8px 10px;font-size:12px;font-weight:900}.project-warning-note{background:#fff1f0;color:var(--danger)}.project-normal-note{background:#e5f5ee;color:var(--accent)}.task-editor{display:grid;gap:6px;overflow-x:auto}.task-editor-title,.task-editor-head,.task-editor-row{display:grid;grid-template-columns:minmax(136px,1.05fr) repeat(2,minmax(148px,.95fr)) 46px 62px 30px;gap:6px;align-items:center;min-width:620px}.task-editor-title{grid-template-columns:minmax(0,1fr) auto;min-width:0}.task-editor-title>span,.task-editor-head{color:var(--muted);font-size:11px;font-weight:900}.task-editor-head{border-radius:8px;padding:6px 8px;background:var(--surface-soft)}.task-editor-row{border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff;font-size:12px}.task-editor-row input[type=text],.task-editor-row input[type=date],.task-editor-row input:not([type]){min-width:0;height:30px;padding:0 8px;border-radius:6px;font-size:12px}.task-date-stack{display:grid;gap:3px}.task-date-stack label{display:grid;gap:2px}.task-date-stack span{color:var(--muted);font-size:10px;font-weight:900}.task-editor-row strong{font-size:11px;white-space:nowrap}.task-editor-check{display:flex;align-items:center;gap:4px;color:var(--text);font-size:11px;font-weight:900}.task-editor-check input[type=checkbox]{width:16px;height:16px}.task-editor-footer{display:flex;justify-content:flex-end;border:1px dashed var(--line);border-radius:8px;padding:6px;background:var(--surface-soft)}.task-editor-footer .outline-button{min-height:28px;padding:0 10px;font-size:12px}.gantt-block{gap:10px}.gantt-table-wrap{width:100%;max-height:330px;overflow:auto;border:1px solid #c9d8e5;border-radius:6px;background:#fff}.gantt-table{width:max-content;min-width:100%;border-collapse:collapse;color:var(--text);font-size:11px;line-height:1.15;table-layout:fixed}.gantt-seq-col{width:34px}.gantt-name-col{width:118px}.gantt-kind-col{width:40px}.gantt-date-col{width:68px}.gantt-day-col{width:20px}.gantt-table th,.gantt-table td{min-width:0;height:22px;border:1px solid #c9d8e5;padding:0 2px;text-align:center;white-space:nowrap}.gantt-table .gantt-task-name{width:118px;max-width:118px;overflow:hidden;text-align:left;text-overflow:ellipsis}.gantt-title-row th{height:32px;background:var(--primary-strong);color:#fff;font-size:18px;font-weight:900;letter-spacing:0}.gantt-month-row th,.gantt-week-row th,.gantt-day-row th{background:#edf4f8;color:#31536d;font-weight:900}.gantt-body-row td{background:#fff}.gantt-body-row:nth-child(4n+1) td,.gantt-body-row:nth-child(4n+2) td{background:#f7fafc}.gantt-body-row.gantt-plan-row td.is-planned{background:linear-gradient(180deg,#1f78b8 0%,var(--primary) 100%);box-shadow:inset 0 0 0 1px #0c487529}.gantt-body-row.gantt-actual-row td.is-actual{background:#25846f33}.gantt-body-row.gantt-actual-row td.is-actual.is-overdue{background:#c2413b38}.project-metrics{width:min(680px,50vw)}.project-modal{width:min(980px,100%)}.info-list{display:grid;gap:0;margin:0;border-top:1px solid var(--line)}.info-list div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:8px;min-height:30px;border-bottom:1px solid var(--line);padding:6px 0}.info-list dt{color:var(--muted);font-weight:800}.info-list dd{min-width:0;margin:0;overflow-wrap:anywhere;font-weight:800}.contract-description{margin-top:7px;border-radius:8px;padding:10px;background:var(--surface-soft)}.contract-description span,.approval-flow h4{color:var(--muted);font-size:12px;font-weight:900}.contract-description p{margin:5px 0 0;line-height:1.45}.approval-flow{display:grid;gap:6px;margin:8px 0}.approval-flow h4{margin:0 0 2px}.approval-flow div{display:flex;align-items:center;gap:7px;min-height:26px;color:var(--muted)}.approval-flow div.is-active{color:var(--accent);font-weight:900}.approval-tip{margin:0;border-radius:8px;padding:8px 10px;background:#eef6fb;color:var(--muted);font-size:12px;font-weight:800;line-height:1.5}.change-list{display:grid;gap:6px;margin:8px 0 0;padding:0;list-style:none}.change-list li{display:grid;grid-template-columns:70px minmax(0,1fr);gap:4px 8px;border-top:1px solid var(--line);padding-top:6px}.change-list strong,.change-list em{color:var(--muted);font-size:11px;font-style:normal;font-weight:900}.change-list span{overflow-wrap:anywhere;font-size:12px;font-weight:800}.danger-note{background:#fff5f4}.detail-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px}.detail-actions .primary-button,.detail-actions .secondary-button{min-height:34px;padding:0 8px;font-size:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:grid;place-items:center;padding:20px;background:#0c172285}.contract-modal{display:grid;gap:18px;width:min(760px,100%);max-height:min(86vh,760px);overflow:auto;border-radius:8px;padding:22px;background:#fff;box-shadow:var(--shadow)}.contract-modal.project-modal,.contract-modal.procurement-modal{width:min(980px,calc(100vw - 40px))}.contract-modal.site-usage-modal{width:min(860px,calc(100vw - 40px))}.contract-modal.payment-modal{width:min(560px,calc(100vw - 40px))}.contract-modal.password-modal{width:min(480px,calc(100vw - 40px))}.modal-heading,.modal-actions{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px}.modal-heading h3{margin:0;font-size:24px}.modal-actions{justify-content:flex-end;border-top:1px solid var(--line);padding-top:16px}.secondary-button{min-width:86px;padding:0 14px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-grid.single-column{grid-template-columns:minmax(0,1fr)}.form-grid label,.form-grid .project-picker-field{display:grid;gap:8px;min-width:0}.project-picker-menu{display:grid;gap:4px;max-height:230px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff;box-shadow:0 12px 28px #0d23371f}.project-picker-title{padding:2px 8px 4px;color:var(--muted);font-size:12px;font-weight:900}.project-picker-option{display:grid;gap:3px;width:100%;border:0;border-radius:7px;padding:8px 10px;background:transparent;color:var(--text);text-align:left;cursor:pointer}.project-picker-option:hover{background:#eef7fb}.project-picker-option strong{font-size:13px;line-height:1.25}.project-picker-option span,.project-picker-empty{color:var(--muted);font-size:12px;line-height:1.3}.project-picker-empty{padding:10px}.form-grid span{color:var(--muted);font-size:13px;font-weight:900}.form-grid input,.form-grid select,.form-grid textarea{width:100%;border:1px solid var(--line);border-radius:8px;outline:none;background:#fff;color:var(--text)}.form-grid input,.form-grid select{height:42px;padding:0 12px}.form-grid input[readonly]{background:var(--surface-soft);color:var(--primary);font-weight:900}.form-grid textarea{resize:vertical;padding:12px}.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{border-color:#1769aab3;box-shadow:0 0 0 4px #1769aa1f}.full-field{grid-column:1 / -1}.attachment-field{border:1px dashed #b9c8d3;border-radius:8px;padding:14px;background:var(--surface-soft)}.attachment-field input[type=file]{height:auto;border:0;padding:0;background:transparent}.attachment-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.attachment-list span{display:inline-flex;align-items:center;gap:6px;min-height:30px;border:1px solid var(--line);border-radius:999px;padding:0 10px;background:#fff;color:var(--text);font-size:12px;font-weight:800}.attachment-remove-button{min-height:22px;border:0;border-radius:999px;padding:0 7px;background:#fbe9e7;color:#b7473f;font-size:11px;font-weight:800}.attachment-remove-button:hover{background:#f5d1cd}.attachment-chip{display:inline-flex;align-items:center;gap:6px;min-height:30px;border:1px solid var(--line);border-radius:999px;padding:0 10px;background:#fff;color:var(--text);font-size:12px;font-weight:800}.attachment-chip:hover{border-color:#1769aa73;color:var(--primary);background:#eef6fb}.hidden-file-input{display:none}.compact-empty{min-height:260px}.permission-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(340px,.55fr);gap:10px;align-items:start}.account-panel,.module-assign-panel{padding:14px}.account-table{display:grid;width:100%;max-width:100%;min-width:0;overflow:auto;border:1px solid var(--line);border-radius:8px}.account-table-head,.account-row{display:grid;grid-template-columns:minmax(88px,.8fr) minmax(90px,.9fr) minmax(110px,1fr) minmax(96px,.9fr) 68px 58px 78px;align-items:center;gap:12px;min-width:780px;min-height:46px;padding:0 14px}.account-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account-table-head{background:var(--surface-soft);color:var(--muted);font-size:13px;font-weight:900}.account-row{width:100%;border:0;border-top:1px solid var(--line);background:#fff;color:var(--text);text-align:left}.account-row:hover,.account-row.is-selected{background:#f2f8fb}.account-status{display:inline-flex;align-items:center;min-height:26px;border-radius:999px;padding:0 10px;font-size:12px;font-style:normal;font-weight:900}.account-status.active{background:#e5f5ee;color:var(--accent)}.account-status.disabled{background:#eef2f5;color:var(--muted)}.account-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.account-actions .outline-button,.account-actions .danger-button{min-height:34px;padding:0 10px}.account-save-strip{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid var(--line);border-radius:8px;padding:10px;background:var(--surface-soft)}.account-save-strip.is-dirty{border-color:#a8651761;background:#a8651714}.account-save-strip span{min-width:0;color:var(--muted);font-size:12px;font-weight:800;line-height:1.45}.account-detail-list{display:grid;gap:0;margin:0 0 12px;border-top:1px solid var(--line)}.account-detail-list div{display:grid;grid-template-columns:86px minmax(0,1fr);gap:8px;min-height:32px;border-bottom:1px solid var(--line);padding:7px 0}.account-detail-list dt{color:var(--muted);font-weight:800}.account-detail-list dd{min-width:0;margin:0;overflow-wrap:anywhere;font-weight:900}.module-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.module-check{display:grid;grid-template-columns:18px 22px minmax(0,1fr);align-items:center;gap:10px;min-height:48px;border:1px solid var(--line);border-radius:8px;padding:0 12px;background:#fff;color:var(--text);font-weight:800}.module-check.is-checked{border-color:#1769aa59;background:#eef6fb;color:var(--primary)}.module-check input{accent-color:var(--primary)}.module-permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.module-permission-card{display:grid;gap:10px;min-width:0;border:1px solid var(--line);border-radius:8px;padding:10px;background:#fff}.module-permission-card.is-checked{border-color:#1769aa59;background:#eef6fb}.module-access-check{display:grid;grid-template-columns:18px 20px minmax(0,1fr);align-items:center;gap:8px;min-width:0;color:var(--text);font-weight:900}.module-access-check span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.module-access-check input,.permission-action-row input{accent-color:var(--primary)}.permission-action-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}.permission-action-row label{display:inline-flex;align-items:center;justify-content:center;gap:3px;min-height:26px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--muted);font-size:11px;font-weight:900;white-space:nowrap}.permission-action-row label:has(input:checked){border-color:#25846f59;background:#e9f5f1;color:var(--accent)}.modal-module-section{display:grid;gap:10px}.modal-module-section>span{color:var(--muted);font-size:13px;font-weight:900}.permission-summary{margin-top:14px;border-radius:8px;padding:14px;background:var(--surface-soft)}.permission-summary strong{display:block;margin-bottom:6px;color:var(--muted);font-size:13px}.permission-summary p{margin:0;line-height:1.6;font-weight:800}.account-edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:12px}.account-edit-grid label{display:grid;gap:6px;min-width:0}.account-edit-grid span,.settings-toggle-row>label>span:first-child{color:var(--muted);font-size:12px;font-weight:900}.account-edit-grid input,.account-edit-grid select,.settings-form select,.settings-toggle-row input[type=time]{width:100%;height:38px;border:1px solid var(--line);border-radius:8px;padding:0 10px;background:#fff;color:var(--text);font-weight:800}.account-edit-grid input:disabled,.account-edit-grid select:disabled,.module-permission-card input:disabled,.form-grid input:disabled,.form-grid select:disabled,.form-grid textarea:disabled{cursor:not-allowed;opacity:.62}.account-edit-grid .outline-button{align-self:end}.approval-flow-panel{grid-column:1 / -1;padding:14px}.approval-flow-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.approval-flow-card{display:grid;gap:10px;min-width:0;border:1px solid var(--line);border-radius:8px;padding:12px;background:#fff}.approval-flow-card.is-enabled{border-color:#1769aa4d;background:#f3f9fc}.approval-flow-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}.flow-enable{display:inline-flex;align-items:center;gap:8px;min-width:0;color:var(--text);font-weight:900}.flow-enable span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flow-enable input,.approval-flow-card input[type=checkbox]{accent-color:var(--primary)}.approval-flow-card-head em{display:inline-flex;align-items:center;min-height:24px;border-radius:999px;padding:0 9px;background:#e5f5ee;color:var(--accent);font-size:12px;font-style:normal;font-weight:900}.approval-flow-card:not(.is-enabled) .approval-flow-card-head em{background:#eef2f5;color:var(--muted)}.approval-flow-card label:not(.flow-enable){display:grid;gap:6px;min-width:0}.approval-flow-card label:not(.flow-enable)>span{color:var(--muted);font-size:12px;font-weight:900}.approval-flow-card input:not([type=checkbox]),.approval-flow-card select,.approval-flow-card textarea{width:100%;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);font-weight:800}.approval-flow-card input:not([type=checkbox]),.approval-flow-card select{height:36px;padding:0 10px}.approval-flow-card textarea{min-height:58px;padding:8px 10px;line-height:1.5;resize:vertical}.approval-flow-card input:disabled,.approval-flow-card select:disabled,.approval-flow-card textarea:disabled{cursor:not-allowed;opacity:.62}.approval-route{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0;border:1px solid rgba(23,105,170,.16);border-radius:8px;padding:8px;background:#1769aa0f;color:var(--muted);font-size:12px;font-weight:900}.approval-route span{display:inline-flex;align-items:center;min-height:22px;border-radius:999px;padding:0 8px;background:#fff;color:var(--text)}.approval-route em{color:var(--primary);font-style:normal}.approval-flow-summary{margin-top:10px}.approval-layout{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(340px,.7fr);gap:10px;align-items:start}.approval-list-panel,.approval-detail-panel{padding:14px}.approval-table{display:grid;width:100%;max-width:100%;min-width:0;overflow:auto;border:1px solid var(--line);border-radius:8px}.approval-table-head,.approval-row{display:grid;grid-template-columns:minmax(120px,.75fr) minmax(190px,1.15fr) minmax(110px,.7fr) minmax(120px,.75fr) minmax(110px,.6fr) minmax(170px,.85fr);align-items:center;gap:12px;min-width:920px;min-height:50px;padding:0 14px}.approval-table-head{background:var(--surface-soft);color:var(--muted);font-size:13px;font-weight:900}.approval-row{border-top:1px solid var(--line);background:#fff;color:var(--text);font-size:13px}.approval-row:hover,.approval-row.is-selected{background:#f2f8fb}.approval-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.approval-row strong{display:inline-block;max-width:calc(100% - 46px);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.approval-row em{display:inline-flex;align-items:center;height:20px;margin-left:6px;border-radius:999px;padding:0 7px;background:#e0f2fe;color:#0369a1;font-size:11px;font-style:normal;font-weight:900;vertical-align:middle}.approval-row>span:last-child{display:flex;justify-content:flex-end;gap:8px}.approval-decision-modal{display:grid;gap:16px;width:min(520px,100%);border-radius:8px;padding:20px;background:#fff;box-shadow:var(--shadow)}.approval-decision-summary{display:grid;gap:6px;border:1px solid var(--line);border-radius:8px;padding:12px;background:var(--surface-soft)}.approval-decision-summary span,.approval-decision-field span{color:var(--muted);font-size:12px;font-weight:900}.approval-decision-summary strong{color:var(--text);font-size:16px}.approval-decision-summary em{color:var(--subtle);font-size:13px;font-style:normal}.approval-decision-field{display:grid;gap:8px}.approval-decision-field textarea{min-height:120px;resize:vertical;border:1px solid var(--line);border-radius:8px;padding:12px;color:var(--text);font:inherit}.approval-metrics{width:min(760px,50vw);grid-template-columns:repeat(5,minmax(92px,1fr))}.approval-history-panel{padding:14px}.approval-history-heading{align-items:flex-start;gap:14px}.approval-history-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:8px;width:min(1280px,100%)}.approval-history-filters label{display:grid;gap:4px;min-width:0}.approval-history-filters label>span{color:var(--muted);font-size:12px;font-weight:800}.approval-history-filters input,.approval-history-filters select{min-width:0;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#f8fafc;color:var(--text);font:inherit}.approval-history-search{display:flex;align-items:center;width:100%;height:36px;padding:0 12px;align-self:end;grid-column:span 2}.approval-history-filters .approval-history-search input{height:100%;border:0;padding:0;background:transparent}.approval-history-filters .outline-button{align-self:end}.approval-history-table{display:grid;max-height:280px;overflow:auto;border:1px solid var(--line);border-radius:8px}.approval-history-head,.approval-history-row{display:grid;grid-template-columns:minmax(110px,.8fr) minmax(180px,1.2fr) minmax(120px,.85fr) minmax(150px,.9fr) minmax(140px,.9fr) minmax(150px,.9fr) minmax(140px,.9fr) minmax(82px,.45fr) minmax(180px,1.1fr);align-items:center;gap:10px;min-width:1320px;min-height:42px;padding:0 12px}.approval-history-head{position:sticky;top:0;z-index:1;background:var(--surface-soft);color:var(--muted);font-size:12px;font-weight:900}.approval-history-row{border-top:1px solid var(--line);background:#fff;color:var(--text);font-size:12px}.approval-history-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-title-button{display:inline-block;max-width:100%;border:0;padding:0;background:transparent;color:var(--primary);cursor:pointer;font:inherit;font-weight:900;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.history-title-button:hover{text-decoration:underline}.task-layout{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(320px,.85fr) minmax(300px,.75fr);gap:12px}.task-list,.task-form-panel{display:grid;gap:8px}.task-row{display:grid;grid-template-columns:minmax(0,1fr) auto 92px;align-items:center;gap:10px;min-height:58px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:#fff;color:var(--text);text-align:left}.task-row:hover,.task-row.is-selected{border-color:#1769aa73;background:#f2f8fb}.task-row span{display:grid;gap:4px;min-width:0}.task-row strong,.task-row small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-row small,.task-row time{color:var(--muted);font-size:12px}.task-status{display:inline-flex;align-items:center;justify-content:center;min-width:64px;height:24px;border-radius:999px;background:#fff3d6;color:#a16207;font-size:12px;font-style:normal;font-weight:900}.task-status.is-done{background:#dcfce7;color:#047857}.task-form-panel label{display:grid;gap:6px}.task-form-panel span{color:var(--muted);font-size:12px;font-weight:900}.task-form-panel input,.task-form-panel select,.task-form-panel textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;color:var(--text)}.task-form-panel input,.task-form-panel select{height:38px}.approval-history-status{display:inline-flex;align-items:center;justify-content:center;min-width:58px;height:24px;border-radius:999px;font-style:normal;font-weight:900}.approval-history-status.status-approved{background:#dcfce7;color:#047857}.approval-history-status.status-rejected{background:#fee2e2;color:#b91c1c}.approval-history-status.status-pending{background:#fff3d6;color:#a16207}.approval-history-empty{padding:26px;text-align:center;color:var(--muted);font-weight:800}.settings-layout{display:grid;gap:14px}.settings-rule-panel{padding:16px}.settings-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.settings-form label{display:grid;gap:8px}.settings-form span{color:var(--muted);font-size:13px;font-weight:900}.settings-form input,.settings-form select{width:100%;height:40px;border:1px solid var(--line);border-radius:8px;padding:0 12px;background:var(--surface-soft);color:var(--text);font-weight:800}.settings-form select{background:#fff}.settings-toggle-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.settings-toggle-row>label:not(.setting-toggle){display:grid;gap:8px}.settings-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.settings-card{display:grid;gap:14px;border:1px solid var(--line);border-radius:8px;padding:16px;background:var(--surface);box-shadow:0 8px 24px #17202a0d}.settings-card h3{margin:0;font-size:18px}.settings-card p{margin:6px 0 0;color:var(--muted);line-height:1.55}.setting-list{display:grid;gap:10px}.setting-toggle{display:grid;grid-template-columns:18px minmax(0,1fr);gap:10px;align-items:start;border-top:1px solid var(--line);padding-top:10px}.setting-toggle input{margin-top:3px;accent-color:var(--primary)}.setting-toggle span{display:grid;gap:4px}.setting-toggle strong{font-size:14px}.setting-toggle em{color:var(--muted);font-size:12px;font-style:normal;line-height:1.45}.account-modal{width:min(680px,100%)}.mobile-only,.mobile-menu,.sidebar-backdrop{display:none}@media(max-width:1280px){.module-head{display:grid;grid-template-columns:minmax(0,1fr);align-items:start}.module-title,.module-metrics,.permission-head-actions{width:100%}.contract-panel-head,.project-panel-head,.receivable-panel-head,.procurement-panel-head,.payable-panel-head{grid-template-columns:minmax(0,1fr) auto}.contract-panel-head .contract-toolbar,.project-panel-head .contract-toolbar,.receivable-panel-head .contract-toolbar,.procurement-panel-head .contract-toolbar,.payable-panel-head .contract-toolbar{grid-column:1 / -1}.contract-panel-title{min-width:0}.module-metrics{flex-basis:100%;width:100%;grid-template-columns:repeat(4,minmax(0,1fr))}.permission-head-actions{width:100%;justify-content:flex-start}.site-usage-panel-head{grid-template-areas:"title actions" "toolbar toolbar" "prices prices";grid-template-columns:minmax(0,1fr) max-content;align-items:start}}@media(max-width:1120px){.metric-grid,.contract-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.module-metrics{width:100%;grid-template-columns:repeat(2,minmax(0,1fr))}.workspace-grid,.contract-layout{grid-template-columns:1fr}.contract-detail-panel{min-height:auto;max-height:none;overflow:visible}.project-layout{grid-template-columns:1fr}.project-detail-panel{min-height:auto}.permission-layout{grid-template-columns:1fr}.approval-flow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.approval-layout,.task-layout{grid-template-columns:1fr}.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.settings-form,.settings-toggle-row,.contract-toolbar,.year-summary{grid-template-columns:1fr}.year-summary.receivable-summary{grid-template-columns:repeat(4,minmax(0,1fr))}.contract-panel-head,.filter-row{align-items:flex-start;flex-direction:column}.contract-panel-head,.project-panel-head,.receivable-panel-head,.procurement-panel-head,.payable-panel-head{grid-template-columns:1fr}.site-usage-panel-head{grid-template-areas:"title actions" "toolbar toolbar" "prices prices";grid-template-columns:minmax(0,1fr) max-content}.site-usage-price-settings{grid-template-columns:repeat(4,minmax(92px,1fr))}.contract-actions{justify-content:flex-start}.search-box{width:260px}.module-search{width:min(100%,420px)}}@media(max-width:860px){.login-page{grid-template-columns:1fr}.login-visual{min-height:42vh;padding:32px 22px}.login-panel{padding:28px 18px 40px}.app-shell{display:block}.sidebar{position:fixed;transform:translate(-100%);width:min(86vw,300px)}.sidebar.is-open{transform:translate(0)}.sidebar.is-collapsed{width:min(86vw,300px)}.sidebar.is-collapsed .sidebar-title,.sidebar.is-collapsed .nav-item span,.sidebar.is-collapsed .nav-item em{display:initial}.sidebar-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:15;background:#0a141e7a}.sidebar-backdrop.is-visible,.mobile-only,.mobile-menu{display:block}.desktop-only,.search-box,.user-menu svg:last-child,.user-menu span{display:none}.topbar{min-height:64px;padding:0 14px}.content-area{padding:16px}.modal-backdrop{padding:12px}.contract-modal,.contract-modal.project-modal,.contract-modal.procurement-modal,.contract-modal.site-usage-modal,.contract-modal.payment-modal,.contract-modal.password-modal,.account-modal,.approval-decision-modal{width:min(100%,calc(100vw - 24px));padding:18px}.form-grid{grid-template-columns:minmax(0,1fr)}.modal-actions{justify-content:flex-start}.dashboard-head,.module-head{align-items:flex-start;flex-direction:column}.year-summary.receivable-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.login-visual h1{font-size:40px}.metric-grid,.quick-grid,.contract-metrics,.module-metrics,.approval-flow-grid,.account-edit-grid,.settings-grid,.module-check-grid,.form-grid{grid-template-columns:1fr}.dashboard-head h1,.module-head h1{font-size:28px}.topbar-left h2{font-size:17px}.site-usage-price-settings{grid-template-columns:repeat(2,minmax(0,1fr))}.site-usage-panel-head{grid-template-areas:"title" "toolbar" "prices" "actions";grid-template-columns:1fr}.site-usage-panel-head .contract-actions,.site-usage-panel-head .primary-button{width:100%}.approval-history-search{grid-column:1 / -1}}
