:root{
  --bg:#0a0a0a; --bg2:#101010; --card:#141414; --card2:#1e1e1e;
  --text:#f2f2f2; --muted:#8f948f; --accent:#39ff14; --accent-dim:#2ecc10;
  --ok:#39ff14; --warn:#ffd166; --danger:#ff4d4d; --line:#262626; --line2:#333;
  --radius:6px;
  --font:'IBM Plex Sans',-apple-system,'Segoe UI',Roboto,sans-serif;
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);
  font-family:var(--font);font-size:16px}
#topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:8px;
  padding:calc(env(safe-area-inset-top) + 10px) 14px 10px;background:var(--bg);
  border-bottom:1px solid var(--accent)}
#topbar h1{flex:1;font-size:17px;margin:0;font-weight:700;letter-spacing:.5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.iconbtn{background:none;border:none;color:var(--text);font-size:21px;padding:6px 10px;border-radius:var(--radius)}
.iconbtn:active{background:var(--card)}
.hidden{display:none !important}
main{padding:14px 14px 150px;max-width:640px;margin:0 auto}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px;margin-bottom:12px}
.card h2{margin:0 0 8px;font-size:15px;letter-spacing:.3px}
.card h3{margin:0 0 6px;font-size:12px;color:var(--accent);font-weight:700;
  text-transform:uppercase;letter-spacing:1.2px}
.muted{color:var(--muted);font-size:13px}
.small{font-size:12px}

label.field{display:block;margin:10px 0 3px;font-size:12px;color:var(--muted);
  text-transform:uppercase;letter-spacing:.8px}
input[type=text],input[type=number],input[type=email],input[type=tel],textarea,select{
  width:100%;padding:11px 12px;border-radius:var(--radius);border:1px solid var(--line2);
  background:var(--bg2);color:var(--text);font-size:15px;font-family:var(--font)}
textarea{min-height:64px;resize:vertical}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;
  padding:13px 16px;border-radius:var(--radius);border:1px solid var(--line2);
  font-size:14px;font-weight:700;letter-spacing:.4px;
  background:var(--card2);color:var(--text);margin-top:10px;font-family:var(--font)}
.btn:active{transform:scale(.985)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#000}
.btn.ghost{background:transparent;border:1px dashed var(--line2);color:var(--muted)}
.btn.danger{background:transparent;border:1px solid var(--danger);color:var(--danger)}
.btn.small{width:auto;padding:8px 14px;font-size:13px;margin-top:0}
.btnrow{display:flex;gap:10px}
.btnrow .btn{flex:1}

#tabbar{position:fixed;left:0;right:0;bottom:0;z-index:18;display:flex;
  background:#000;border-top:1px solid var(--line2);
  padding-bottom:env(safe-area-inset-bottom)}
#tabbar .tab{flex:1;background:none;border:none;color:var(--muted);
  font-family:var(--font);font-size:13px;font-weight:700;letter-spacing:.5px;
  padding:13px 0 11px;border-top:2px solid transparent}
#tabbar .tab.active{color:var(--accent);border-top-color:var(--accent)}

.weeknav{display:flex;align-items:center;gap:8px}
.weeknav .wk{flex:1;text-align:center;font-weight:700;font-size:14px;letter-spacing:.4px}
.weeknav button{background:var(--card2);border:1px solid var(--line2);color:var(--accent);
  font-size:18px;font-weight:800;border-radius:var(--radius);padding:6px 16px}
.weektotal{text-align:center;font-size:30px;font-weight:800;color:var(--accent);
  margin:10px 0 2px;letter-spacing:.5px}
