:root{
  --green:#167763; --green-d:#0f5849; --amber:#f39c12;
  --bg:#f4f6f5; --card:#ffffff; --ink:#1d2624; --muted:#79857f;
  --line:#e6eae8; --danger:#e0533d; --radius:18px;
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
.vh-input{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); border:0; opacity:0}
html,body{margin:0;padding:0;height:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; background:var(--bg); color:var(--ink); overscroll-behavior-y:none; -webkit-font-smoothing:antialiased}
.hidden{display:none !important}
button{font-family:inherit; cursor:pointer}

.topbar{position:sticky; top:0; z-index:20; background:var(--green); color:#fff; padding:calc(12px + var(--safe-t)) 18px 12px; display:flex; align-items:center; justify-content:space-between}
.topbar-title{font-size:20px; font-weight:700}
.icon-btn{background:rgba(255,255,255,.18); border:0; color:#fff; width:36px; height:36px; border-radius:10px; font-size:18px}

#main{padding:16px 16px 120px; max-width:560px; margin:0 auto}
.view{animation:fade .2s ease}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.section-head{display:flex; align-items:center; justify-content:space-between; margin:22px 2px 10px}
.section-head h2{font-size:15px; font-weight:700; color:var(--muted); margin:0; text-transform:uppercase; letter-spacing:.4px}

.hero-card{background:linear-gradient(135deg,var(--green),var(--green-d)); color:#fff; border-radius:24px; padding:24px 22px; box-shadow:0 10px 24px -12px rgba(15,88,73,.6)}
.hero-label{font-size:14px; opacity:.85}
.hero-amount{font-size:40px; font-weight:800; margin:6px 0 2px; letter-spacing:-1px}
.hero-sub{font-size:13px; opacity:.8}

.cat-breakdown{display:flex; flex-direction:column; gap:10px}
.cat-row{background:var(--card); border:0; width:100%; text-align:left; border-radius:14px; padding:12px 14px; display:flex; align-items:center; gap:12px; box-shadow:0 1px 3px rgba(0,0,0,.04)}
.cat-row.sel{box-shadow:0 0 0 2px var(--green)}
.cat-row:active{transform:scale(.99)}
.home-filter{display:flex; gap:8px; margin:14px 0 0; align-items:center}
.cat-dot{width:34px; height:34px; border-radius:10px; display:grid; place-items:center; font-size:17px; flex-shrink:0}
.cat-row .cat-name{font-weight:600; flex:1}
.cat-row .cat-amt{font-weight:700}
.cat-row .cat-bar{height:5px; border-radius:3px; margin-top:5px; background:var(--line); overflow:hidden}
.cat-row .cat-bar > i{display:block; height:100%; border-radius:3px}
.cat-row .cat-left{flex:1; min-width:0}

.expense-list{display:flex; flex-direction:column; gap:8px}
.exp{background:var(--card); border-radius:14px; padding:12px 14px; display:flex; align-items:flex-start; gap:12px; box-shadow:0 1px 3px rgba(0,0,0,.04); border:0; width:100%; text-align:left}
.exp:active{transform:scale(.99)}
.exp .ico{width:40px; height:40px; border-radius:12px; display:grid; place-items:center; font-size:19px; flex-shrink:0}
.exp .mid{flex:1; min-width:0}
.exp .mid .t{display:block; font-weight:600; overflow-wrap:anywhere}
.exp .mid .s{display:block; font-size:12.5px; color:var(--muted); margin-top:3px; line-height:1.35; overflow-wrap:anywhere}
.exp .right{text-align:right; flex-shrink:0; padding-left:8px; padding-top:2px}
.exp .right .amt{font-weight:700; white-space:nowrap}
.exp .right .clip{font-size:12px; color:var(--muted)}
.empty{text-align:center; color:var(--muted); padding:38px 10px; font-size:14px}
.empty .big{font-size:40px; display:block; margin-bottom:8px; opacity:.5}

.filters{display:flex; gap:8px; flex-wrap:wrap}
.filter-input{flex:1 1 46%; min-width:0; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:11px 12px; font-size:15px; color:var(--ink)}
.filter-summary{font-size:13px; color:var(--muted); margin:10px 2px 12px; font-weight:600}

.report-box{background:var(--card); border-radius:16px; padding:16px; box-shadow:0 1px 3px rgba(0,0,0,.04)}

.cat-manager{display:flex; flex-direction:column; gap:8px; margin-bottom:12px}
.cat-manage-row{background:var(--card); border-radius:14px; padding:10px 12px; display:flex; align-items:center; gap:12px; box-shadow:0 1px 3px rgba(0,0,0,.04)}
.cat-manage-row .cat-name{flex:1; font-weight:600}
.cat-manage-row .mini{background:none; border:0; font-size:18px; padding:4px 6px; color:var(--muted)}

.settings-list{display:flex; flex-direction:column; gap:8px}
.settings-item{background:var(--card); border:0; border-radius:14px; padding:15px 16px; display:flex; align-items:center; justify-content:space-between; font-size:15px; color:var(--ink); width:100%; text-align:left; box-shadow:0 1px 3px rgba(0,0,0,.04)}
.settings-item.danger{color:var(--danger)}
.settings-item .chev{color:var(--muted); font-size:20px}
.muted-note{font-size:12.5px; color:var(--muted); margin:14px 4px; line-height:1.5}

.btn-primary{background:var(--green); color:#fff; border:0; border-radius:14px; padding:15px; font-weight:700; font-size:15px}
.btn-secondary{background:var(--card); border:1.5px dashed var(--green); color:var(--green); border-radius:14px; padding:14px; font-weight:700; font-size:15px}
.full{width:100%}
.btn-delete{background:#fdecea; color:var(--danger); border:0; border-radius:14px; padding:14px; font-weight:700; font-size:15px; margin-top:8px}

.fab{position:fixed; right:18px; bottom:calc(78px + var(--safe-b)); z-index:30; width:60px; height:60px; border-radius:20px; border:0; background:var(--amber); color:#fff; font-size:34px; font-weight:300; line-height:1; box-shadow:0 10px 22px -6px rgba(243,156,18,.7)}
.fab:active{transform:scale(.94)}

.bottomnav{position:fixed; left:0; right:0; bottom:0; z-index:25; background:rgba(255,255,255,.96); backdrop-filter:blur(10px); border-top:1px solid var(--line); display:flex; padding:6px 6px calc(6px + var(--safe-b))}
.nav-btn{flex:1; background:none; border:0; padding:8px 0; display:flex; flex-direction:column; align-items:center; gap:2px; font-size:11px; color:var(--muted)}
.nav-btn .nav-ico{font-size:21px; filter:grayscale(1); opacity:.7}
.nav-btn.active{color:var(--green); font-weight:700}
.nav-btn.active .nav-ico{filter:none; opacity:1}

.sheet-backdrop{position:fixed; inset:0; z-index:40; background:rgba(0,0,0,.4); display:flex; align-items:flex-end; animation:fade .2s}
.sheet{background:var(--bg); width:100%; max-width:560px; margin:0 auto; border-radius:24px 24px 0 0; max-height:92vh; display:flex; flex-direction:column; animation:slideup .25s ease}
.sheet.small{max-height:80vh}
@keyframes slideup{from{transform:translateY(100%)}to{transform:none}}
.sheet-handle{width:40px; height:4px; border-radius:2px; background:#cdd4d1; margin:10px auto 4px}
.sheet-head{display:flex; align-items:center; justify-content:space-between; padding:6px 16px 12px; border-bottom:1px solid var(--line)}
.sheet-head h3{margin:0; font-size:17px}
.link-btn{background:none; border:0; color:var(--green); font-size:16px; padding:6px}
.link-btn.strong{font-weight:700}
.sheet-body{padding:18px 16px calc(28px + var(--safe-b)); overflow-y:auto}

.field{display:block; margin-bottom:18px}
.field-label{display:block; font-size:13px; font-weight:600; color:var(--muted); margin-bottom:7px}
.field-label .opt{font-weight:400; opacity:.7}
.field input[type=text],.field input[type=number],.field input[type=date],.field input[type=month]{width:100%; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:13px 14px; font-size:16px; color:var(--ink)}
.amount-wrap{display:flex; align-items:center; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:0 14px}
.amount-wrap .cur{font-size:22px; font-weight:700; color:var(--muted)}
.amount-wrap input{border:0 !important; background:none !important; font-size:26px !important; font-weight:700; padding:14px 8px !important}
.amount-wrap input:focus{outline:none}

.chips{display:flex; flex-wrap:wrap; gap:8px}
.chip{background:var(--card); border:1.5px solid var(--line); border-radius:999px; padding:9px 14px; font-size:14px; font-weight:600; display:flex; align-items:center; gap:6px; color:var(--ink)}
.chip.active{border-color:transparent; color:#fff}

.receipt-buttons{display:flex; gap:10px}
.rcpt-btn{flex:1; background:var(--card); border:1.5px dashed var(--line); border-radius:14px; padding:18px; display:flex; flex-direction:column; align-items:center; gap:6px; font-size:24px; font-weight:600; color:var(--muted)}
.rcpt-btn span{font-size:13px}
.receipt-list{display:flex; flex-direction:column; gap:8px; margin-top:12px}
.receipt-item{position:relative; background:var(--card); border-radius:14px; padding:10px; display:flex; align-items:center; gap:12px}
.receipt-item img{width:54px; height:54px; object-fit:cover; border-radius:10px}
.receipt-item .pdf-ico{width:54px; height:54px; border-radius:10px; background:#fdecea; color:var(--danger); display:grid; place-items:center; font-size:18px; font-weight:700}
.receipt-item .pinfo{flex:1; min-width:0}
.receipt-item .pinfo .pn{font-weight:600; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.receipt-item .pinfo .ps{font-size:12px; color:var(--muted)}
.receipt-item .rm{background:#fdecea; color:var(--danger); border:0; border-radius:10px; width:34px; height:34px; font-size:16px; flex-shrink:0}

.det-amount{font-size:36px; font-weight:800; text-align:center; margin:6px 0}
.det-cat{display:flex; align-items:center; justify-content:center; gap:8px; margin-bottom:18px; flex-wrap:wrap}
.det-pill{display:inline-flex; align-items:center; gap:6px; padding:6px 14px; border-radius:999px; color:#fff; font-weight:600; font-size:14px}
.det-pill.ghost{background:var(--card); color:var(--ink); border:1px solid var(--line)}
.det-rows{background:var(--card); border-radius:16px; overflow:hidden}
.det-row{display:flex; justify-content:space-between; gap:12px; padding:14px 16px; border-bottom:1px solid var(--line); font-size:15px}
.det-row:last-child{border-bottom:0}
.det-row .k{color:var(--muted); flex-shrink:0}
.det-row .v{text-align:right}
.det-receipts{margin-top:16px; display:flex; flex-direction:column; gap:12px}
.det-receipts img{width:100%; border-radius:16px; display:block}
.det-receipts .pdf-card{background:var(--card); border-radius:16px; padding:22px; display:flex; align-items:center; gap:14px}
.det-receipts .pdf-card .big{width:54px;height:54px;border-radius:12px;background:#fdecea;color:var(--danger);display:grid;place-items:center;font-size:20px;font-weight:700}

.viewer{position:fixed; inset:0; z-index:60; background:rgba(0,0,0,.92); display:flex; align-items:center; justify-content:center}
.viewer-close{position:absolute; top:calc(14px + var(--safe-t)); right:16px; background:rgba(255,255,255,.15); color:#fff; border:0; width:42px; height:42px; border-radius:50%; font-size:20px; z-index:2}
.viewer-content{width:100%; height:100%; display:flex; align-items:center; justify-content:center; padding:20px}
.viewer-content img{max-width:100%; max-height:100%; object-fit:contain; border-radius:8px}
.viewer-content iframe{width:100%; height:100%; border:0; border-radius:8px; background:#fff}

.color-grid{display:flex; flex-wrap:wrap; gap:10px}
.color-grid .sw{width:38px; height:38px; border-radius:12px; border:3px solid transparent}
.color-grid .sw.active{border-color:var(--ink)}
.icon-grid{display:flex; flex-wrap:wrap; gap:8px}
.icon-grid .ic{width:44px; height:44px; border-radius:12px; background:var(--card); border:1.5px solid var(--line); display:grid; place-items:center; font-size:20px}
.icon-grid .ic.active{border-color:var(--green); background:#e7f3f0}

.toast{position:fixed; left:50%; transform:translateX(-50%); bottom:calc(90px + var(--safe-b)); z-index:80; background:var(--ink); color:#fff; padding:12px 20px; border-radius:12px; font-size:14px; font-weight:600; box-shadow:0 8px 20px rgba(0,0,0,.3); animation:fade .2s; max-width:90%; text-align:center}

.loading{position:fixed; inset:0; z-index:90; background:rgba(0,0,0,.45); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px; color:#fff; font-weight:600}
.spinner{width:42px; height:42px; border:4px solid rgba(255,255,255,.3); border-top-color:#fff; border-radius:50%; animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* Pantalla de bloqueo */
.lock{position:fixed; inset:0; z-index:200; background:linear-gradient(160deg,var(--green),var(--green-d)); display:flex; align-items:center; justify-content:center; padding:24px}
.lock-box{width:100%; max-width:330px; text-align:center; color:#fff}
.lock-logo{font-size:44px}
.lock-title{font-size:26px; font-weight:800; margin-top:4px}
.lock-sub{opacity:.85; margin:6px 0 18px; font-size:14px}
.lock-pin{width:100%; text-align:center; font-size:22px; letter-spacing:6px; padding:14px; border-radius:14px; border:0; margin-bottom:8px}
.lock-err{color:#ffdad2; min-height:18px; font-size:13px; margin-bottom:8px}
.lock .btn-primary{background:#fff; color:var(--green)}
.lock .btn-secondary{background:transparent; color:#fff; border-color:rgba(255,255,255,.6)}
