*{box-sizing:border-box}[hidden]{display:none!important}:root{font-family:"Microsoft YaHei",Inter,system-ui,sans-serif;color:#1c3146;background:#edf2f6;font-size:14px}body{margin:0;display:grid;grid-template-columns:190px minmax(0,1fr);min-height:100vh}aside{background:#132638;color:#fff;padding:28px 17px}aside strong,aside span{display:block;padding:0 10px}aside strong{font-size:20px}aside span{color:#a7bfd0;font-size:12px;margin-top:6px}nav{display:grid;gap:7px;margin-top:32px}nav button{text-align:left;background:transparent;border:0;color:#c9dae6}nav button.active{background:#25495e;color:white}main{padding:25px 34px;max-width:1500px;width:100%;margin:auto auto auto 0}header,.section-head,.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}header,.section-head{justify-content:space-between}h1{font-size:28px;margin:4px 0 18px}h2{font-size:16px;margin:0}h3{font-size:14px}.context,.muted{color:#526b80}.context{margin:0}section{background:white;border:1px solid #d8e3ea;border-radius:11px;padding:16px;margin-bottom:14px}button,.button,input,select{font:inherit;border:1px solid #bfcfd9;border-radius:6px;background:white;color:#1c3146;padding:7px 10px}button,.button{cursor:pointer;text-decoration:none;display:inline-block}button:hover,.button:hover{border-color:#247d83}button:disabled{color:#647789;background:#f2f5f7;cursor:default}.primary{background:#087b75;border-color:#087b75;color:white}.table-scroll{overflow:auto;max-height:470px;margin-top:12px}table{width:100%;border-collapse:collapse;min-width:600px}td,th{padding:9px 10px;border-bottom:1px solid #e3eaf0;text-align:left;vertical-align:top}th{background:#eef4f7;color:#365469;position:sticky;top:0;z-index:1;white-space:nowrap}.num{font-variant-numeric:tabular-nums;white-space:nowrap}.good{color:#087068}.warn{color:#a45508}summary{cursor:pointer}#message{border-radius:8px;padding:10px 13px;background:#dff2ec;overflow-wrap:anywhere}#message.error,#form-error{color:#982d24}dialog{border:1px solid #bacbd6;border-radius:12px;width:min(700px,95vw);max-height:88vh;padding:20px}dialog::backdrop{background:#14273999}.fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:12px 0}form label{display:grid;gap:4px}form input{min-width:0;width:100%}.trace{max-width:560px}.trace p{margin:5px 0}.trace summary{color:#087068}@media(max-width:850px){body{grid-template-columns:1fr}aside{display:flex;align-items:center;gap:8px;padding:8px}aside span{display:none}nav{display:flex;margin:0}main{padding:14px}}@media(max-width:500px){.fields{grid-template-columns:1fr 1fr}}

main{margin-block:0;align-self:start}
.ledger-uploads{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));gap:12px}
.ledger-slot{padding:12px;border:1px solid #d8e3ea;border-radius:8px;background:#f7fafc}
.ledger-slot h3,.ledger-slot p{margin:0 0 8px}
.ledger-slot .button{position:relative}
.ledger-slot .button:focus-within{outline:2px solid #247d83;outline-offset:2px}
.ledger-slot input{position:absolute;inset:0;width:100%;opacity:0;cursor:pointer}
.ledger-grand-total{background:#eef4f7;font-weight:700}
#workflow-name{padding:0 10px;font-size:14px;color:#e6eff6}
.workflow-steps{display:grid;gap:5px;margin:0 0 0 10px;padding:0 0 0 8px;border-inline-start:1px solid #38566b;list-style:none}
.workflow-steps button{width:100%}
@media(max-width:850px){aside{flex-wrap:wrap}aside nav{display:grid}.workflow-steps{display:flex;flex-wrap:wrap}}

.entry-filters{margin-top:12px;align-items:flex-end}
.entry-filters label{min-width:0}
.entry-filters label:first-child{flex:1 1 230px;max-width:320px}
.entry-filters output{align-self:center}
.entry-filters label{display:grid;gap:4px}.entry-filters input,.entry-filters select{width:100%}
#summary-text{width:100%;font:inherit;padding:8px;resize:vertical}
.project-review{display:grid;gap:8px;margin-top:10px}.project-review button{justify-self:start}

.review-switch{margin:0 0 14px}.review-switch [aria-pressed="true"]{background:#087b75;border-color:#087b75;color:#fff}
.formula-steps,.dash-metrics,.dash-panels{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}
.formula-steps{margin:16px 0}.formula-steps>div{background:#eef5f6;border-left:3px solid #087b75;padding:14px;border-radius:7px}.formula-steps p{margin:7px 0}.formula-steps b{color:#086c67;font-variant-numeric:tabular-nums}
.dashboard-nav{margin-top:8px}.finance-dashboard{background:#101e30;color:#e6f1fa;padding:18px;border-radius:12px}.finance-dashboard section{background:#182a41;border-color:#2a4560}.finance-dashboard th{background:#233c56;color:#d4ecfa}.finance-dashboard td{border-color:#2a4560}.finance-dashboard h2{color:#d5e8fa}.finance-dashboard #dash-coverage{color:#9fb9d0}.dash-metrics strong{display:block;margin-top:8px;font-size:clamp(20px,2vw,30px);color:#69ecd9;font-variant-numeric:tabular-nums}.dash-panels{grid-template-columns:repeat(auto-fit,minmax(min(100%,350px),1fr))}.dash-filters label{display:grid;gap:5px}.dash-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 10px;margin-top:10px}.dash-bar span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-bar b{font-variant-numeric:tabular-nums;color:#9bf2e7}.dash-bar div{grid-column:1/-1;background:#263c55;height:6px;border-radius:4px}.dash-bar i{display:block;height:100%;background:linear-gradient(90deg,#367de9,#43dccc);border-radius:4px}
button.danger:not(:disabled){color:#a63935;border-color:#dfb9b6}button.danger:not(:disabled):hover{background:#fff0ee}

/* Graphite and violet theme shared by the portal and finance workbench. */
:root{color-scheme:dark;--ink:#f2efff;--muted:#b5aecb;--canvas:#101017;--panel:#191823;--field:#211e2d;--line:#3d3553;--violet:#ab91ff;--cyan:#72e5e9;color:var(--ink);background:var(--canvas)}
body{color:var(--ink);background:radial-gradient(ellipse at 95% 0%,#291c43 0,transparent 36%),var(--canvas)}
button,.button,input,select,textarea{background:var(--field);border-color:var(--line);color:var(--ink)}
button:hover,.button:hover{border-color:var(--violet)}
:where(a,button,input,select,textarea,summary):focus-visible{outline:2px solid var(--cyan);outline-offset:3px}
button:disabled{color:#a7a0b5;background:#25222f;border-color:#443e51}
.primary,.review-switch [aria-pressed="true"]{background:#6040b9;border-color:#9475f8;color:#fff}
.primary:hover,.review-switch [aria-pressed="true"]:hover{background:#714dcf}
section,dialog{background:var(--panel);border-color:var(--line);color:var(--ink)}
dialog::backdrop{background:#080611bb}
.context,.muted{color:var(--muted)}
.finance-workbench aside{background:#15131f;border-inline-end:1px solid var(--line)}
.finance-workbench nav button{color:var(--muted)}
.finance-workbench nav button.active{background:#39265e;color:#fff}
.finance-workbench .portal-return{margin:16px 0 0;color:#ded1ff;white-space:nowrap}
.workflow-steps{border-color:#524271}
.finance-workbench th,.finance-dashboard th,.ledger-grand-total{background:#28213a;color:#e3d8ff}
.finance-workbench td,.finance-workbench th,.finance-dashboard td{border-color:#3a324d}
.good,.trace summary,.finance-workbench td a{color:var(--cyan)}
.warn{color:#ffcc88}
#message{background:#222c35;color:#c0efeb;border:1px solid #3c5362}
#message.error,#form-error{color:#ffb1bd}
#message.error{background:#38202d;border-color:#734252}
button.danger:not(:disabled){color:#ffb0bd;border-color:#754653}
button.danger:not(:disabled):hover{background:#482b3c}
.ledger-slot,.formula-steps>div,.finance-dashboard section{background:#211b30;border-color:#45375d}
.formula-steps>div{border-inline-start-color:var(--violet)}
.formula-steps b{color:var(--cyan)}
.finance-dashboard{background:#14111e}
.finance-dashboard h2,.finance-dashboard #dash-coverage{color:#d9ccec}
.dash-bar div{background:#3b3051}
.dash-bar i{background:linear-gradient(90deg,#9463ff,#54e5ed)}
@media(max-width:850px){.finance-workbench .portal-return{margin:0}.finance-workbench aside{padding:14px}}

.portal{display:block;background:radial-gradient(ellipse at 95% -15%,#42265f 0,transparent 45%),radial-gradient(ellipse at 85% 115%,#173852 0,transparent 40%),#101017}
.portal-main{position:relative;margin:0 auto;max-width:1680px;padding:clamp(24px,4vw,72px);min-height:100vh}
.portal-header{justify-content:flex-start;gap:14px;font-size:clamp(20px,2vw,30px);letter-spacing:.08em}
.brand-mark{width:34px;height:26px;transform:skew(-25deg);background:linear-gradient(90deg,#a37cff 44%,transparent 44% 56%,#8052f4 56%);margin-left:6px}
.portal h1{margin:clamp(42px,8vh,100px) 0 0;font-size:clamp(38px,6vw,86px);line-height:1.12;letter-spacing:.04em}
.portal h1::after{content:"";display:block;width:120px;height:4px;border-radius:5px;margin-top:22px;background:linear-gradient(90deg,#b697ff,transparent)}
.portal-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(12px,1.6vw,26px);margin-top:clamp(28px,5vh,58px)}
.portal .portal-card{position:relative;display:flex;flex-direction:column;align-items:flex-start;isolation:isolate;overflow:hidden;min-height:clamp(280px,46vh,480px);padding:clamp(17px,2.1vw,38px);text-align:left;text-decoration:none;color:var(--ink);border:1px solid #5a506b;border-radius:18px;background:linear-gradient(145deg,#232032,#141521 58%,#211b32);transition:transform .18s,border-color .18s,box-shadow .18s}
.portal .portal-card:hover{transform:translateY(-4px);border-color:#b094ff;box-shadow:0 12px 35px #160b32aa}
.portal .card-finance{border:2px solid #a270ff;background:radial-gradient(ellipse at 56% 76%,#4b2a79,transparent 61%),linear-gradient(145deg,#231d35,#151221);box-shadow:0 0 25px #8b4dff36,inset 0 0 20px #9352ff22}
.portal-card h2,.portal-card-title{position:relative;z-index:1;font-weight:700;font-size:clamp(18px,2.1vw,34px);line-height:1.35}
.portal-cta{position:relative;z-index:1;margin-top:auto;display:inline-flex;gap:16px;align-items:center;background:linear-gradient(110deg,#8b60e7,#53339e);border:1px solid #b798ff;border-radius:9px;padding:11px 15px;color:white;font-weight:650;font-size:clamp(14px,1.3vw,20px)}
.portal-art{position:absolute;inset:24% 0 0;pointer-events:none;overflow:hidden}
.portal-art i{position:absolute;display:block}
.art-finance i{width:62%;height:43%;left:19%;top:18%;transform:rotate(-16deg) skew(22deg,0deg);border:1px solid #c5a8ff;background:linear-gradient(135deg,#a36bff50,#312c8590 45%,#5ad8f277);box-shadow:0 0 24px #ad7afa70,inset 0 0 24px #ab91ff60}
.art-finance i:nth-child(2){top:31%;left:16%;opacity:.72}.art-finance i:nth-child(3){top:44%;left:13%;opacity:.49}
.art-people i{width:110%;height:34%;left:-4%;top:27%;transform:rotate(-24deg);border-radius:50%;border-bottom:3px solid #c19aff;background:linear-gradient(0deg,#7b51f37f,transparent 75%);filter:drop-shadow(0 9px 20px #8e50fa8c)}
.art-people i:nth-child(2){top:38%;transform:rotate(15deg);border-color:#83e9fd;background:linear-gradient(0deg,#3ea4df80,transparent 75%)}.art-people i:nth-child(3){top:50%;transform:rotate(-29deg);opacity:.55}
.art-operations i{width:23%;height:37%;bottom:16%;left:20%;transform:skewY(-14deg);border:1px solid #c49dff;background:linear-gradient(155deg,#af7df078,#41336320);box-shadow:0 12px 26px #8d57df4f}
.art-operations i:nth-child(2){height:51%;left:39%;border-color:#aaa0ff}.art-operations i:nth-child(3){height:65%;left:58%;border-color:#76e8f3;background:linear-gradient(155deg,#68e4ef70,#1f526229)}
#pending-dialog{width:min(430px,92vw);padding:26px}#pending-status{color:var(--muted);margin:14px 0 20px}
@media(max-width:740px){.portal-grid{grid-template-columns:1fr}.portal .portal-card{min-height:225px}.portal-art{inset:15% 0 0 35%}}
@media(prefers-reduced-motion:reduce){.portal .portal-card{transition:none}}

.account-page{display:block}
.account-page main{margin:0 auto}
.login-page{max-width:470px;padding-top:10vh}
.account-form{display:grid;gap:12px}
.account-form p:empty{display:none}
.user-row{padding:12px 0;border-bottom:1px solid #e3eaf0}
.user-row strong{min-width:12ch}
#account-actions{margin-block:12px}
.viewer :is(#run,#export,#new,#receipt-upload,#clear-month,#clear-ledger-month,[data-upload],[data-delete],[data-review-key],.ledger-slot .actions,a[href^="/api/receipt-file"]){display:none!important}
