:root{
    --font-main:'Inter',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
    --color-primary:#0345bf;
    --color-primary-dark:#023a9f;
    --color-title-bg:#0345bf;
    --color-title-text:#ffffff;
    --color-menu-bg:#ffffff;
    --color-menu-text:#1D2027;
    --color-footer-bg:#1D2027;
    --color-footer-text:#ffffff;
    --color-bg:#EBF3FE;
    --color-card:#ffffff;
    --color-text:#1D2027;
    --color-muted:#667085;
    --color-border:#e4e7ec;
    --color-success:#0f766e;
    --color-error:#b91c1c;
    --radius-lg:18px;
    --radius-md:12px;
    --shadow:0 12px 34px rgba(16,24,40,.08);
    --pad:22px;
}
*{box-sizing:border-box}
html,body{min-height:100%}
body{margin:0;font-family:var(--font-main);background:var(--color-bg);color:var(--color-text);font-size:15px}
a{text-decoration:none;color:inherit}
.app-shell{min-height:100vh;display:flex;flex-direction:column}
.title-bar{background:var(--color-title-bg);color:var(--color-title-text);padding:12px 30px;display:flex;align-items:center;justify-content:space-between;gap:18px}
.title-brand{display:flex;align-items:center;gap:14px}
.brand-mark{width:42px;height:42px;border-radius:12px;background:#ffffff;color:var(--color-primary);display:grid;place-items:center;font-weight:900;font-size:22px;box-shadow:0 6px 18px rgba(0,0,0,.12)}
.brand-mark.large{width:64px;height:64px;margin:0 auto 14px;font-size:32px;background:var(--color-primary);color:#fff}
.title-brand strong{display:block;font-size:18px;line-height:1.1}.title-brand span{display:block;font-size:13px;opacity:.9;margin-top:3px}.title-user{border:1px solid rgba(255,255,255,.35);border-radius:999px;padding:9px 15px;font-weight:700;font-size:13px;white-space:nowrap}
.horizontal-menu{background:var(--color-menu-bg);color:var(--color-menu-text);border-bottom:1px solid var(--color-border);padding:0px 30px;display:flex;align-items:center;gap:4px;box-shadow:0 4px 18px rgba(16,24,40,.04)}
.horizontal-menu a{display:inline-flex;align-items:center;padding:30px 16px;font-weight:700;border-bottom:3px solid transparent;color:var(--color-menu-text)}
.horizontal-menu a:hover,.horizontal-menu a.active{background:#ffffff;border-bottom-color:var(--color-primary)}
.main-content{width:100%;max-width:1380px;margin:0 auto;flex:1;padding:28px 30px 36px}.topbar{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:22px}.eyebrow{text-transform:uppercase;letter-spacing:.12em;color:var(--color-primary);font-size:12px;font-weight:700;margin:0 0 6px}.topbar h1{margin:0;font-size:25px;color:var(--color-text);letter-spacing:-.02em}.user-pill{background:#fff;border:1px solid var(--color-border);border-radius:999px;padding:10px 16px;font-weight:700;color:var(--color-primary)}
.site-footer{background:var(--color-footer-bg);color:var(--color-footer-text);padding:16px 30px;text-align:center;font-size:13px;font-weight:600}.site-footer span{opacity:.86}
.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:22px}.stats-grid.compact{grid-template-columns:repeat(7,minmax(0,1fr))}.stat-card{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.stat-card.highlight{background:var(--color-primary);color:#fff}.stat-card.wide{grid-column:span 2}.stat-card span{display:block;color:var(--color-muted);font-weight:700;font-size:13px}.stat-card.highlight span,.stat-card.highlight small{color:#eaf1ff}.stat-card strong{display:block;font-size:20px;margin:8px 0 4px;color:inherit}.stat-card small{color:var(--color-muted);font-weight:600}.panel,.formula-box,.report-head{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--pad);margin-bottom:22px}.panel-header{display:flex;justify-content:space-between;gap:18px;align-items:center;margin-bottom:18px}.panel-header h2,.formula-box h3,.report-head h2{margin:0;color:var(--color-primary)}.panel-header p{margin:6px 0 0;color:var(--color-muted)}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;min-width:920px}th{background:#EBF3FE;color:var(--color-primary);font-size:12px;text-transform:uppercase;letter-spacing:.04em;text-align:left}th,td{padding:13px 12px;border-bottom:1px solid var(--color-border);vertical-align:top}td{font-size:14px}.num{text-align:right;white-space:nowrap}.strong{font-weight:700;color:var(--color-primary)}.empty{text-align:center;color:var(--color-muted);padding:30px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.form-grid.single{grid-template-columns:1fr}.full{grid-column:1/-1}label{display:flex;flex-direction:column;gap:8px;font-weight:700;color:var(--color-text)}input,textarea,select{font:inherit;border:1px solid var(--color-border);border-radius:12px;padding:13px 14px;background:#fff;color:var(--color-text);outline:none}input:focus,textarea:focus,select:focus{border-color:var(--color-primary);box-shadow:0 0 0 4px rgba(3,69,191,.12)}.check-card{flex-direction:row;align-items:center;background:#EBF3FE;border:1px solid var(--color-border);border-radius:16px;padding:14px}.check-card input{width:20px;height:20px}.check-card small{display:block;color:var(--color-muted);font-weight:500;margin-top:3px}.btn{border:0;border-radius:12px;padding:12px 17px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:.18s ease}.btn:hover{transform:translateY(-1px)}.btn.primary{background:var(--color-primary);color:#fff}.btn.primary:hover{background:var(--color-primary-dark)}.btn.secondary{background:#eaf1ff;color:var(--color-primary)}.btn.ghost{background:#fff;border:1px solid var(--color-border);color:var(--color-muted)}.btn.full{width:100%}.form-actions{display:flex;justify-content:flex-end;gap:12px}.filters{display:flex;gap:12px;margin-bottom:18px;align-items:end;flex-wrap:wrap}.filters input[type=text]{min-width:300px}.report-filters label{min-width:210px}.badge{border-radius:999px;padding:5px 10px;font-weight:700;font-size:12px}.badge.yes{background:#dcfce7;color:#166534}.badge.no{background:#f1f5f9;color:#475569}.alert{border-radius:14px;padding:14px 16px;margin-bottom:18px;font-weight:700}.alert-success{background:#d1fae5;color:#065f46}.alert-error{background:#fee2e2;color:#991b1b}.formula-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:15px}.formula-grid span{background:#EBF3FE;border:1px solid var(--color-border);border-radius:14px;padding:14px;font-weight:700;text-align:center;color:var(--color-primary)}.login-body{min-height:100vh;display:grid;place-items:center;background:#f4f6fb;padding:24px}.login-card{width:min(450px,92vw);background:#fff;border-radius:24px;box-shadow:0 22px 70px rgba(16,24,40,.14);padding:34px;border:1px solid var(--color-border)}.login-brand{text-align:center;margin-bottom:22px}.login-brand h1{margin:0;color:var(--color-primary)}.login-brand p{color:var(--color-muted)}.report-head{text-align:center}.actions-cell{white-space:nowrap;min-width:150px}.btn.small{padding:8px 11px;border-radius:10px;font-size:12px;margin:2px}.btn.danger{background:#b91c1c;color:#fff}.btn.danger-soft{background:#fee2e2;color:#991b1b}.danger-panel{border-color:#fecaca}.delete-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:20px}.delete-summary div{background:#f8fafc;border:1px solid var(--color-border);border-radius:16px;padding:14px}.delete-summary span{display:block;color:var(--color-muted);font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.delete-summary strong{color:var(--color-primary)}
@media(max-width:1100px){.stats-grid,.stats-grid.compact{grid-template-columns:repeat(2,1fr)}.main-content{padding:22px}.title-bar,.horizontal-menu{padding-left:22px;padding-right:22px}.horizontal-menu{overflow:auto}.horizontal-menu a{white-space:nowrap}}
@media(max-width:720px){.title-bar{align-items:flex-start;flex-direction:column}.stats-grid,.stats-grid.compact,.form-grid,.formula-grid,.delete-summary{grid-template-columns:1fr}.stat-card.wide{grid-column:auto}.topbar,.panel-header{align-items:flex-start;flex-direction:column}.filters input[type=text]{min-width:100%;width:100%}.actions-cell{white-space:normal}.site-footer{text-align:left}.horizontal-menu{padding-left:12px;padding-right:12px}.horizontal-menu a{padding:14px 12px}}
@media print{.title-bar,.horizontal-menu,.site-footer,.topbar,.no-print,.btn,.alert{display:none!important}.app-shell{display:block}.main-content{padding:0;background:#fff}.panel,.stat-card,.report-head{box-shadow:none;border-color:#ddd}.stats-grid.compact{grid-template-columns:repeat(4,1fr)}body{background:#fff}table{font-size:11px;min-width:100%}th,td{padding:7px}}
/* Muniobras - estilos complementarios */
.hero-public{background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:28px;box-shadow:var(--shadow);margin-bottom:22px;display:flex;justify-content:space-between;gap:20px;align-items:center}.hero-public h1{margin:0;color:var(--color-primary);font-size:30px}.hero-public p{margin:8px 0 0;color:var(--color-muted)}.cards-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.obra-card{background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column}.obra-img{height:210px;background:#dbeafe;display:block;width:100%;object-fit:cover}.obra-body{padding:18px;display:flex;flex-direction:column;gap:10px;flex:1}.obra-body h3{margin:0;color:var(--color-primary);font-size:18px}.obra-meta{display:grid;grid-template-columns:1fr 1fr;gap:10px;color:var(--color-muted);font-size:13px}.obra-meta strong{display:block;color:var(--color-text);font-size:14px;margin-top:3px}.tabs{display:flex;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--color-border);margin-bottom:18px}.tab-btn{border:0;background:#fff;padding:14px 16px;font-weight:800;color:var(--color-muted);border-bottom:3px solid transparent;cursor:pointer}.tab-btn.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab-panel{display:none}.tab-panel.active{display:block}.detail-grid{display:grid;grid-template-columns:2fr 1fr;gap:22px}.info-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.info-item{background:#f8fafc;border:1px solid var(--color-border);border-radius:14px;padding:14px}.info-item span{display:block;color:var(--color-muted);font-size:12px;text-transform:uppercase;font-weight:800;letter-spacing:.04em}.info-item strong{display:block;margin-top:7px;color:var(--color-text)}.provider-card{text-align:center}.provider-logo{width:110px;height:110px;border-radius:18px;object-fit:contain;background:#fff;border:1px solid var(--color-border);padding:10px;margin:0 auto 12px}.gallery-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.gallery-grid img{width:100%;height:220px;object-fit:cover;border-radius:16px;border:1px solid var(--color-border)}.desc-text{line-height:1.75;text-align:justify;white-space:pre-line}.embed-note{background:#eaf1ff;border:1px solid #bfdbfe;color:#1e40af;border-radius:14px;padding:12px 14px;margin-bottom:18px;font-weight:700}.muted{color:var(--color-muted)}.photo-preview{width:90px;height:70px;object-fit:cover;border-radius:10px;border:1px solid var(--color-border)}.status-activa{background:#dcfce7;color:#166534}.status-inactiva{background:#fee2e2;color:#991b1b}.status-finalizada{background:#dbeafe;color:#1d4ed8}.status-ejecucion{background:#fef3c7;color:#92400e}.status-suspendida{background:#fee2e2;color:#991b1b}@media(max-width:1100px){.cards-grid,.gallery-grid{grid-template-columns:repeat(2,1fr)}.detail-grid{grid-template-columns:1fr}}@media(max-width:720px){.hero-public{align-items:flex-start;flex-direction:column}.cards-grid,.gallery-grid,.info-list{grid-template-columns:1fr}.obra-meta{grid-template-columns:1fr}.hero-public h1{font-size:24px}}
