:root { --ink:#000; --muted:#000; --paper:#f5f7fa; --line:#e3e8ef; --green:#246b56; --lime:#cceadb; --sidebar:#162d29; --white:#fff; --danger:#b13b35; --shadow:0 2px 6px #182c4510; }
* { box-sizing:border-box; }
body { margin:0; background:var(--paper); color:var(--ink); font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; font-size:15px; line-height:1.6; -webkit-font-smoothing:antialiased; }
a { color:var(--green); text-decoration:none; } a:hover { text-decoration:underline; }
h1,h2,h3,p { margin-top:0; } h1 { font-size:32px; line-height:1.25; letter-spacing:-.8px; margin-bottom:9px; font-weight:650; } h2 { font-size:20px; line-height:1.4; letter-spacing:-.3px; margin-bottom:12px; font-weight:650; } h3 { font-size:16px; font-weight:650; }
small { font-size:13px; color:var(--muted); } td small,.stat small,.sidebar-foot small,.list-row small { display:block; } .muted { color:var(--muted); } .eyebrow { font-size:11px; letter-spacing:1.5px; font-weight:650; color:var(--muted); margin:0 0 10px; }
.sidebar { background:var(--white); border-right:1px solid var(--line); width:264px; height:100dvh; position:fixed; inset:0 auto 0 0; display:flex; flex-direction:column; padding:26px 16px 18px; overflow:auto; z-index:20; }
.brand { display:flex; align-items:center; gap:12px; color:var(--ink); font-size:23px; font-weight:700; letter-spacing:-.6px; margin:0 10px 20px; } .brand:hover { text-decoration:none; } .brand-mark { width:39px; height:39px; border-radius:12px; background:var(--green); color:white; display:inline-flex; align-items:center; justify-content:center; font-size:25px; font-weight:750; }
.brand-sub { display:block; font-size:10px; font-weight:450; letter-spacing:.3px; color:var(--muted); line-height:1.4; margin-top:1px; } .dark { color:var(--ink); } .space-label { color:var(--ink); font-size:10px; font-weight:650; letter-spacing:1.15px; margin:24px 13px 8px; } .sidebar nav { flex:1; }
.sidebar nav>a { display:flex; align-items:center; gap:12px; color:var(--ink); min-height:43px; padding:10px 13px; border-radius:8px; margin-bottom:3px; font-size:14px; line-height:1.4; }
.sidebar nav>a:hover { background:#f3f6f7; color:var(--ink); text-decoration:none; } .sidebar nav>a.selected { background:#eaf4ef; color:#1c654e; font-weight:650; } .nav-icon { width:18px; height:18px; flex-shrink:0; stroke-width:1.6; } .sidebar-foot { display:flex; align-items:center; gap:10px; border-top:1px solid var(--line); padding:20px 8px 0; margin-top:22px; font-size:13px; } .sidebar-foot>div { min-width:0; overflow-wrap:anywhere; } .avatar { flex-shrink:0; background:#eaf0ed; color:var(--green); display:flex; align-items:center; justify-content:center; border-radius:50%; width:34px; height:34px; font-weight:650; } .sidebar-foot small { font-size:11px; } .sidebar-foot form { margin-left:auto; } .logout { background:none; padding:8px; color:var(--muted); border:0; font-size:20px; } .logout:hover { background:#edf2ef; }
.portal-page { padding-left:264px; }
.main { margin:0 auto; padding:0 40px 0; max-width:1800px; min-height:100dvh; } .topbar { display:flex; justify-content:space-between; align-items:center; gap:15px; min-height:75px; border-bottom:1px solid var(--line); font-size:13px; color:var(--muted); margin-bottom:32px; } .topbar-title { color:var(--ink); font-weight:550; } .topbar-context { display:flex; align-items:center; gap:9px; } .environment { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:550; border:1px solid #e8dbc0; border-radius:6px; color:#89641f; background:#fff9ec; padding:3px 8px; letter-spacing:.2px; } .public-page .environment { margin-bottom:15px; } .mobile-menu { display:none; }
.page-header { display:flex; align-items:center; justify-content:space-between; gap:24px; margin:20px 0 28px; } .page-header p:last-child { margin-bottom:0; }
.stats { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px; margin-bottom:24px; } .stat { background:white; border:1px solid var(--line); border-radius:12px; padding:25px; box-shadow:var(--shadow); } .stat>span { font-size:14px; color:var(--muted); } .stat>strong { display:block; font-size:38px; line-height:1.3; letter-spacing:-1px; margin:12px 0 8px; font-weight:650; font-variant-numeric:tabular-nums; }
.panel { background:white; border:1px solid var(--line); border-radius:12px; margin-bottom:24px; overflow:hidden; box-shadow:var(--shadow); } .padded { padding:28px; } .panel-header { display:flex; justify-content:space-between; align-items:center; padding:24px 26px 20px; gap:20px; } .panel-header h2 { margin:0; } .panel-header a { font-size:14px; } .padded .panel-header { padding:0 0 20px; } .fiscal-summary { display:flex; align-items:center; justify-content:space-between; padding:26px; background:#f0f7f3; border-color:#d5e7db; gap:20px; box-shadow:none; } .fiscal-summary.attention { background:#fff9ed; border-color:#f0dfbd; } .fiscal-summary p:last-child { margin:0; } .fiscal-summary .eyebrow { color:var(--green); }
.table-wrap { overflow-x:auto; } table { border-collapse:collapse; width:100%; font-size:14px; white-space:normal; } thead { background:#f8fafc; } th { font-size:12px; font-weight:600; text-align:left; padding:15px 24px; color:var(--ink); white-space:nowrap; } td { border-top:1px solid #edf0f4; padding:19px 24px; max-width:350px; overflow-wrap:anywhere; vertical-align:middle; } td strong { font-weight:600; } td small { margin-top:5px; max-width:330px; font-size:12px; } tbody tr:hover { background:#fbfcfd; } .numeric { text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums; font-weight:550; } .positive { color:var(--green); }
.badge { display:inline-flex; align-items:center; gap:6px; white-space:nowrap; font-size:12px; line-height:1.5; font-weight:500; background:#f1f3f6; color:var(--ink); border:1px solid #e6eaf0; padding:4px 9px; border-radius:6px; } .badge:before { content:""; width:5px; height:5px; border-radius:50%; background:currentColor; } .badge.approved,.badge.fiscalized,.badge.settled,.badge.imported,.badge.applied { background:#edf7f1; color:#27724e; border-color:#d8eade; } .badge.declined,.badge.failed { background:#fdf0ee; color:#b04438; border-color:#f4dcd8; } .badge.manual_review,.badge.unknown,.badge.quarantined,.badge.needs_decisions { background:#fff7e8; color:#936713; border-color:#f0e2be; } .badge.voided,.badge.pending,.badge.sending,.badge.accepted,.badge.ready,.badge.analyzing,.badge.queued,.badge.applying { background:#eef4fc; color:#466d9d; border-color:#dce6f5; } .empty { text-align:center; padding:56px 28px; color:var(--muted); }
.button,button { font:inherit; font-size:14px; font-weight:550; border:1px solid var(--green); background:var(--green); border-radius:8px; padding:10px 17px; min-height:43px; color:#fff; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; gap:8px; white-space:nowrap; line-height:1.5; transition:background .15s; } .button:hover,button:hover { background:#1b5846; text-decoration:none; } .secondary { background:#fff; border-color:#d6dfe7; color:var(--ink); } .secondary:hover { background:#f6f8fa; } .small { padding:7px 12px; font-size:13px; min-height:35px; } .fit { width:fit-content; } .text-button { background:none; color:var(--green); border:0; padding:10px 0; min-height:0; font-size:13px; } .text-button:hover { background:none; text-decoration:underline; } button:disabled { cursor:default; opacity:.6; } :focus-visible { outline:3px solid #a9ccb9; outline-offset:3px; }
label { font-size:14px; font-weight:550; display:flex; flex-direction:column; gap:8px; } input,select,textarea { border:1px solid #cfd8e2; border-radius:8px; padding:11px 12px; background:white; color:var(--ink); font:inherit; font-size:15px; width:100%; min-width:0; line-height:1.5; } input::placeholder,textarea::placeholder { color:var(--ink); opacity:1; } input:focus,select:focus,textarea:focus { outline:2px solid #a9ccb9; outline-offset:1px; border-color:#88af9a; } textarea { resize:vertical; } input[readonly] { background:#f7f9fb; } input[type=checkbox] { width:17px; min-width:17px; height:17px; accent-color:var(--green); } input[type=file] { padding:12px; font-size:14px; } label small { font-weight:400; line-height:1.55; } .required { color:var(--green); }
.filters { display:flex; gap:14px; align-items:flex-end; margin:0 0 24px; flex-wrap:wrap; padding:20px; border:1px solid var(--line); border-radius:10px; background:#fff; } .filters label { min-width:140px; font-size:13px; } .filters button { min-height:46px; } .grow { flex:1; } .form-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px; } .wide { grid-column:1/-1; } .form-section { border-top:1px solid var(--line); padding-top:24px; margin-top:2px; } .form-section h2 { margin-bottom:5px; font-size:18px; } .form-section p { margin:0; } .form-actions { display:flex; justify-content:flex-end; gap:12px; border-top:1px solid var(--line); padding-top:24px; margin-top:8px; } .stack { display:flex; flex-direction:column; gap:18px; margin:22px 0; } .hint { font-size:13px; color:var(--muted); line-height:1.65; } .notice { background:#eff5f8; border:1px solid #dae6ed; padding:17px 20px; border-radius:9px; margin-bottom:24px; font-size:14px; } .notice p:last-child { margin-bottom:0; } .notice.error { background:#fff2ef; border-color:#efd5cf; color:#9b3b2f; } .notice.success { background:#edf7f0; border-color:#d5e9dc; color:#2d714c; } .notice.warning { background:#fff8ea; border-color:#efdfbb; color:#765820; } .form-grid>.notice { margin:0; }
.info-strip { display:flex; align-items:center; gap:10px; color:var(--muted); font-size:12px; } .info-strip p { margin:0; } .status-dot { width:6px; height:6px; flex-shrink:0; border-radius:50%; background:#52916d; } .pagination { display:flex; justify-content:space-between; align-items:center; gap:15px; padding:20px 24px; border-top:1px solid var(--line); font-size:13px; color:var(--muted); } footer { margin-top:44px; border-top:1px solid var(--line); padding:22px 0; font-size:11px; color:var(--ink); display:flex; justify-content:space-between; gap:20px; }
.detail-grid { display:grid; grid-template-columns:1fr 1fr; gap:22px; } .balance-card { background:linear-gradient(115deg,#1b4539,#286b56); color:#e5f0eb; border:1px solid #285e4e; border-radius:12px; padding:30px; margin-bottom:24px; display:flex; flex-direction:column; justify-content:center; gap:12px; position:relative; overflow:hidden; } .balance-card:after { content:""; position:absolute; width:220px; height:220px; right:-100px; top:-80px; border:40px solid #ffffff07; border-radius:50%; pointer-events:none; } .balance-card strong { font-size:40px; letter-spacing:-1px; color:#fff; font-weight:600; font-variant-numeric:tabular-nums; } .balance-card>span { font-size:14px; } .balance-card>small { color:#c0d8cd; }
dl { display:grid; grid-template-columns:180px minmax(0,1fr); gap:16px; font-size:14px; margin:24px 0; } dt { color:var(--muted); } dd { margin:0; overflow-wrap:anywhere; } .back-link { display:inline-block; font-size:13px; margin:0 0 8px; } .check { display:flex; flex-direction:row; align-items:flex-start; gap:10px; font-weight:400; } .check input { margin-top:4px; } .grants-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px; } .grant-list { max-height:300px; overflow:auto; display:flex; flex-direction:column; gap:12px; padding-top:15px; } fieldset { min-width:0; border:1px solid var(--line); border-radius:9px; padding:22px; } legend { padding:0 8px; font-weight:600; } details summary { font-weight:550; cursor:pointer; font-size:15px; padding:3px 0; } details[open] summary { margin-bottom:18px; } pre { padding:20px; background:#f7f9fb; border-radius:8px; font-size:12px; max-height:450px; overflow:auto; } code { font-family:ui-monospace,SFMono-Regular,Consolas,monospace; font-size:13px; } .secret { padding:18px; background:#edf5ef; border-radius:8px; word-break:break-all; font-size:16px; letter-spacing:2px; } .copy-field { display:flex; align-items:stretch; gap:10px; } .copy-field input { font-family:ui-monospace,monospace; font-size:13px; } .copy-status { min-height:22px; font-size:12px; color:var(--green); } [hidden] { display:none !important; }
.public-page .main { margin:0 auto; max-width:1100px; padding:28px 24px 0; } .login-panel { max-width:460px; margin:8vh auto 16vh; padding:36px; background:#fff; border:1px solid var(--line); border-radius:16px; box-shadow:var(--shadow); } .login-panel .brand { margin:0 0 36px; font-size:23px; } .login-panel h1 { font-size:30px; } .holder-shell { max-width:680px; margin:10px auto; } .holder-header { display:flex; align-items:center; justify-content:space-between; margin:25px 0; } .holder-header .brand { margin:0; font-size:21px; } .holder-balance { min-height:220px; padding:34px; } .holder-balance strong { font-size:45px; } .list-row { display:flex; align-items:center; justify-content:space-between; gap:16px; padding:17px 0; border-bottom:1px solid var(--line); font-size:14px; } .list-row:last-child { border-bottom:none; } .list-row strong { font-weight:550; } .centered { text-align:center; } .preserve-lines { white-space:pre-wrap; }
@media(min-width:1550px) { .main { padding-right:60px; padding-left:60px; } }
@media(max-width:1150px) { .sidebar { width:235px; padding-left:12px; padding-right:12px; } .portal-page { padding-left:235px; } .main { padding-right:24px; padding-left:24px; } .grants-grid { grid-template-columns:1fr; } .stat { padding:20px; } th,td { padding-left:18px; padding-right:18px; } .topbar-context .timezone { display:none; } }
@media(max-width:860px) { .detail-grid { grid-template-columns:1fr; gap:0; } .page-header { align-items:flex-start; } h1 { font-size:29px; } .stats { gap:12px; } .stat { padding:18px; } .stat>strong { font-size:32px; } }
@media(max-width:760px) { .sidebar { display:none; width:100%; height:calc(100dvh - 66px); top:66px; padding:16px 20px; } body.menu-open .sidebar { display:flex; } .sidebar>.brand { display:none; } .sidebar nav>a { min-height:46px; } .portal-page { padding-left:0; } .main { margin:0; padding:0 18px; } .topbar { min-height:66px; margin-bottom:24px; background:var(--paper); position:sticky; top:0; z-index:30; } .topbar-title { display:none; } .topbar-context { gap:7px; font-size:12px; } .mobile-menu { display:inline-flex; padding:7px 12px; min-height:38px; } .page-header { margin:16px 0 24px; flex-wrap:wrap; gap:16px; } .page-header>.button { width:100%; } .stats { grid-template-columns:1fr; gap:12px; } .stat { position:relative; padding:17px 20px; } .stat>strong { position:absolute; right:20px; top:14px; margin:0; font-size:30px; } .stat>span { display:block; padding-right:75px; } .stat small { margin-top:6px; } .fiscal-summary { padding:22px; flex-direction:column; align-items:flex-start; } .padded { padding:22px; } .panel-header { padding:22px; align-items:flex-start; } .panel-header h2 { font-size:18px; } .panel-header a { font-size:12px; white-space:nowrap; } th,td { padding:15px 18px; min-width:105px; } .form-grid { grid-template-columns:1fr; gap:22px; } .wide { grid-column:1; } .filters { padding:16px; gap:12px; } .filters label { min-width:0; flex:1 0 42%; } .filters label.grow { flex-basis:100%; } .filters button { flex:1; } .form-actions { flex-wrap:wrap; } .form-actions .button,.form-actions button { flex:1; } .public-page .main { padding:18px; } .login-panel { margin:4vh auto; padding:26px; } footer span { display:none; } dl { grid-template-columns:1fr; gap:5px; } dd { margin-bottom:12px; } .holder-balance strong { font-size:38px; } .copy-field { flex-direction:column; } .pagination { flex-wrap:wrap; } .environment { font-size:10px; } }
@media(prefers-reduced-motion:reduce) { * { transition:none !important; } }
.review-records { margin-top:20px; max-height:650px; overflow:auto; border:1px solid var(--line); border-radius:8px; }
.review-records>details { padding:18px 22px; border-bottom:1px solid var(--line); }
.review-records>details:last-child { border-bottom:0; }
@media(max-width:760px) { .review-records { max-height:470px; } .review-records>details { padding:15px; } }
