/* RastreiaDM — tema */
:root{
  --brand:#0f766e; --brand-600:#0d9488; --brand-50:#ecfdf8; --brand-100:#ccfbef;
  --ink:#0f172a; --muted:#64748b; --line:#e5e7eb; --bg:#f3f6f8; --card:#fff;
  --sidebar-w:264px; --radius:14px;
  --bs-primary:#0f766e; --bs-primary-rgb:15,118,110; --bs-link-color:#0f766e; --bs-link-hover-color:#115e59;
  --bs-body-font-family: "Inter","Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;
  --bs-body-color:#1f2937; --bs-border-radius:.6rem; --bs-border-radius-lg:.9rem;
}
body{background:var(--bg);-webkit-font-smoothing:antialiased;font-size:.95rem}
.btn-primary{--bs-btn-bg:var(--brand);--bs-btn-border-color:var(--brand);--bs-btn-hover-bg:#115e59;--bs-btn-hover-border-color:#115e59;--bs-btn-active-bg:#134e4a;--bs-btn-disabled-bg:var(--brand);--bs-btn-disabled-border-color:var(--brand)}
.btn-outline-primary{--bs-btn-color:var(--brand);--bs-btn-border-color:var(--brand);--bs-btn-hover-bg:var(--brand);--bs-btn-hover-border-color:var(--brand);--bs-btn-active-bg:var(--brand)}
.text-primary{color:var(--brand)!important}.bg-primary{background:var(--brand)!important}
.form-control:focus,.form-select:focus{border-color:var(--brand-600);box-shadow:0 0 0 .2rem rgba(13,148,136,.18)}
.form-check-input:checked{background-color:var(--brand);border-color:var(--brand)}
.nav-pills .nav-link.active{background:var(--brand)}
.page-link{color:var(--brand)}.active>.page-link{background:var(--brand);border-color:var(--brand)}

/* layout */
.app-sidebar{width:var(--sidebar-w);background:#fff;border-right:1px solid var(--line)}
@media (min-width:1200px){.app-sidebar{position:fixed;inset:0 auto 0 0;z-index:1030;overflow-y:auto}.app-main{margin-left:var(--sidebar-w)}}
.brand{display:flex;align-items:center;gap:.65rem;padding:1.1rem 1.25rem;font-weight:700;color:var(--ink);text-decoration:none}
.brand-logo{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--brand),#14b8a6);display:grid;place-items:center;color:#fff;font-size:1.2rem;box-shadow:0 6px 16px rgba(15,118,110,.25)}
.brand small{display:block;font-weight:500;color:var(--muted);font-size:.72rem;letter-spacing:.02em}
.side-nav{padding:.25rem .75rem 1.5rem}
.side-nav .sec{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;font-weight:700;padding:1rem .75rem .35rem}
.side-nav a{display:flex;align-items:center;gap:.7rem;padding:.55rem .75rem;border-radius:10px;color:#334155;text-decoration:none;font-weight:500;margin-bottom:2px}
.side-nav a i{font-size:1.05rem;color:#94a3b8;width:1.2rem;text-align:center}
.side-nav a:hover{background:#f1f5f9}
.side-nav a.active{background:var(--brand-50);color:var(--brand)}.side-nav a.active i{color:var(--brand)}
.topbar{position:sticky;top:0;z-index:1020;background:rgba(243,246,248,.85);backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid transparent}
.topbar .inner{display:flex;align-items:center;gap:.75rem;padding:.75rem 1.25rem}
.topbar h1{font-size:1.15rem;font-weight:700;margin:0;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scan-input{max-width:300px}
.scan-input .form-control{border-radius:999px;padding-left:2.4rem;background:#fff}
.scan-input .bi{position:absolute;left:.95rem;top:50%;transform:translateY(-50%);color:var(--muted)}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--brand-100);color:var(--brand);display:grid;place-items:center;font-weight:700;font-size:.85rem;flex:none}
.avatar.lg{width:72px;height:72px;font-size:1.6rem}
.content{padding:1rem 1.25rem 6rem}
@media (min-width:1200px){.content{padding:1.25rem 2rem 3rem}}

/* cards */
.card{border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px rgba(15,23,42,.04)}
.card-header{background:transparent;border-bottom:1px solid var(--line);font-weight:600;padding:.85rem 1.1rem}
.kpi{padding:1rem 1.1rem;display:flex;gap:.9rem;align-items:center}
.kpi .ico{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;font-size:1.3rem;flex:none}
.kpi .v{font-size:1.55rem;font-weight:700;line-height:1.1;color:var(--ink)}
.kpi .l{color:var(--muted);font-size:.8rem}
.ico-teal{background:#ccfbf1;color:#0f766e}.ico-blue{background:#dbeafe;color:#1d4ed8}.ico-amber{background:#fef3c7;color:#b45309}.ico-rose{background:#ffe4e6;color:#be123c}.ico-violet{background:#ede9fe;color:#6d28d9}
.table{--bs-table-bg:transparent;margin:0}
.table>:not(caption)>*>*{padding:.65rem .8rem;vertical-align:middle}
.table thead th{font-size:.74rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600;border-bottom-color:var(--line);white-space:nowrap}
.table-hover tbody tr:hover{--bs-table-hover-bg:#f8fafc}

/* estados */
.state-badge{--c:#64748b;display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .6rem;border-radius:999px;font-size:.78rem;font-weight:600;color:var(--c);background:color-mix(in srgb,var(--c) 12%,#fff);border:1px solid color-mix(in srgb,var(--c) 25%,#fff);white-space:nowrap}
.dot{width:.6rem;height:.6rem;border-radius:50%;display:inline-block;background:var(--c,#64748b)}

/* quadro (kanban) da central */
.board{display:flex;gap:1rem;overflow-x:auto;padding-bottom:1rem;scroll-snap-type:x mandatory}
.board-col{flex:0 0 280px;scroll-snap-align:start;background:#eef2f5;border-radius:var(--radius);display:flex;flex-direction:column;max-height:calc(100vh - 230px)}
@media (max-width:576px){.board-col{flex-basis:86vw}}
.board-col h6{padding:.8rem 1rem .5rem;margin:0;display:flex;align-items:center;gap:.5rem;font-weight:700}
.board-col .list{overflow-y:auto;padding:.25rem .6rem .75rem}
.box-card{display:block;background:#fff;border:1px solid var(--line);border-left:4px solid var(--c,#64748b);border-radius:10px;padding:.6rem .7rem;margin-bottom:.5rem;text-decoration:none;color:inherit;transition:transform .08s,box-shadow .08s}
.box-card:hover{box-shadow:0 4px 14px rgba(15,23,42,.08);transform:translateY(-1px)}
.box-card .code{font-family:ui-monospace,Consolas,monospace;font-weight:700;font-size:.82rem}
.box-card .meta{font-size:.75rem;color:var(--muted)}
.box-card.sel{outline:2px solid var(--brand);background:var(--brand-50)}
.age-warn{color:#b45309}.age-crit{color:#be123c}

/* timeline */
.timeline{position:relative;padding-left:1.6rem}
.timeline:before{content:"";position:absolute;left:.55rem;top:.3rem;bottom:.3rem;width:2px;background:var(--line)}
.tl-item{position:relative;padding-bottom:1rem}
.tl-item:before{content:"";position:absolute;left:-1.35rem;top:.3rem;width:.9rem;height:.9rem;border-radius:50%;background:#fff;border:3px solid var(--c,#94a3b8)}
.tl-item .when{font-size:.75rem;color:var(--muted)}

/* ação de transição (botões grandes para tablet) */
.action-btn{display:flex;align-items:center;gap:.75rem;width:100%;text-align:left;padding:.85rem 1rem;border-radius:12px;border:1px solid var(--line);background:#fff;font-weight:600;color:var(--ink)}
.action-btn:hover{border-color:var(--c,var(--brand));background:color-mix(in srgb,var(--c,#0f766e) 6%,#fff)}
.action-btn .i{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;color:#fff;background:var(--c,#0f766e);font-size:1.15rem;flex:none}
.action-btn.nc{border-style:dashed}

/* auth */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1fr;background:radial-gradient(1200px 600px at 10% -10%,#ccfbf1 0,transparent 60%),radial-gradient(800px 500px at 110% 110%,#dbeafe 0,transparent 55%),var(--bg)}
.auth-card{max-width:440px;width:100%;margin:auto;padding:1rem}
.auth-card .card{border:none;box-shadow:0 20px 50px rgba(15,23,42,.12);border-radius:20px}
.user-tile{display:flex;align-items:center;gap:.75rem;width:100%;padding:.7rem .85rem;border:1px solid var(--line);border-radius:12px;background:#fff;text-align:left}
.user-tile:hover{border-color:var(--brand);background:var(--brand-50)}
.pinpad{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem;max-width:280px;margin:0 auto}
.pinpad button{height:62px;border-radius:16px;border:1px solid var(--line);background:#fff;font-size:1.45rem;font-weight:600;color:var(--ink)}
.pinpad button:active{background:var(--brand-50);border-color:var(--brand)}
.pin-dots{display:flex;justify-content:center;gap:.7rem;margin:1rem 0 1.25rem}
.pin-dots span{width:14px;height:14px;border-radius:50%;border:2px solid #94a3b8}
.pin-dots span.on{background:var(--brand);border-color:var(--brand)}
.divider{display:flex;align-items:center;gap:.75rem;color:var(--muted);font-size:.8rem;margin:1rem 0}
.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--line)}

/* navegação inferior (telemóvel) */
.bottom-nav{position:fixed;bottom:0;left:0;right:0;z-index:1030;background:#fff;border-top:1px solid var(--line);display:flex;padding-bottom:env(safe-area-inset-bottom)}
.bottom-nav a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:.5rem 0 .45rem;font-size:.68rem;color:var(--muted);text-decoration:none;font-weight:600}
.bottom-nav a i{font-size:1.25rem}
.bottom-nav a.active{color:var(--brand)}
.bottom-nav .scan{margin-top:-18px}
.bottom-nav .scan i{background:var(--brand);color:#fff;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-size:1.4rem;box-shadow:0 6px 18px rgba(15,118,110,.35)}

/* matriz de permissões */
.matrix th.rot{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;font-size:.72rem;padding:.5rem .3rem!important;text-transform:none;letter-spacing:0}
.matrix td,.matrix th{text-align:center}.matrix td:first-child,.matrix th:first-child{text-align:left}
.sticky-actions{position:sticky;bottom:0;background:linear-gradient(transparent,var(--bg) 35%);padding:1rem 0 .25rem;z-index:5}
@media (max-width:1199px){.sticky-actions{bottom:58px}}

.empty{padding:2.5rem 1rem;text-align:center;color:var(--muted)}
.empty i{font-size:2.2rem;display:block;margin-bottom:.5rem;color:#cbd5e1}
.mono{font-family:ui-monospace,Consolas,monospace}
.chart-box{position:relative;height:280px}
.scanner-video{width:100%;border-radius:12px;background:#000;aspect-ratio:4/3;object-fit:cover}
.check-row.bad{background:#fff1f2}

/* impressão de etiquetas */
.label-sheet{display:flex;flex-wrap:wrap;gap:8mm}
.label{width:90mm;border:1px dashed #94a3b8;padding:4mm;border-radius:2mm;break-inside:avoid;background:#fff}
.label svg{width:100%;height:auto}
@media print{
  .app-sidebar,.topbar,.bottom-nav,.no-print,.alert{display:none!important}
  .app-main{margin:0!important}.content{padding:0!important}body{background:#fff}
  .label{border:1px solid #000}
}