.weeksub{text-align:center;color:var(--muted);font-size:12px}
.daycard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:11px 13px;margin-bottom:9px}
.daycard.today{border-color:var(--accent)}
.dayhead{display:flex;align-items:center;gap:8px}
.dayhead .dname{flex:1;font-weight:700;font-size:14px}
.dayhead .dtotal{color:var(--accent);font-weight:800;font-size:15px}
.entryrow{display:flex;align-items:center;gap:8px;padding:7px 0;border-top:1px solid var(--line);font-size:13.5px}
.entryrow .ecode{font-weight:700;color:var(--accent);min-width:64px}
.entryrow .edesc{flex:1;color:var(--muted);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.entryrow .eamt{font-weight:700}
.entryrow .edel{background:none;border:none;color:var(--danger);font-size:16px;padding:2px 6px}
.catrow{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 4px}
.catrow .btn{width:auto;flex:1;min-width:30%;padding:9px 6px;font-size:12.5px;margin-top:0}
.raterow{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px solid var(--line);font-size:13px}
.raterow .rcode{font-weight:700;color:var(--accent);min-width:70px}
.raterow .rdesc{flex:1;color:var(--muted);font-size:12px}
.raterow input{width:84px;padding:7px 8px;text-align:right}

.fab{position:fixed;right:16px;bottom:calc(env(safe-area-inset-bottom) + 66px);z-index:15;
  background:var(--accent);color:#000;border:none;border-radius:var(--radius);
  padding:15px 22px;font-size:15px;font-weight:800;letter-spacing:.4px;
  font-family:var(--font);box-shadow:0 0 22px rgba(57,255,20,.35)}

.joblist .job{display:block;width:100%;text-align:left;background:var(--card);
  border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:var(--radius);padding:13px 14px;margin-bottom:10px;color:var(--text);
  font-family:var(--font)}
.job .addr{font-weight:700;font-size:15px}
.job .meta{color:var(--muted);font-size:12.5px;margin-top:3px}
.badge{display:inline-block;font-size:10px;font-weight:800;letter-spacing:.6px;
  border-radius:3px;padding:2px 7px;margin-left:6px;vertical-align:middle}
.badge.sent{background:rgba(57,255,20,.12);color:var(--accent);border:1px solid rgba(57,255,20,.4)}
.badge.open{background:rgba(255,209,102,.1);color:var(--warn);border:1px solid rgba(255,209,102,.35)}

.section{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 13px;margin-bottom:10px}
.section .shead{display:flex;align-items:center;gap:10px}
.section .sname{flex:1;font-weight:600;font-size:14.5px}
.section.na{opacity:.4}
.section .scount{font-size:12px;color:var(--accent)}
.thumbs{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.thumbs img{width:64px;height:64px;object-fit:cover;border-radius:4px;border:1px solid var(--line2)}
.thumbs .del{position:absolute;top:-6px;right:-6px;background:var(--danger);color:#fff;
  border:none;border-radius:50%;width:20px;height:20px;font-size:12px;line-height:1}
.thumbwrap{position:relative}
.camrow{display:flex;gap:8px;margin-top:10px}
.camrow .btn{margin-top:0;padding:10px}
.natoggle{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:5px;white-space:nowrap}
.natoggle input{width:auto;accent-color:var(--accent)}
input[type=checkbox]{accent-color:var(--accent)}

.progressbar{height:5px;border-radius:2px;background:var(--bg2);overflow:hidden;margin:8px 0 2px}
.progressbar>div{height:100%;background:var(--accent);transition:width .3s}

/* modal */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:40;
  display:flex;align-items:flex-end;justify-content:center}
.modal{background:var(--bg2);border-top:2px solid var(--accent);
  border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:640px;
  max-height:88vh;overflow-y:auto;padding:18px 16px calc(env(safe-area-inset-bottom) + 18px)}
.modal h2{margin:0 0 10px;font-size:16px}
.checkitem{display:flex;align-items:center;gap:10px;padding:10px 4px;border-bottom:1px solid var(--line);font-size:14.5px}
.checkitem input{width:20px;height:20px;flex:none}
.checkitem .sub{color:var(--muted);font-size:12px}
.grouphead{display:flex;align-items:center;justify-content:space-between;margin-top:12px;
  color:var(--accent);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:1px}

.emailrow{display:flex;gap:8px;align-items:center;margin-top:8px}
.emailrow input{flex:1}
.emailrow .rm{background:none;border:none;color:var(--danger);font-size:18px;padding:4px}

#toast{position:fixed;left:50%;transform:translateX(-50%);bottom:90px;z-index:60;
  background:#000;color:var(--text);border:1px solid var(--accent);
  padding:11px 18px;border-radius:var(--radius);font-size:14px;max-width:88vw;text-align:center;
  box-shadow:0 0 18px rgba(57,255,20,.25)}
.spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.2);
  border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-3px;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
