/* ==========================================================================
   FEDCO Cocoa Trace — application styles
   ========================================================================== */
@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(../vendor/fonts/inter-latin-400-normal.woff2) format('woff2')}
@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(../vendor/fonts/inter-latin-500-normal.woff2) format('woff2')}
@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(../vendor/fonts/inter-latin-600-normal.woff2) format('woff2')}
@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(../vendor/fonts/inter-latin-700-normal.woff2) format('woff2')}

:root{
  --brand:#4a2c1a; --brand-2:#6b4226; --leaf:#2f6b3c; --gold:#c8902b; --pod:#d9822b;
  --bg:#f5f2ed; --surface:#ffffff; --surface-2:#faf8f5; --line:#e8e1d8; --ink:#2a211b; --muted:#7a6e64;
  --sidebar-w:264px; --radius:12px;
  --bs-body-font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --bs-body-bg: var(--bg); --bs-body-color: var(--ink); --bs-border-color: var(--line);
  --bs-primary: var(--brand); --bs-primary-rgb: 74,44,26; --bs-link-color: #6b4226; --bs-link-hover-color:#4a2c1a;
  --bs-success: #2f6b3c; --bs-success-rgb: 47,107,60;
}
[data-bs-theme=dark]{
  --bg:#14100d; --surface:#1d1814; --surface-2:#231d18; --line:#352c25; --ink:#ece6df; --muted:#a3978c;
  --bs-body-bg: var(--bg); --bs-body-color: var(--ink); --bs-border-color: var(--line);
  --bs-link-color:#e0b27a; --bs-link-hover-color:#f0c895;
}
html,body{height:100%}
body{font-size:.925rem;-webkit-font-smoothing:antialiased;background:var(--bg)}
.tiny{font-size:.72rem}.min-w-0{min-width:0}
.text-cocoa{color:var(--brand)!important}
a{text-decoration:none}

