:root{--ink:#0b2133;--ink-2:#18384e;--muted:#657886;--line:#dce5ea;--bg:#f3f7f9;--paper:#fff;--teal:#169d8a;--teal-soft:#e5f6f2;--amber:#b96c0a;--amber-soft:#fff3df;--red:#b63b4b;--red-soft:#fdebee;--blue:#2876aa;--blue-soft:#e7f2fa;--shadow:0 18px 46px rgba(11,33,51,.09);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--bg);font-synthesis:none}
*{box-sizing:border-box}html{min-width:320px;background:var(--bg)}body{margin:0;min-height:100vh;font-size:16px;line-height:1.5}button,input,select,textarea{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:3px solid rgba(40,118,170,.3);outline-offset:2px}h1,h2,h3,p{margin-top:0}h1,h2,h3{letter-spacing:-.035em;line-height:1.12}h1{font-size:clamp(2rem,4vw,3.6rem)}h2{font-size:clamp(1.55rem,2.6vw,2.15rem)}h3{font-size:1.15rem}.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-size:.75rem;font-weight:800;color:var(--teal);margin-bottom:.55rem}.muted{color:var(--muted)}[hidden]{display:none!important}
.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(420px,.85fr);background:var(--ink)}.auth-brand{padding:clamp(2rem,7vw,7rem);display:flex;flex-direction:column;justify-content:center;color:#fff;background:radial-gradient(circle at 14% 24%,rgba(44,197,172,.16),transparent 32%),linear-gradient(135deg,#0b2133 0%,#102d41 100%);position:relative;overflow:hidden}.auth-brand:after{content:"";position:absolute;width:360px;height:360px;border:1px solid rgba(255,255,255,.09);border-radius:50%;right:-130px;bottom:-120px;box-shadow:0 0 0 70px rgba(255,255,255,.025),0 0 0 140px rgba(255,255,255,.018)}.brand-mark{display:grid;place-items:center;width:64px;height:64px;border-radius:19px;background:var(--teal);color:#fff;font-weight:900;letter-spacing:-.08em;margin-bottom:2.2rem;box-shadow:0 14px 30px rgba(0,0,0,.18)}.brand-mark.small{width:42px;height:42px;border-radius:13px;margin:0;font-size:.9rem}.auth-brand h1{max-width:630px;margin-bottom:1.25rem}.auth-copy{max-width:580px;color:#bfd0db;font-size:1.15rem}.trust-note{margin-top:2.4rem;display:flex;align-items:center;gap:.65rem;color:#dce8ee;font-size:.9rem}.trust-note span{width:9px;height:9px;border-radius:50%;background:#3cdbb9;box-shadow:0 0 0 5px rgba(60,219,185,.13)}.login-card{background:var(--paper);display:flex;flex-direction:column;justify-content:center;padding:clamp(2rem,7vw,7rem);gap:1.8rem}.login-card h2{font-size:2.25rem;margin-bottom:.55rem}.login-card form{display:grid;gap:1.15rem}.login-card label{display:grid;gap:.45rem;font-weight:750;font-size:.9rem}.login-card input{width:100%;border:1px solid #c9d5dc;border-radius:12px;padding:.86rem 1rem;background:#fbfdfe;color:var(--ink);min-height:50px}.login-card input:hover{border-color:#95a9b5}.password-wrap{position:relative}.password-wrap input{padding-right:4.1rem}.icon-button{position:absolute;right:.45rem;top:.42rem;border:0;background:transparent;color:var(--blue);font-size:.83rem;font-weight:800;padding:.55rem}.primary-button,.secondary-button{border:0;border-radius:11px;min-height:46px;padding:.72rem 1.05rem;font-weight:800}.primary-button{background:var(--ink);color:#fff;box-shadow:0 8px 18px rgba(11,33,51,.17)}.primary-button:hover{background:var(--ink-2)}.primary-button:disabled{opacity:.55;cursor:wait}.secondary-button{border:1px solid var(--line);background:var(--paper);color:var(--ink)}.secondary-button:hover{border-color:#aac0cc;background:#f8fbfc}.form-error{padding:.8rem 1rem;border-radius:10px;background:var(--red-soft);color:#8f2334;font-size:.9rem;margin:0}.security-copy{font-size:.78rem;color:var(--muted);border-top:1px solid var(--line);padding-top:1rem}
.app-shell{min-height:100vh;display:grid;grid-template-columns:244px minmax(0,1fr)}.sidebar{position:sticky;top:0;height:100vh;background:var(--ink);color:#fff;padding:1.35rem 1rem;display:flex;flex-direction:column;z-index:10}.brand{display:flex;gap:.8rem;align-items:center;text-decoration:none;color:#fff;padding:.2rem .35rem 1.7rem}.brand>span:last-child{display:grid;line-height:1.1}.brand small{color:#9fb6c5}.sidebar nav{display:grid;gap:.3rem}.nav-link{border:0;background:transparent;color:#9fb6c5;text-align:left;padding:.78rem .85rem;border-radius:10px;display:flex;gap:.75rem;align-items:center;font-weight:700}.nav-link span{width:20px;text-align:center}.nav-link:hover{background:rgba(255,255,255,.06);color:#fff}.nav-link.active{background:rgba(44,197,172,.14);color:#fff}.sidebar-footer{margin-top:auto;border-top:1px solid rgba(255,255,255,.1);padding:.95rem .35rem 0}.session-user{display:flex;align-items:center;gap:.7rem}.session-user>div:last-child{display:grid;min-width:0}.session-user strong,.session-user small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-user small{color:#9fb6c5;font-size:.72rem}.avatar{width:36px;height:36px;display:grid;place-items:center;border-radius:11px;background:#29475a;color:#fff;font-weight:900}.text-button{border:0;background:transparent;color:#a9becb;padding:.7rem 0;font-size:.82rem}.text-button:hover{color:#fff}.workspace{min-width:0}.topbar{min-height:86px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:1rem;justify-content:space-between;padding:1rem clamp(1rem,3vw,2.2rem);position:sticky;top:0;z-index:8;backdrop-filter:blur(12px)}.topbar h1{font-size:1.35rem;margin:0}.topbar .eyebrow{margin-bottom:.2rem}.topbar-actions{display:flex;gap:.75rem;align-items:center}.live-status{display:inline-flex;align-items:center;gap:.5rem;font-size:.82rem;color:var(--muted);font-weight:700}.live-status i{display:block;width:8px;height:8px;border-radius:50%;background:#aab7bf}.live-status.connected i{background:var(--teal);box-shadow:0 0 0 4px var(--teal-soft)}.live-status.error i{background:var(--red)}.menu-button{display:none;border:0;background:transparent;font-size:1.5rem}.content{padding:clamp(1rem,3vw,2.2rem);max-width:1500px;margin:0 auto}.summary-heading,.section-heading,.panel-heading{display:flex;justify-content:space-between;gap:1rem;align-items:flex-end}.summary-heading h2,.section-heading h2,.panel-heading h3{margin-bottom:0}.section-heading{margin-bottom:1.5rem}.section-heading.compact{margin-top:2.2rem}.quality-banner{background:linear-gradient(100deg,var(--ink),#173f51);color:#fff;border-radius:18px;padding:1.25rem 1.4rem;display:grid;grid-template-columns:auto 1fr auto;gap:1rem;align-items:center;margin:1.3rem 0}.quality-ring{width:74px;height:74px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--teal) var(--quality),rgba(255,255,255,.14) 0);position:relative}.quality-ring:after{content:"";position:absolute;inset:7px;background:var(--ink);border-radius:50%}.quality-ring strong{position:relative;z-index:1;font-size:1.08rem}.quality-banner h3{margin:0 0 .25rem}.quality-banner p{margin:0;color:#bdd0db;font-size:.9rem}.quality-meta{text-align:right;color:#d4e0e6;font-weight:750;font-size:.88rem}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-bottom:1rem}.kpi-card,.panel,.data-card,.instrument-card,.issue-card{background:var(--paper);border:1px solid var(--line);border-radius:16px;box-shadow:0 8px 24px rgba(11,33,51,.035)}.kpi-card{padding:1.15rem}.kpi-label{display:flex;justify-content:space-between;color:var(--muted);font-size:.82rem;font-weight:750}.kpi-card strong{display:block;font-size:1.55rem;letter-spacing:-.04em;margin:.55rem 0 .15rem}.kpi-card small{color:var(--muted)}.dashboard-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1rem}.panel{padding:1.25rem}.span-7{grid-column:span 7}.span-5{grid-column:span 5}.panel-heading{margin-bottom:1rem}.link-button{border:0;background:transparent;color:var(--blue);font-weight:800;padding:.4rem}.compact-list{display:grid}.compact-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;padding:.85rem 0;border-top:1px solid #edf2f5}.compact-row:first-child{border-top:0}.compact-row strong{display:block}.compact-row small{color:var(--muted)}.amount{text-align:right;font-weight:850}.amount small{display:block;font-weight:650}.status{display:inline-flex;align-items:center;border-radius:999px;padding:.22rem .58rem;font-size:.7rem;font-weight:850;letter-spacing:.035em}.status.ESTIMADO,.status.PENDIENTE{background:var(--amber-soft);color:#8f5509}.status.CONFIRMADO,.status.CONCILIADO{background:var(--teal-soft);color:#0b7264}.status.PROYECTADO,.status.PARCIAL{background:var(--blue-soft);color:#1f6593}.status.NO_REQUIERE{background:#edf1f3;color:#526671}.data-grid,.cards-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.data-card,.instrument-card{padding:1.15rem}.data-card header,.instrument-card header{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start}.data-card .kind,.instrument-card .kind{font-size:.73rem;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;font-weight:800}.data-card h3,.instrument-card h3{margin:.45rem 0 .9rem}.data-card .value{font-size:1.4rem;font-weight:900;margin-bottom:.9rem}.status-row{display:flex;gap:.4rem;flex-wrap:wrap}.data-card p,.instrument-card p{color:var(--muted);font-size:.86rem;margin:.85rem 0 0}.filter-row{display:flex;gap:.55rem;flex-wrap:wrap;margin-bottom:1rem}.filter-chip{border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:.55rem .85rem;color:var(--muted);font-weight:750}.filter-chip.active{background:var(--ink);color:#fff;border-color:var(--ink)}.card-glyph{width:44px;height:31px;border-radius:7px;background:linear-gradient(135deg,var(--ink),#2c6075);position:relative}.card-glyph:after{content:"";position:absolute;left:7px;right:7px;top:8px;height:3px;background:rgba(255,255,255,.45)}.issues-list{display:grid;gap:.75rem}.issue-card{padding:1rem 1.1rem;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.9rem;align-items:center}.issue-index{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--amber-soft);color:var(--amber);font-weight:900}.issue-card h3{margin:0 0 .2rem;font-size:1rem}.issue-card p{margin:0;color:var(--muted);font-size:.86rem}.count-badge{background:var(--amber-soft);color:var(--amber);padding:.35rem .7rem;border-radius:999px;font-weight:850;font-size:.8rem}.table-wrap{overflow:auto;background:var(--paper);border:1px solid var(--line);border-radius:16px}table{width:100%;border-collapse:collapse;min-width:700px}th,td{text-align:left;padding:.9rem 1rem;border-bottom:1px solid var(--line)}th{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:#f8fbfc}td{font-size:.88rem}.empty-state{text-align:center;padding:5rem 1rem;max-width:540px;margin:0 auto}.empty-icon{width:52px;height:52px;border-radius:16px;background:var(--red-soft);color:var(--red);font-size:1.7rem;font-weight:900;display:grid;place-items:center;margin:0 auto 1rem}.loading-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.skeleton{height:150px;border-radius:16px;background:linear-gradient(90deg,#e6edf1,#f5f8fa,#e6edf1);background-size:200% 100%;animation:pulse 1.3s infinite}.skeleton.wide{grid-column:1/-1;height:110px}.toast-region{position:fixed;right:1rem;bottom:1rem;z-index:30;display:grid;gap:.5rem}.toast{background:var(--ink);color:#fff;padding:.75rem 1rem;border-radius:11px;box-shadow:var(--shadow);font-size:.85rem;animation:toast-in .2s ease}.toast.error{background:#8b2837}@keyframes pulse{to{background-position:-200% 0}}@keyframes toast-in{from{transform:translateY(8px);opacity:0}}
@media(max-width:1050px){.kpi-grid{grid-template-columns:repeat(2,1fr)}.span-7,.span-5{grid-column:1/-1}.data-grid,.cards-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.auth-shell{grid-template-columns:1fr}.auth-brand{min-height:36vh;padding:2rem}.auth-brand .brand-mark{margin-bottom:1rem}.auth-brand h1{font-size:2.35rem}.auth-copy{font-size:1rem}.trust-note{margin-top:1rem}.login-card{padding:2rem;justify-content:flex-start}.app-shell{display:block}.sidebar{position:fixed;inset:0 auto 0 0;width:260px;transform:translateX(-105%);transition:transform .22s ease;box-shadow:var(--shadow)}.sidebar.open{transform:translateX(0)}.menu-button{display:block}.topbar{align-items:center}.topbar>div:nth-child(2){flex:1}.topbar .eyebrow{display:none}.topbar-actions .secondary-button{display:none}.live-status{font-size:0}.live-status i{width:10px;height:10px}.content{padding:1rem}.summary-heading,.section-heading{align-items:flex-start;flex-direction:column}.quality-banner{grid-template-columns:auto 1fr}.quality-meta{grid-column:1/-1;text-align:left}.data-grid,.cards-grid{grid-template-columns:1fr}.issue-card{grid-template-columns:auto 1fr}.issue-card>.status{grid-column:2}.kpi-grid{gap:.75rem}.kpi-card{padding:1rem}.dashboard-grid{display:block}.panel+.panel{margin-top:.75rem}}
@media(max-width:440px){.auth-brand{min-height:31vh}.login-card{padding:1.4rem}.kpi-grid{grid-template-columns:1fr}.quality-ring{width:64px;height:64px}.topbar h1{font-size:1.05rem}.summary-heading .muted{font-size:.8rem}.compact-row{grid-template-columns:1fr}.amount{text-align:left}.filter-row{overflow-x:auto;flex-wrap:nowrap;padding-bottom:.3rem}.filter-chip{white-space:nowrap}}
.cycle-banner{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.25rem;padding:1rem 1.15rem;border:1px solid #9bded2;border-radius:16px;background:var(--teal-soft);color:#0b5d53}.cycle-banner div{display:grid;gap:.18rem}.cycle-banner span,.cycle-banner small{color:#35766e}.cycle-banner small{text-align:right;font-weight:750}@media(max-width:760px){.cycle-banner{align-items:flex-start;flex-direction:column}.cycle-banner small{text-align:left}}
.recovery-link{align-self:flex-start;border:0;background:transparent;color:var(--blue);font-weight:800;padding:.25rem 0;text-align:left}.recovery-link:hover{text-decoration:underline}.form-success{padding:.8rem 1rem;border-radius:10px;background:var(--teal-soft);color:#0b7264;font-size:.9rem;margin:0}
.kpi-grid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.table-wrap table{min-width:820px}.table-wrap td{vertical-align:top}.table-wrap td strong,.table-wrap td small{display:block}.table-wrap td small{color:var(--muted);margin-top:.2rem}.section-note{background:var(--blue-soft);color:#1b5d86;border-radius:12px;padding:.8rem 1rem;margin:-.5rem 0 1rem}.mini-kpi-grid{display:flex;gap:.8rem;flex-wrap:wrap;margin-bottom:1rem}.mini-kpi{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:1rem;min-width:220px;display:grid}.mini-kpi span,.mini-kpi small{color:var(--muted);font-size:.8rem}.mini-kpi strong{font-size:1.25rem;margin:.2rem 0}.modal-open{overflow:hidden}.modal{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:1rem}.modal-backdrop{position:absolute;inset:0;background:rgba(5,22,34,.66);backdrop-filter:blur(3px)}.modal-card{position:relative;width:min(920px,100%);max-height:calc(100vh - 2rem);overflow:auto;background:var(--paper);border-radius:18px;box-shadow:0 26px 70px rgba(0,0,0,.25);padding:1.4rem}.modal-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;border-bottom:1px solid var(--line);margin-bottom:1rem}.modal-header h2{margin-bottom:1rem}.icon-close{border:0;background:#eef3f5;color:var(--ink);border-radius:10px;width:40px;height:40px;font-size:1.5rem}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.form-grid label{display:grid;gap:.35rem;font-size:.84rem;font-weight:750}.form-grid input,.form-grid select,.form-grid textarea{width:100%;border:1px solid #c9d5dc;border-radius:10px;background:#fbfdfe;color:var(--ink);padding:.72rem .8rem;min-height:46px}.form-grid textarea{resize:vertical}.form-grid .span-2{grid-column:1/-1}.modal-actions{display:flex;justify-content:flex-end;gap:.7rem;margin-top:1rem}.modal .form-error{margin-top:1rem}
@media(max-width:620px){.modal{padding:0}.modal-card{max-height:100vh;height:100vh;border-radius:0;padding:1rem}.form-grid{grid-template-columns:1fr}.form-grid .span-2{grid-column:auto}.modal-actions{position:sticky;bottom:-1rem;background:var(--paper);padding:1rem 0}.modal-actions button{flex:1}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
.category-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.8rem}.archive-toggle{display:flex;align-items:center;gap:.55rem;font-weight:750;color:var(--muted)}.archive-toggle input{width:18px;height:18px;accent-color:var(--teal)}.category-tree{display:grid;gap:.5rem}.category-row{--depth:0;background:var(--paper);border:1px solid var(--line);border-left:4px solid var(--teal);border-radius:14px;padding:.85rem 1rem .85rem calc(1rem + min(var(--depth),5)*1.4rem);display:flex;align-items:center;justify-content:space-between;gap:1rem;box-shadow:0 5px 18px rgba(11,33,51,.025)}.category-row.archived{opacity:.68;border-left-color:#91a0a9;background:#f5f7f8}.category-main{display:flex;align-items:center;gap:.75rem;min-width:0}.category-main>div{min-width:0}.category-main strong,.category-main small{display:block}.category-main small{color:var(--muted);margin-top:.18rem}.category-branch{color:var(--teal);font-weight:900;width:18px;text-align:center}.category-actions{display:flex;align-items:center;justify-content:flex-end;gap:.15rem;flex-wrap:wrap}.category-actions .link-button{font-size:.79rem}.archive-action{color:#9a4b1d}.category-modal-card{width:min(680px,100%)}.empty-inline{padding:2rem;text-align:center;color:var(--muted);background:var(--paper);border:1px dashed var(--line);border-radius:14px}
@media(max-width:760px){.category-toolbar{align-items:flex-start}.category-row{align-items:flex-start;flex-direction:column;padding-left:calc(.8rem + min(var(--depth),3)*.8rem)}.category-actions{justify-content:flex-start;width:100%;border-top:1px solid var(--line);padding-top:.45rem}.category-actions .link-button{padding:.45rem}.category-main small{font-size:.78rem}}
.status.VERDE{background:var(--teal-soft);color:#0b7264}.status.AMARILLO{background:var(--amber-soft);color:#8f5509}.status.ROJO{background:var(--red-soft);color:#8f2334}.status.AZUL{background:var(--blue-soft);color:#1f6593}.budget-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-bottom:1.2rem}.budget-card{background:var(--paper);border:1px solid var(--line);border-left:5px solid var(--teal);border-radius:16px;padding:1.15rem;box-shadow:0 8px 24px rgba(11,33,51,.035)}.budget-card.amarillo{border-left-color:var(--amber)}.budget-card.rojo{border-left-color:var(--red)}.budget-card.azul{border-left-color:var(--blue)}.budget-card header,.budget-card footer{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.budget-card .kind{font-size:.72rem;color:var(--muted);font-weight:850;letter-spacing:.08em}.budget-card h3{margin:.3rem 0}.budget-card footer{align-items:center;border-top:1px solid var(--line);padding-top:.8rem;margin-top:.8rem;font-size:.8rem}.budget-main{display:grid;gap:.35rem;margin:.8rem 0}.budget-main>strong{font-size:1.3rem}.budget-main>strong small{font-size:.82rem;color:var(--muted)}.budget-main progress{width:100%;height:10px;accent-color:var(--teal)}.budget-card.amarillo progress{accent-color:var(--amber)}.budget-card.rojo progress{accent-color:var(--red)}.metric-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;margin:0}.metric-list>div{background:#f7fafb;border-radius:10px;padding:.65rem}.metric-list dt{font-size:.72rem;color:var(--muted)}.metric-list dd{margin:.15rem 0 0;font-weight:800;font-size:.86rem}.settings-panel{margin-top:1.5rem}.settings-form{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:.7rem;align-items:end}.settings-form label{display:grid;gap:.3rem;font-size:.75rem;font-weight:750;color:var(--muted)}.settings-form input{width:100%;border:1px solid #c9d5dc;border-radius:10px;padding:.65rem}.settings-form button{white-space:nowrap}@media(max-width:980px){.budget-grid{grid-template-columns:1fr}.settings-form{grid-template-columns:repeat(2,minmax(0,1fr))}.settings-form button{grid-column:1/-1}}@media(max-width:560px){.metric-list{grid-template-columns:1fr}.settings-form{grid-template-columns:1fr}.budget-card header,.budget-card footer{align-items:flex-start;flex-direction:column}.budget-card footer .link-button{padding-left:0}}
