:root{
  --brand:#1d4ed8;
  --bg:#f4f5f7; --card:#fff; --text:#1c2230; --muted:#6b7385; --line:#e4e7ec;
  --ok:#15803d; --ok-bg:#e8f6ed; --err:#b42318; --err-bg:#fdecea; --warn:#a15c07; --warn-bg:#fff4e0;
  --radius:12px; --shadow:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08);
}
*{box-sizing:border-box}
html,body{margin:0}
body{font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,Ubuntu,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;display:flex;flex-direction:column}
a{color:var(--brand)}
h1{font-size:1.5rem;margin:0}
h2{font-size:1.1rem;margin:0 0 .8rem}
h3{font-size:1rem;margin:.4rem 0 .6rem}
hr{border:0;border-top:1px solid var(--line);margin:1.2rem 0}
img{max-width:100%}
.muted{color:var(--muted)} .small{font-size:.85rem} .mt{margin-top:1rem}
.center{text-align:center} .r{text-align:right} .nowrap{white-space:nowrap}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;letter-spacing:.12em}
.big{font-size:1.15rem;font-weight:600}
.pos{color:var(--ok)} .neg{color:var(--err)}

/* Barra superior */
.topbar{background:var(--brand);color:#fff;display:flex;align-items:center;gap:1rem;padding:.6rem 1.2rem;position:sticky;top:0;z-index:20;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:.6rem;color:#fff;text-decoration:none;margin-right:auto}
.brand img{height:38px;width:auto;border-radius:6px;background:#fff;padding:2px}
.brand span{display:flex;flex-direction:column;line-height:1.15}
.brand small{opacity:.8;font-size:.75rem}
.nav{display:flex;align-items:center;gap:.2rem;flex-wrap:wrap}
.nav a,.nav .link{color:#fff;text-decoration:none;padding:.4rem .7rem;border-radius:8px;opacity:.9;font-size:.92rem}
.nav a:hover,.nav a.active{background:rgba(255,255,255,.18);opacity:1}
.menu-toggle{display:none;background:none;border:0;color:#fff;font-size:1.5rem;cursor:pointer}
.pill{background:#ef4444;color:#fff;border-radius:99px;padding:0 .45rem;font-size:.75rem;font-weight:700}

.container{width:100%;max-width:1200px;margin:0 auto;padding:1.2rem;flex:1}
.foot{text-align:center;color:var(--muted);font-size:.8rem;padding:1rem}

.page-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}
.actions{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}

.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.2rem;margin-bottom:1rem}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:1rem;align-items:start}
.grid-2>.card{margin-bottom:0}
.grid-2.wide-left{grid-template-columns:1.6fr 1fr}
.grid-2+.card,.grid-2+section{margin-top:1rem}

/* Botones */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem 1rem;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--text);font:inherit;font-weight:600;text-decoration:none;cursor:pointer;white-space:nowrap}
.btn:hover{background:#f8f9fb}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn-primary:hover{background:var(--brand);filter:brightness(1.08)}
.btn-danger{background:var(--err);border-color:var(--err);color:#fff}
.btn-danger:hover{background:var(--err);filter:brightness(1.08)}
.btn.block{width:100%}
.btn:disabled{opacity:.6;cursor:wait}
.link{background:none;border:0;color:var(--brand);cursor:pointer;font:inherit;padding:0}
.link.danger{color:var(--err)}
form.inline{display:inline}

/* Formularios */
label{display:flex;flex-direction:column;gap:.3rem;font-size:.88rem;font-weight:600;color:#394150}
label small{font-weight:400}
input,select,textarea{font:inherit;padding:.6rem .7rem;border:1px solid #cfd4dc;border-radius:9px;background:#fff;color:var(--text);width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid color-mix(in srgb,var(--brand) 35%,transparent);border-color:var(--brand)}
input[type=color]{padding:.2rem;height:42px}
input[type=file]{padding:.45rem}
label.check{flex-direction:row;align-items:center;font-weight:400}
label.check input{width:auto}
.stack{display:flex;flex-direction:column;gap:.85rem}
.row-2{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.2rem}
.form-grid fieldset{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:.85rem}
.form-grid legend{font-weight:700;margin-bottom:.6rem;color:var(--brand)}
.form-actions{grid-column:1/-1;display:flex;justify-content:flex-end}
.filters{display:flex;flex-wrap:wrap;gap:.8rem;align-items:flex-end}
.filters label{flex:1 1 150px}
.form-inline{display:flex;flex-wrap:wrap;gap:.8rem;align-items:flex-end;margin-top:.8rem}
.form-inline label{flex:1 1 160px}
.row-form{display:flex;gap:.6rem;align-items:flex-end;flex-wrap:wrap}
.row-form label{flex:1 1 120px}
details summary{cursor:pointer;color:var(--brand);font-weight:600}

.file-btn{border:2px dashed #cfd4dc;border-radius:12px;padding:1rem;text-align:center;cursor:pointer;font-size:1rem;color:var(--brand)}
.file-btn input{margin-top:.5rem}
.ocr-preview{max-height:200px;object-fit:contain;border-radius:10px;border:1px solid var(--line);background:#000}
.ocr-status.ok{color:var(--ok);font-weight:600}
.ocr-status.err{color:var(--warn);font-weight:600}

/* Alertas */
.alert{padding:.75rem 1rem;border-radius:10px;margin-bottom:1rem;font-weight:500}
.alert-ok{background:var(--ok-bg);color:var(--ok)}
.alert-error{background:var(--err-bg);color:var(--err)}
.alert-warn{background:var(--warn-bg);color:var(--warn)}

/* Badges */
.badge{display:inline-block;padding:.12rem .55rem;border-radius:99px;font-size:.75rem;font-weight:700;vertical-align:middle}
.b-programado{background:#e8efff;color:#2448b8}
.b-en_curso{background:#fff4e0;color:#a15c07}
.b-finalizado{background:var(--ok-bg);color:var(--ok)}
.b-cancelado{background:#eceef2;color:#6b7385;text-decoration:line-through}
.b-ok{background:var(--ok-bg);color:var(--ok)}

/* Tablas */
.table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse;font-size:.92rem}
.table th{text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--line);padding:.55rem .6rem}
.table td{border-bottom:1px solid var(--line);padding:.6rem;vertical-align:top}
.table th.r,.table td.r{text-align:right}
.table tr.inactive{opacity:.5}
.mini{width:42px;height:42px;object-fit:cover;border-radius:8px}
.round{border-radius:50%}
.thumb{max-width:180px;max-height:140px;border-radius:10px;border:1px solid var(--line);display:block;margin-top:.4rem;object-fit:cover}
.logo-prev{max-height:60px}

/* Estadísticas */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1rem;margin-bottom:1rem}
.stat{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem 1.2rem;border-top:3px solid var(--brand)}
.stat small{display:block;color:var(--muted);font-size:.8rem}
.stat b{font-size:1.35rem}
.bar-col{width:22%}
.bar{position:relative;height:10px;background:#eef0f4;border-radius:99px;overflow:hidden}
.bar span{position:absolute;inset:0 auto 0 0;background:var(--brand);border-radius:99px}
.bar i{position:absolute;inset:0 auto 0 0;background:#f59e0b;border-radius:99px}
.legend{display:inline-block;width:10px;height:10px;border-radius:3px;margin:0 .2rem 0 .6rem}
.l-ing{background:var(--brand)} .l-gas{background:#f59e0b}

/* Detalle */
.dl{display:grid;grid-template-columns:150px 1fr;gap:.35rem .8rem;margin:0 0 1rem}
.dl dt{color:var(--muted);font-size:.88rem}
.dl dd{margin:0}
.km-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}
.money-sum{font-size:.95rem}

.driver-card{display:flex;gap:1rem;align-items:center;background:#f8f9fb;border-radius:12px;padding:1rem;flex-wrap:wrap}
.avatar{width:84px;height:84px;border-radius:50%;overflow:hidden;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:2rem;font-weight:700;flex:0 0 auto}
.avatar img{width:100%;height:100%;object-fit:cover}
.veh-photo{width:140px;height:96px;object-fit:cover;border-radius:10px;margin-left:auto}

/* Pase de abordaje (horizontal, tipo boleto) */
.pass{display:flex;width:100%;max-width:600px;margin:.4rem auto 1rem;background:#fff;border:1px solid var(--line);border-left:10px solid var(--brand);border-radius:18px;box-shadow:0 6px 20px rgba(17,24,39,.08);text-align:center;position:relative}
.pass-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 18px;min-width:0}
.pass-stub{flex:0 0 210px;display:flex;align-items:center;justify-content:center;padding:18px;border-left:2px dashed var(--line);position:relative}
.pass-stub::before,.pass-stub::after{content:"";position:absolute;left:-11px;width:20px;height:20px;border-radius:50%;background:var(--card);border:1px solid var(--line)}
.pass-stub::before{top:-11px;clip-path:inset(50% 0 0 0)}
.pass-stub::after{bottom:-11px;clip-path:inset(0 0 50% 0)}
.pass-logo{display:block;max-width:170px;max-height:58px;margin:0 auto 10px;object-fit:contain}
.pass-company{font-size:1.2rem;font-weight:700;color:#111827;overflow-wrap:anywhere}
.pass-welcome{display:inline-block;margin:14px 0 16px;padding:6px 18px;border-radius:999px;background:var(--brand);color:#fff;font-size:.78rem;font-weight:700;letter-spacing:3px;text-transform:uppercase}
.pass-qr{display:block;width:170px;height:170px;image-rendering:pixelated}
.pass-label{font-size:.68rem;color:var(--muted);letter-spacing:2px;text-transform:uppercase}
.pass-code{font-family:"Courier New",Courier,monospace;font-size:1.45rem;font-weight:700;letter-spacing:1px;color:#111827;margin-top:2px;white-space:nowrap}
@media (max-width:520px){
  .pass{flex-direction:column;border-left:1px solid var(--line);border-top:10px solid var(--brand)}
  .pass-stub{flex-basis:auto;border-left:0;border-top:2px dashed var(--line)}
  .pass-stub::before,.pass-stub::after{display:none}
}
.qr{display:inline-block;padding:14px;background:#fff;border:1px solid var(--line);border-radius:14px;margin:.6rem auto}
.qr img,.qr canvas{display:block;width:240px!important;height:240px!important}
.scanner{width:100%;max-width:420px;border-radius:12px;overflow:hidden;margin-bottom:.6rem}
.scan-result .alert{margin:0}

/* Listas de viajes (conductor / cliente) */
.trip-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}
.trip-card{display:flex;flex-direction:column;gap:.3rem;text-decoration:none;color:inherit;margin:0;border-left:4px solid var(--brand)}
.trip-card:hover{box-shadow:0 4px 14px rgba(16,24,40,.12)}

.tabs{display:flex;gap:.3rem;flex-wrap:wrap;background:#e9ecf1;padding:.25rem;border-radius:10px}
.tabs a{padding:.35rem .8rem;border-radius:8px;text-decoration:none;color:var(--text);font-size:.88rem;font-weight:600}
.tabs a.active{background:#fff;box-shadow:var(--shadow)}

.day-head{margin:1.2rem 0 .5rem;color:var(--muted);text-transform:capitalize}
.pending-row{display:flex;gap:1rem;align-items:center;margin-bottom:.6rem;padding:.9rem 1.1rem}
.pending-row .time{font-weight:700;min-width:90px;display:flex;flex-direction:column}
.pending-row .time small{font-weight:400;color:var(--muted)}
.pending-row .grow{flex:1}

.alerts-list{list-style:none;margin:0 0 .8rem;padding:0}
.alerts-list li{padding:.7rem .2rem;border-bottom:1px solid var(--line)}
.alerts-list li.unread{border-left:3px solid var(--brand);padding-left:.7rem;background:#f8faff}

/* Chat */
.chat{display:flex;flex-direction:column;gap:.6rem}
.chat-log{height:320px;overflow-y:auto;background:#f6f7f9;border-radius:12px;padding:.8rem;display:flex;flex-direction:column;gap:.5rem}
.msg{max-width:78%;padding:.5rem .75rem;border-radius:14px;background:#fff;box-shadow:var(--shadow);align-self:flex-start;white-space:pre-wrap;word-wrap:break-word}
.msg.mine{align-self:flex-end;background:var(--brand);color:#fff}
.msg small{display:block;font-size:.7rem;opacity:.7;margin-top:.15rem}
.chat-form{display:flex;gap:.5rem}
.chat-empty{color:var(--muted);text-align:center;margin:auto}

/* Login */
.auth-wrap{min-height:80vh;display:flex;align-items:center;justify-content:center}
.auth{width:100%;max-width:400px;display:flex;flex-direction:column;gap:1rem}
.auth-brand{text-align:center}
.auth-brand img{max-height:80px;margin-bottom:.4rem}
.auth-brand h1{font-size:1.35rem}

dialog{border:0;border-radius:14px;padding:1.4rem;max-width:440px;width:92%;box-shadow:0 20px 50px rgba(0,0,0,.25)}
dialog::backdrop{background:rgba(15,23,42,.45)}
dialog form{display:flex;flex-direction:column;gap:1rem}

.toast{position:fixed;right:1rem;bottom:1rem;background:#111827;color:#fff;padding:.8rem 1rem;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:50;max-width:320px;cursor:pointer}

@media (max-width:900px){
  .grid-2,.grid-2.wide-left,.form-grid{grid-template-columns:1fr}
  .menu-toggle{display:block}
  .nav{display:none;width:100%;flex-direction:column;align-items:stretch}
  .nav.open{display:flex}
  .nav form.inline{padding:.4rem .7rem}
  .km-grid{grid-template-columns:1fr 1fr}
  .dl{grid-template-columns:120px 1fr}
  .veh-photo{margin-left:0;width:100%;height:160px}
}
@media (max-width:520px){
  .container{padding:.8rem}
  .row-2{grid-template-columns:1fr}
  .pending-row{flex-wrap:wrap}
  .bar-col{display:none}
}