/* ---------- buttons & forms ---------- */
.btn-primary{--bs-btn-bg:var(--brand);--bs-btn-border-color:var(--brand);--bs-btn-hover-bg:var(--brand-2);--bs-btn-hover-border-color:var(--brand-2);--bs-btn-active-bg:#3a2214;--bs-btn-active-border-color:#3a2214;--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)}
[data-bs-theme=dark] .btn-outline-primary{--bs-btn-color:#e0b27a;--bs-btn-border-color:#a77b4f}
.btn-success{--bs-btn-bg:var(--leaf);--bs-btn-border-color:var(--leaf);--bs-btn-hover-bg:#245530;--bs-btn-hover-border-color:#245530}
.btn{border-radius:9px;font-weight:500}
.btn-sm{border-radius:8px}
.btn-icon{width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;color:var(--ink);border:0;background:transparent}
.btn-icon:hover{background:var(--surface-2)}
.form-control,.form-select{border-radius:9px;border-color:var(--line);background-color:var(--surface)}
.form-control:focus,.form-select:focus{border-color:#b08865;box-shadow:0 0 0 .2rem rgba(176,136,101,.2)}
.form-label{font-weight:500;font-size:.85rem;margin-bottom:.3rem;color:var(--muted)}
.pin-input{letter-spacing:.5em;font-weight:600;max-width:200px}
.ts-wrapper.form-select{padding:0}.ts-control{border-radius:9px!important;border-color:var(--line)!important;min-height:38px}
[data-bs-theme=dark] .ts-control,[data-bs-theme=dark] .ts-dropdown{background:var(--surface)!important;color:var(--ink)!important}

/* ---------- shell ---------- */
.app-shell{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:linear-gradient(180deg,#3a2214 0%,#2b190e 100%);color:#e9dccf;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:1040}
@media (max-width:991.98px){.sidebar{position:fixed;height:100%;width:280px}.sidebar.offcanvas-lg{background:linear-gradient(180deg,#3a2214 0%,#2b190e 100%)}}
.sidebar-brand{display:flex;align-items:center;gap:.7rem;padding:1.1rem 1rem;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-mark{width:38px;height:38px;border-radius:10px;background:#fff;padding:4px;object-fit:contain}
.brand-name{font-weight:700;color:#fff;font-size:.95rem;line-height:1.1}
.brand-sub{font-size:.7rem;color:#c9a98a;letter-spacing:.02em}
.sidebar-nav{flex:1;overflow-y:auto;padding:.6rem .55rem;scrollbar-width:thin}
.sidebar .nav-link{color:#e2d3c4;border-radius:9px;padding:.52rem .75rem;display:flex;align-items:center;gap:.65rem;font-weight:500;font-size:.88rem}
.sidebar .nav-link i{font-size:1.05rem;opacity:.85}
.sidebar .nav-link:hover{background:rgba(255,255,255,.06);color:#fff}
.sidebar .nav-link.active{background:linear-gradient(90deg,rgba(200,144,43,.28),rgba(200,144,43,.08));color:#fff;box-shadow:inset 3px 0 0 var(--gold)}
.sidebar .nav-parent .caret{margin-left:auto;font-size:.75rem;transition:transform .2s}
.sidebar .nav-parent.collapsed .caret{transform:rotate(-90deg)}
.sidebar .sub-nav{padding:.15rem 0 .35rem 2.15rem}
.sidebar .sub-nav .nav-link{padding:.38rem .7rem;font-size:.84rem;color:#cdb9a6}
.sidebar .sub-nav .nav-link.active{box-shadow:none;background:rgba(255,255,255,.08);color:#ffd99a}
.sidebar-foot{padding:.7rem 1rem;color:#a58c75;border-top:1px solid rgba(255,255,255,.07)}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:1020;display:flex;align-items:center;gap:.5rem;padding:.55rem 1rem;background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.btn-season{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;font-size:.85rem}
.topbar-search{position:relative;align-items:center;max-width:340px;flex:1}
.topbar-search i{position:absolute;left:.75rem;color:var(--muted)}
.topbar-search .form-control{padding-left:2.2rem;background:var(--surface-2);font-size:.85rem}
.btn-user{display:flex;align-items:center;gap:.5rem;border:0;background:transparent;padding:.2rem .4rem;border-radius:10px}
.btn-user:hover{background:var(--surface-2)}
.avatar{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,var(--gold),var(--pod));color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:.8rem}
.notif-dot{position:absolute;top:3px;right:2px;background:#d63c2f;color:#fff;font-size:.6rem;border-radius:10px;padding:1px 5px;font-weight:700}
.notif-menu{width:340px;max-height:420px;overflow:auto}
.notif-item{white-space:normal;border-bottom:1px solid var(--line);padding:.55rem 1rem}
.notif-item.unread{background:rgba(200,144,43,.08)}
.content{padding:1.25rem 1.25rem 2rem;flex:1}
@media (max-width:575.98px){.content{padding:1rem .75rem 5rem}}
.app-footer{padding:.8rem 1.25rem;border-top:1px solid var(--line)}

/* ---------- cards & stats ---------- */
.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.card.shadow-sm{box-shadow:0 1px 2px rgba(60,40,20,.04),0 4px 14px rgba(60,40,20,.04)!important}
.card-header{background:transparent;border-bottom:1px solid var(--line);padding:.8rem 1rem}
.card-header h2{font-weight:600}
.page-head h1{font-weight:700;letter-spacing:-.01em}
.stat-card{display:flex;gap:.9rem;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1rem;height:100%;transition:transform .15s,box-shadow .15s}
a .stat-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(60,40,20,.08)}
.stat-icon{width:46px;height:46px;flex:0 0 46px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.35rem}
.stat-label{font-size:.78rem;color:var(--muted);font-weight:500;text-transform:uppercase;letter-spacing:.03em}
.stat-value{font-size:clamp(1.1rem,1.5vw,1.45rem);font-weight:700;line-height:1.2;color:var(--ink);overflow-wrap:anywhere}
.stat-foot{font-size:.76rem;color:var(--muted)}
.tone-cocoa .stat-icon{background:rgba(74,44,26,.1);color:var(--brand)}
.tone-leaf .stat-icon{background:rgba(47,107,60,.12);color:var(--leaf)}
.tone-gold .stat-icon{background:rgba(200,144,43,.15);color:#a8731b}
.tone-blue .stat-icon{background:rgba(37,99,235,.1);color:#2563eb}
.tone-red .stat-icon{background:rgba(214,60,47,.1);color:#c0392b}
.tone-purple .stat-icon{background:rgba(124,58,237,.1);color:#7c3aed}
[data-bs-theme=dark] .tone-cocoa .stat-icon{color:#e0b27a}

/* ---------- badges ---------- */
.badge{font-weight:600;letter-spacing:.01em}
.badge-soft-success{background:rgba(47,107,60,.14)!important;color:#256133!important}
.badge-soft-warning{background:rgba(217,130,43,.16)!important;color:#9a5a12!important}
.badge-soft-danger{background:rgba(214,60,47,.14)!important;color:#b0281c!important}
.badge-soft-info{background:rgba(14,116,144,.13)!important;color:#0e7490!important}
.badge-soft-primary{background:rgba(74,44,26,.12)!important;color:var(--brand)!important}
.badge-soft-secondary{background:rgba(120,110,100,.14)!important;color:#5f554c!important}
.badge-soft-purple,.text-bg-purple{background:rgba(124,58,237,.12)!important;color:#6d28d9!important}
.badge-soft-dark{background:rgba(0,0,0,.15)!important;color:#222!important}
[data-bs-theme=dark] .badge[class*=badge-soft]{filter:brightness(1.6)}

/* ---------- tables ---------- */
.table{--bs-table-bg:transparent;margin-bottom:0}
.table thead th{font-size:.74rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600;background:var(--surface-2);border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:1}
.table td{border-color:var(--line)}
.table tfoot td{background:var(--surface-2);border-top:2px solid var(--line)}
.table-wrap{border:1px solid var(--line);border-radius:10px;max-height:70vh}
.data-tools{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.6rem}
.data-tools .form-control{max-width:260px}
th.sortable{cursor:pointer}th.sortable:after{content:"\2195";opacity:.35;margin-left:.3rem;font-size:.7rem}
th.sort-asc:after{content:"\2191";opacity:.9}th.sort-desc:after{content:"\2193";opacity:.9}
.report-table th,.report-table td{font-size:.78rem;padding:.3rem .4rem;white-space:nowrap}
.report-table thead th{text-align:center;vertical-align:middle}
.report-table td.num,.report-table th.num{text-align:right}
.nav-pills-soft .nav-link{color:var(--muted);border-radius:9px;font-weight:500;padding:.4rem .85rem}
.nav-pills-soft .nav-link.active{background:var(--brand);color:#fff}

/* ---------- misc components ---------- */
.empty-state i{opacity:.4}
.timeline{list-style:none;padding:0;margin:0;position:relative}
.timeline:before{content:"";position:absolute;left:17px;top:6px;bottom:6px;width:2px;background:var(--line)}
.timeline li{position:relative;padding:0 0 1.1rem 3rem}
.timeline .tl-icon{position:absolute;left:0;top:0;width:36px;height:36px;border-radius:50%;background:var(--surface);border:2px solid var(--leaf);color:var(--leaf);display:flex;align-items:center;justify-content:center}
.map-box{height:460px;border-radius:var(--radius);border:1px solid var(--line);overflow:hidden;background:#e9e5dd}
.map-box.sm{height:320px}
.scanner-box{max-width:420px;border-radius:12px;overflow:hidden;border:2px dashed var(--line)}
.scan-chip{display:inline-flex;align-items:center;gap:.3rem;background:var(--surface-2);border:1px solid var(--line);border-radius:20px;padding:.15rem .6rem;margin:.15rem;font-size:.8rem;font-family:ui-monospace,monospace}
.wf-steps{display:flex;gap:0;flex-wrap:wrap;margin:0 0 1rem;padding:0;list-style:none}
.wf-steps li{flex:1;min-width:120px;text-align:center;position:relative;padding:.4rem .3rem;font-size:.78rem;color:var(--muted)}
.wf-steps li .dot{width:30px;height:30px;border-radius:50%;margin:0 auto .3rem;display:flex;align-items:center;justify-content:center;background:var(--surface-2);border:2px solid var(--line);font-weight:700}
.wf-steps li.done .dot{background:var(--leaf);border-color:var(--leaf);color:#fff}
.wf-steps li.current .dot{background:var(--gold);border-color:var(--gold);color:#fff;box-shadow:0 0 0 4px rgba(200,144,43,.2)}
.wf-steps li.rejected .dot{background:#c0392b;border-color:#c0392b;color:#fff}
.wf-steps li:not(:last-child):after{content:"";position:absolute;top:19px;left:calc(50% + 18px);right:calc(-50% + 18px);height:2px;background:var(--line)}
.wf-steps li.done:not(:last-child):after{background:var(--leaf)}
.quick-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}
.quick-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4rem;padding:1.1rem .5rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);font-weight:600;font-size:.86rem;text-align:center}
.quick-tile i{font-size:1.6rem;color:var(--brand)}
[data-bs-theme=dark] .quick-tile i{color:#e0b27a}
.quick-tile:hover{border-color:var(--gold);color:var(--ink)}
.tag-label{width:62mm;height:38mm;border:1px dashed #999;border-radius:6px;padding:2mm;display:inline-flex;gap:2mm;align-items:center;margin:1mm;page-break-inside:avoid;background:#fff;color:#000;vertical-align:top}
.tag-label .qr{width:30mm;height:30mm}.tag-label .qr canvas,.tag-label .qr img,.tag-label .qr svg{width:100%!important;height:100%!important}
.tag-label .meta{font-size:7pt;line-height:1.25;min-width:0}
.tag-label .meta b{font-size:9pt;font-family:ui-monospace,monospace}
.tag-label svg.bc{width:100%;height:9mm}
.detail-list .fw-semibold{word-break:break-word}

/* ---------- preloader & progress ---------- */
#preloader{position:fixed;inset:0;background:var(--bg);z-index:9999;display:flex;align-items:center;justify-content:center;transition:opacity .35s ease,visibility .35s}
#preloader.hide{opacity:0;visibility:hidden}
.loader-mark{position:relative;width:86px;height:86px;display:flex;align-items:center;justify-content:center}
.loader-mark img{width:46px;height:46px;object-fit:contain;animation:pulse 1.4s ease-in-out infinite}
.loader-ring{position:absolute;inset:0;border-radius:50%;border:3px solid rgba(200,144,43,.2);border-top-color:var(--gold);border-right-color:var(--brand);animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulse{50%{transform:scale(.88);opacity:.75}}
#topbar-progress{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--gold),var(--pod));z-index:9998;transition:width .25s ease,opacity .3s}
#topbar-progress.run{width:70%;transition:width 6s cubic-bezier(.1,.7,.2,1)}
#topbar-progress.done{width:100%;opacity:0}

/* ---------- auth pages ---------- */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}
.auth-hero{background:linear-gradient(160deg,rgba(43,25,14,.92),rgba(74,44,26,.85)),url(../img/cocoa-bg.svg) center/cover;color:#f4e6d6;padding:3rem;display:flex;flex-direction:column;justify-content:space-between}
.auth-hero h1{font-weight:700;font-size:2rem;color:#fff}
.auth-panel{display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--surface)}
.auth-card{width:100%;max-width:400px}
@media (max-width:991.98px){.auth-wrap{grid-template-columns:1fr}.auth-hero{display:none}}
.otp-input{font-size:1.6rem;letter-spacing:.6em;text-align:center;font-weight:700}

/* ---------- public trace ---------- */
.trace-hero{background:linear-gradient(135deg,#2b190e,#4a2c1a 60%,#6b4226);color:#fff;padding:2.2rem 0 4.5rem}
.trace-card{margin-top:-3rem}

/* ---------- print ---------- */
@media print{
  @page{size:A4;margin:10mm}
  .sidebar,.topbar,.app-footer,.d-print-none,#preloader,.toast-container,.data-tools,.filter-bar,.btn{display:none!important}
  body{background:#fff;font-size:10pt}.content{padding:0}.card{border:0;box-shadow:none!important}.card-body{padding:0}
  .table-wrap{max-height:none;border:0;overflow:visible}.table thead th{position:static}
  .report-landscape{zoom:.78}
  a{color:#000}
}
.print-only{display:none}@media print{.print-only{display:block}}
@media (max-width:575.98px){
  .stat-card{padding:.75rem;gap:.6rem;align-items:flex-start}
  .stat-icon{width:36px;height:36px;flex-basis:36px;font-size:1.05rem;border-radius:10px}
  .stat-value{font-size:1.1rem;white-space:normal;overflow-wrap:anywhere}
  .stat-label{font-size:.7rem}
  .page-head h1{font-size:1.2rem}
  .quick-tiles{grid-template-columns:repeat(2,1fr)}
}