pre.code{background:#000;border:1px solid var(--line2);border-radius:var(--radius);padding:10px;
  font-size:11px;overflow-x:auto;color:#b8f5ac;white-space:pre;user-select:all}
.step{display:flex;gap:10px;margin:10px 0}
.step .n{flex:none;width:22px;height:22px;border-radius:3px;background:var(--accent);
  color:#000;font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center}
.step p{margin:0;font-size:13.5px}

/* visor de fotos */
.photoview{position:fixed;inset:0;background:#000;z-index:70;display:flex;
  align-items:center;justify-content:center}
.photoview img{max-width:100vw;max-height:100vh;object-fit:contain}
.photoview .pvclose{position:absolute;top:calc(env(safe-area-inset-top) + 12px);right:14px;
  background:rgba(20,20,20,.85);color:var(--accent);border:1px solid var(--accent);
  border-radius:var(--radius);font-size:16px;font-weight:800;padding:8px 14px}

.dayheader{color:var(--accent);font-size:12px;font-weight:800;text-transform:uppercase;
  letter-spacing:1.2px;margin:16px 2px 8px;padding-bottom:5px;border-bottom:1px solid var(--line)}
.joblist .dayheader:first-child{margin-top:2px}

.btn.outline{background:transparent;border:1px solid var(--accent);color:var(--accent)}
.btn.stgreen{background:var(--accent);border-color:var(--accent);color:#000}
.btn.styellow{background:var(--warn);border-color:var(--warn);color:#000}
.btn.stred{background:var(--danger);border-color:var(--danger);color:#000}
.btn.dim{opacity:.32}
.badge.completed{background:rgba(57,255,20,.15);color:var(--accent);border:1px solid var(--accent)}
.badge.resched{background:rgba(255,209,102,.14);color:var(--warn);border:1px solid var(--warn)}
.badge.notdone{background:rgba(255,77,77,.14);color:var(--danger);border:1px solid var(--danger)}
.badge.open{background:transparent;color:var(--muted);border:1px solid var(--line2)}

.statusbanner{border-radius:var(--radius);padding:14px;text-align:center;font-weight:800;
  letter-spacing:1px;font-size:14px;margin-bottom:12px}
.sb-yellow{background:rgba(255,209,102,.14);color:var(--warn);border:1px solid var(--warn)}
.sb-red{background:rgba(255,77,77,.14);color:var(--danger);border:1px solid var(--danger)}
.setrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 16px;margin-bottom:9px;color:var(--text);font-family:var(--font)}
.setrow:active{background:var(--card2)}
.setrow .sr-title{font-weight:700;font-size:14.5px}
.setrow .sr-sub{color:var(--muted);font-size:12px;margin-top:2px}
.setrow .chev{margin-left:auto;color:var(--accent);font-size:22px;font-weight:400}
.slidein{animation:slideIn .22s ease-out}
@keyframes slideIn{from{transform:translateX(38px);opacity:0}to{transform:none;opacity:1}}

.dayhead2{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:16px 2px 8px}
.dayhead2 .day-label{font-size:11px;font-weight:700;letter-spacing:1.2px;color:var(--muted);text-transform:uppercase}
.dayhead2.today .day-label{color:var(--text)}
.today-chip{font-size:9px;font-weight:800;letter-spacing:1.4px;color:var(--accent);
  border:1px solid rgba(57,255,20,.45);border-radius:3px;padding:2px 6px}
.day-count{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:1px;color:var(--muted)}
.day-right{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:1px;white-space:nowrap}
.day-money{font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:600;color:var(--accent);
  font-variant-numeric:tabular-nums;letter-spacing:.2px}
.day-money.neg{color:var(--danger)}
.opscard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.oprow{display:flex;align-items:center;gap:12px;width:100%;min-height:58px;padding:11px 14px 11px 0;
  background:none;border:none;color:var(--text);text-align:left;font-family:var(--font);cursor:pointer}
.oprow + .oprow{border-top:1px solid var(--line)}
.oprow:active{background:#1b1b1b}
.edge{width:3px;align-self:stretch;flex:none}
.e-completed{background:var(--accent)}
.e-reschedule{background:var(--warn)}
.e-notdone{background:var(--danger)}
.e-open{background:var(--muted);opacity:.55}
.jobno{flex:none;width:52px;font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.opmain{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.opname{font-size:13px;font-weight:600;letter-spacing:.3px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.opsub{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.opstat{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.stat-label{font-size:10px;font-weight:800;letter-spacing:1px}
.c-completed{color:var(--accent)}
.c-reschedule{color:var(--warn)}
.c-notdone{color:var(--danger)}
.c-open{color:var(--muted)}
.stat-sub{font-size:9px;font-weight:600;letter-spacing:1.6px;color:var(--muted)}
.fab{font-size:13px;letter-spacing:1px}

.opname{display:flex;align-items:baseline;gap:7px;min-width:0}
.opname .nm{font-size:11.5px;font-weight:700;letter-spacing:.2px;text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;min-width:0}
.optype{flex:none;font-family:'IBM Plex Mono',monospace;font-size:8.5px;letter-spacing:.3px;
  color:rgba(57,255,20,.8);max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#btnSettings{color:var(--muted)}
#btnSettings:active{color:var(--accent)}
#title svg text{font-family:'IBM Plex Sans',Arial,sans-serif}
.stat-drop{font-family:'IBM Plex Mono',monospace;font-size:8.5px;letter-spacing:.4px;
  color:var(--accent);border:1px solid #1f4d17;padding:1px 5px;border-radius:3px;white-space:nowrap}
.docs-ok{color:var(--accent)}
/* Calendar */
.calhead{display:flex;align-items:center;justify-content:space-between;margin:4px 0 10px}
.calmonth{font-weight:700;font-size:16px;letter-spacing:.3px}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.caldow{text-align:center;font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--muted);letter-spacing:.5px;padding:2px 0}
.calcell{position:relative;aspect-ratio:1/1.15;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:5px 1px 2px;color:var(--text);font-family:var(--font)}
.calcell.empty{background:none;border:none}
.calcell.today{border-color:var(--accent)}
.calcell.hasdata{background:var(--card2)}
.calcell:active{background:#222}
.calcell .cd{font-size:11px;color:var(--muted)}
.calcell.today .cd{color:var(--accent);font-weight:700}
.calcell .camt{font-family:'IBM Plex Mono',monospace;font-size:9.5px;color:var(--accent);margin-top:2px}
.calcell .camt.neg{color:var(--danger)}
.calcell .cjobs{position:absolute;top:2px;right:4px;font-family:'IBM Plex Mono',monospace;font-size:8px;color:var(--muted)}
.sumgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}
.sumbox{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;display:flex;flex-direction:column;gap:2px}
.sumbox span{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-family:'IBM Plex Mono',monospace}
.sumbox b{font-size:16px}
.sumrow{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.dayjob{display:block;width:100%;text-align:left;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:9px 11px;margin:6px 0;color:var(--text);font-family:var(--font)}
.dayjob:active{background:#222}
.dayjob .dj1{display:block;font-size:13.5px}
.dayjob .dj2{display:block;font-size:12px;color:var(--muted);margin-top:2px}

/* ---- In-app camera (viewfinder never leaves the app) ---- */
.camov{position:fixed;inset:0;z-index:120;background:#000;display:flex;flex-direction:column}
.camov video{flex:1;width:100%;height:100%;object-fit:cover;background:#000}
.camflash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none;transition:opacity .12s}
.camflash.on{opacity:.85;transition:none}
.cambar{position:absolute;left:0;right:0;bottom:0;height:132px;display:flex;align-items:center;
  justify-content:space-between;padding:0 22px;background:linear-gradient(to top,rgba(0,0,0,.85),rgba(0,0,0,0))}
.camshot{width:74px;height:74px;border-radius:50%;background:var(--accent);border:5px solid rgba(255,255,255,.9);
  box-shadow:0 0 0 3px rgba(0,0,0,.5);cursor:pointer}
.camshot:active{transform:scale(.93)}
.cambtn{background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.35);color:#fff;font-family:var(--font);
  font-size:12px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;padding:11px 16px;border-radius:4px;cursor:pointer}
.camcount{position:absolute;top:calc(env(safe-area-inset-top,0px) + 14px);left:0;right:0;text-align:center;
  font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:1.4px;color:var(--accent);
  text-shadow:0 1px 6px #000;opacity:0;transition:opacity .2s}
.camcount.on{opacity:1}

/* ---- Activation gate: help / request access ---- */
.gate-help{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.gate-help .btn{width:100%}

/* ---- Black box alerts ---- */
.bbalert{position:fixed;left:0;right:0;top:0;z-index:200;background:var(--danger);color:#fff;font-weight:700;font-size:13px;
  padding:12px 16px;text-align:center;cursor:pointer;box-shadow:0 2px 12px rgba(0,0,0,.5)}
.warncard{border-color:var(--danger);color:var(--text);font-size:13px;line-height:1.5}
.warncard .btn{margin-top:8px}
.bbrestoring{position:fixed;inset:0;z-index:150;background:rgba(10,10,10,.96);display:flex;align-items:center;justify-content:center;
  text-align:center;padding:30px;font-size:15px;line-height:1.7;color:var(--text)}
.bbrestoring small{color:var(--muted)}

/* ---- Messages from the team ---- */
#btnMsgs{position:relative}
.msgdot{position:absolute;top:2px;right:0;min-width:15px;height:15px;padding:0 3px;border-radius:8px;
  background:var(--danger);color:#fff;font-size:9.5px;font-weight:800;line-height:15px;text-align:center;
  font-family:'IBM Plex Mono',monospace}
.msglevel{display:inline-block;font-size:9.5px;font-weight:800;letter-spacing:1.3px;padding:3px 7px;border-radius:3px}
.lv-info{background:rgba(57,255,20,.14);color:var(--accent);border:1px solid rgba(57,255,20,.35)}
.lv-update{background:rgba(127,179,255,.14);color:#7fb3ff;border:1px solid rgba(127,179,255,.35)}
.lv-warn{background:rgba(255,77,77,.14);color:var(--danger);border:1px solid rgba(255,77,77,.4)}
.msgcard.unread{border-color:rgba(57,255,20,.4)}
.msghead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.msgcard h3{margin:0}
