/* ============================================================
   NLMP 2.0 — "North Sea Desk" design system
   Maritime / offshore crew & finance back-office
   Borders-only depth · 4px grid · single orange action accent
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Archivo:wght@500;600;700;800&family=Inter:wght@400;450;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap');

:root{
  /* — Canvas & surfaces — Atlas Inexco light cool grey — */
  --canvas:        #F4F6F8;   /* atlasinexco.com canvas */
  --surface:       #FFFFFF;
  --surface-2:     #F7F9FB;   /* striped rows / raised */
  --surface-sunk:  #EAEDF1;   /* inset inputs */
  --surface-rail:  #2C353D;   /* Atlas dark slate — sidebar/topbar */
  --surface-rail2: #38434C;   /* rail raised */
  --surface-rail3: #ffffff14; /* rail hover wash */

  /* — Ink (4-level text hierarchy) — Atlas slate scale — */
  --ink:   #0A0A0A;
  --ink-2: #46535E;
  --ink-3: #788997;
  --ink-4: #A6B2BC;
  --ink-on-rail:   #EDEFF1;
  --ink-on-rail-2: #A7B2BB;
  --ink-on-rail-3: #6E7C86;

  /* — Brand secondary / structure — Atlas cyan — */
  --sea:    #0E8AA6;   /* cyan (darkened for contrast) — links & info */
  --sea-2:  #14A9C7;   /* Atlas bright cyan */

  /* — THE action accent — Atlas Inexco red — used sparingly — */
  --signal:      #EE3B33;
  --signal-press:#D7342D;
  --signal-soft: #FCE4E3;
  --signal-ink:  #B0231C;

  /* — Borders (progression) — */
  --line:        rgba(16,40,60,.11);
  --line-soft:   rgba(16,40,60,.06);
  --line-strong: rgba(16,40,60,.20);
  --line-rail:   rgba(255,255,255,.09);

  /* — Semantic — */
  --ok:#1B7F52;      --ok-soft:#E2F1E9;     --ok-ink:#13643F;
  --warn:#B47A0E;    --warn-soft:#F8EFD8;   --warn-ink:#8A5C06;
  --danger:#C23B3B;  --danger-soft:#FAE5E4; --danger-ink:#982B2B;
  --info:#0E8AA6;    --info-soft:#DEF0F4;   --info-ink:#0A6B82;
  --muted-soft:#EDF1F5; --muted-ink:#5C6E7E;

  /* — Radius — */
  --r-xs:5px; --r-sm:7px; --r-md:10px; --r-lg:14px; --r-pill:999px;

  /* — Shadow (only popovers/modals) — */
  --shadow-pop: 0 1px 2px rgba(12,36,54,.08), 0 8px 24px rgba(12,36,54,.12);
  --shadow-card: 0 1px 0 rgba(16,40,60,.03);

  /* — Type — */
  --font-display:'Archivo', system-ui, sans-serif;
  --font-ui:'Inter', system-ui, -apple-system, sans-serif;
  --font-mono:'IBM Plex Mono', ui-monospace, monospace;

  /* — Layout — */
  --rail-w:248px;
  --topbar-h:60px;
}

*{box-sizing:border-box}
/* global icon base size — specific contexts override via higher specificity */
.ico{width:18px;height:18px;flex:0 0 auto;display:inline-block;vertical-align:middle}
.card-head > .ico{color:var(--ink-3)}
.empty .ico > svg,.dz-ico > svg,.fb-ico > svg{width:20px;height:20px}
html,body{margin:0;height:100%}
body{
  font-family:var(--font-ui);
  background:var(--canvas);
  color:var(--ink);
  font-size:14px;
  line-height:1.45;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
a{color:var(--sea);text-decoration:none}
a:hover{text-decoration:underline}
::selection{background:var(--signal);color:#fff}

/* scrollbars */
*::-webkit-scrollbar{width:11px;height:11px}
*::-webkit-scrollbar-thumb{background:rgba(16,40,60,.18);border-radius:99px;border:3px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:rgba(16,40,60,.30);background-clip:content-box}

/* ============================================================
   App shell
   ============================================================ */
.app{display:grid;grid-template-columns:var(--rail-w) 1fr;height:100vh;overflow:hidden}

/* ---- Sidebar rail ---- */
.rail{
  background:var(--surface-rail);
  color:var(--ink-on-rail);
  display:flex;flex-direction:column;
  border-right:1px solid var(--line-rail);
  overflow:hidden;
}
.brand{
  display:flex;align-items:center;gap:11px;
  padding:16px 18px;height:var(--topbar-h);
  border-bottom:1px solid var(--line-rail);
  flex:0 0 auto;
}
.brand-mark{
  width:30px;height:30px;border-radius:8px;flex:0 0 auto;
  background:linear-gradient(150deg,#EE3B33,#B0231C);
  border:1px solid rgba(255,255,255,.16);
  display:grid;place-items:center;
}
.brand-mark svg{width:18px;height:18px}
.brand-name{font-family:var(--font-display);font-weight:700;font-size:15px;letter-spacing:-.2px;color:#fff;line-height:1}
.brand-sub{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-on-rail-3);margin-top:3px}

.nav{flex:1 1 auto;overflow-y:auto;padding:10px 10px 24px}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);background-clip:content-box}
.nav-group{margin-top:14px}
.nav-group:first-child{margin-top:2px}
.nav-label{
  font-size:10.5px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;
  color:var(--ink-on-rail-3);padding:6px 10px 6px;display:flex;align-items:center;gap:8px;
}
.nav-label .rule{flex:1;height:1px;background:var(--line-rail)}

/* Finance block gets a distinct treatment — it is "a separate part" */
.nav-group.finance .nav-label{color:#F0A6A2}
.nav-group.finance{
  background:linear-gradient(180deg,rgba(238,59,51,.09),rgba(238,59,51,0));
  border:1px solid rgba(238,59,51,.18);
  border-radius:var(--r-md);
  padding:4px 4px 8px;margin:14px 2px;
}

.nav-item{
  display:flex;align-items:center;gap:10px;
  padding:8px 10px;border-radius:var(--r-sm);
  color:var(--ink-on-rail-2);font-weight:500;font-size:13.3px;
  cursor:pointer;position:relative;margin:1px 0;
  border:1px solid transparent;
}
.nav-item:hover{background:rgba(255,255,255,.05);color:var(--ink-on-rail);text-decoration:none}
.nav-item .ico{width:17px;height:17px;flex:0 0 auto;opacity:.85}
.nav-item .ct{margin-left:auto;font-size:11px;font-family:var(--font-mono);color:var(--ink-on-rail-3);
  background:rgba(255,255,255,.06);padding:1px 6px;border-radius:99px}
.nav-item.active{
  background:var(--surface-rail2);color:#fff;
  border-color:var(--line-rail);
}
.nav-item.active::before{
  content:"";position:absolute;left:-10px;top:7px;bottom:7px;width:3px;
  background:var(--signal);border-radius:0 3px 3px 0;
}
.nav-group.finance .nav-item.active::before{left:-4px}
.nav-item.active .ico{opacity:1;color:#F2A6A0}
.nav-item.sub{padding-left:22px;font-size:12.8px}
.nav-item.sub .ico{width:15px;height:15px;opacity:.7}
.nav-item.sub:hover .ico,.nav-item.sub.active .ico{opacity:1}

.rail-foot{flex:0 0 auto;padding:12px;border-top:1px solid var(--line-rail);font-size:11px;color:var(--ink-on-rail-3)}
.rail-foot b{color:var(--ink-on-rail-2);font-weight:600}

/* ---- Main column ---- */
.main{display:flex;flex-direction:column;overflow:hidden;min-width:0}
.topbar{
  height:var(--topbar-h);flex:0 0 auto;
  background:var(--surface);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:14px;padding:0 22px;
}
.crumbs{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-3);min-width:0}
.crumbs .sep{color:var(--ink-4)}
.crumbs .here{color:var(--ink);font-weight:600}
.crumbs a{color:var(--ink-3)}
.topbar-spacer{flex:1}
.searchbox{
  display:flex;align-items:center;gap:8px;background:var(--surface-sunk);
  border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 11px;width:280px;color:var(--ink-3);
}
.searchbox input{border:0;background:transparent;outline:none;font:inherit;color:var(--ink);width:100%}
.searchbox kbd{font-family:var(--font-mono);font-size:11px;background:var(--surface);border:1px solid var(--line);
  border-radius:4px;padding:1px 5px;color:var(--ink-3)}
.topbar-icon{width:36px;height:36px;border-radius:var(--r-sm);display:grid;place-items:center;color:var(--ink-2);cursor:pointer;position:relative}
.topbar-icon:hover{background:var(--surface-sunk)}
.topbar-icon .badge{position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:99px;background:var(--signal);border:2px solid var(--surface)}
.lang-switch{display:flex;align-items:center;gap:2px;background:var(--surface-sunk);border:1px solid var(--line);border-radius:var(--r-sm);padding:2px 3px 2px 8px;color:var(--ink-3)}
.lang-switch > .ico{width:15px;height:15px;margin-right:1px}
.lang-switch button{border:0;background:transparent;font:inherit;font-size:11.5px;font-weight:700;color:var(--ink-3);padding:3px 7px;border-radius:5px;cursor:pointer;letter-spacing:.02em}
.lang-switch button:hover{color:var(--ink)}
.lang-switch button.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-card)}
.avatar{
  width:34px;height:34px;border-radius:99px;display:grid;place-items:center;cursor:pointer;
  background:linear-gradient(150deg,#46535E,#2C353D);color:#fff;font-weight:600;font-size:13px;
  border:1px solid var(--line-strong);
}

.scroll{flex:1 1 auto;overflow-y:auto}
.page{padding:24px 26px 64px;max-width:1400px;margin:0 auto}

/* ============================================================
   Page header
   ============================================================ */
.ph{display:flex;align-items:flex-start;gap:18px;margin-bottom:20px}
.ph-title{font-family:var(--font-display);font-weight:700;font-size:24px;letter-spacing:-.5px;color:var(--ink);line-height:1.1}
.ph-sub{color:var(--ink-3);font-size:13.5px;margin-top:5px;max-width:62ch}
.ph-actions{margin-left:auto;display:flex;gap:9px;align-items:center;flex-wrap:wrap}

/* ============================================================
   Buttons
   ============================================================ */
.btn{
  display:inline-flex;align-items:center;gap:7px;
  font:inherit;font-weight:600;font-size:13px;
  padding:8px 13px;border-radius:var(--r-sm);cursor:pointer;
  border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);
  transition:background .12s ease,border-color .12s ease,box-shadow .12s ease;white-space:nowrap;
}
.btn:hover{background:var(--surface-2);border-color:var(--line-strong)}
.btn .ico{width:16px;height:16px}
.btn.primary{background:var(--signal);border-color:var(--signal);color:#fff}
.btn.primary:hover{background:var(--signal-press);border-color:var(--signal-press)}
.btn.sea{background:var(--sea);border-color:var(--sea);color:#fff}
.btn.sea:hover{background:var(--sea-2)}
.btn.ghost{background:transparent;border-color:transparent;color:var(--ink-2)}
.btn.ghost:hover{background:var(--surface-sunk)}
.btn.sm{padding:5px 9px;font-size:12px;border-radius:var(--r-xs)}
.btn.icon{padding:7px;width:34px;justify-content:center}
.btn.icon.sm{padding:5px;width:28px}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ============================================================
   Cards & panels
   ============================================================ */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-card)}
.card-pad{padding:18px}
.card-head{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-soft)}
.card-head h3{margin:0;font-family:var(--font-display);font-weight:600;font-size:14.5px;letter-spacing:-.1px}
.card-head .ph-sub{margin:0}
.card-head .right{margin-left:auto;display:flex;gap:8px;align-items:center}

/* collapsible section cards (dashboard) */
.card.collapsible > .card-head{cursor:default}
.card.collapsible .collapse-btn{color:var(--ink-3);transition:transform .15s ease}
.card.collapsible .collapse-btn:hover{color:var(--ink)}
.card.collapsible.collapsed .collapse-btn{transform:rotate(-90deg)}
.card.collapsible.collapsed > .card-head{border-bottom:0}
.card.collapsible.collapsed > :not(.card-head){display:none !important}

.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1100px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}}

/* ============================================================
   KPI / stat — "ledger row" signature (leading rule, not icon-box)
   ============================================================ */
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:15px 16px 14px;position:relative;overflow:hidden}
.stat::before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:3px;background:var(--line-strong)}
.stat.accent::before{background:var(--signal)}
.stat.sea::before{background:var(--sea)}
.stat.ok::before{background:var(--ok)}
.stat.warn::before{background:var(--warn)}
.stat-label{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:600;padding-left:11px}
.stat-val{font-family:var(--font-display);font-weight:700;font-size:27px;letter-spacing:-.6px;margin-top:6px;padding-left:11px;line-height:1;
  font-variant-numeric:tabular-nums}
.stat-val .cur{font-size:15px;color:var(--ink-3);font-weight:600;margin-right:3px}
.stat-meta{display:flex;align-items:center;gap:6px;margin-top:9px;padding-left:11px;font-size:12px;color:var(--ink-3)}
.delta{display:inline-flex;align-items:center;gap:3px;font-weight:600;font-family:var(--font-mono);font-size:11.5px;padding:1px 6px;border-radius:99px}
.delta.up{color:var(--ok-ink);background:var(--ok-soft)}
.delta.down{color:var(--danger-ink);background:var(--danger-soft)}

/* ============================================================
   Badges / chips / status
   ============================================================ */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:var(--r-pill);
  border:1px solid transparent;white-space:nowrap;line-height:1.5}
.badge .dt{width:6px;height:6px;border-radius:99px;background:currentColor}
.badge.ok{color:var(--ok-ink);background:var(--ok-soft)}
.badge.warn{color:var(--warn-ink);background:var(--warn-soft)}
.badge.danger{color:var(--danger-ink);background:var(--danger-soft)}
.badge.info{color:var(--info-ink);background:var(--info-soft)}
.badge.muted{color:var(--muted-ink);background:var(--muted-soft)}
.badge.signal{color:var(--signal-ink);background:var(--signal-soft)}
.badge.outline{background:transparent;border-color:var(--line-strong);color:var(--ink-2)}
.tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;color:var(--ink-2);
  background:var(--surface-sunk);border:1px solid var(--line-soft);padding:2px 8px;border-radius:var(--r-xs)}

/* ============================================================
   Tables
   ============================================================ */
.table-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.tbl thead th{
  text-align:left;font-weight:600;font-size:11.5px;letter-spacing:.03em;text-transform:uppercase;
  color:var(--ink-3);padding:10px 14px;background:var(--surface-2);
  border-bottom:1px solid var(--line);position:sticky;top:0;white-space:nowrap;
}
.tbl thead th.num,.tbl td.num{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.tbl tbody td{padding:11px 14px;border-bottom:1px solid var(--line-soft);color:var(--ink);vertical-align:middle}
.tbl tbody tr:hover td{background:var(--surface-2)}
.tbl tbody tr.clickable{cursor:pointer}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl .mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.tbl .strong{font-weight:600}
.tbl .sub{color:var(--ink-3);font-size:12px}
.tbl .right{text-align:right}
.cell-id{font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}
.cell-lead{font-weight:600}
.cell-2{display:flex;flex-direction:column;gap:1px}
.cell-2 .s{font-size:11.5px;color:var(--ink-3)}
.row-actions{display:flex;gap:4px;justify-content:flex-end;opacity:.55;transition:opacity .12s}
tr:hover .row-actions{opacity:1}

/* group header row (for grouped worklists / vessel grouping) */
.tbl tr.grouprow td{background:var(--surface-sunk);font-weight:600;color:var(--ink-2);
  border-bottom:1px solid var(--line);font-size:12.5px}
.tbl tr.grouprow .gh{display:flex;align-items:center;gap:9px}
.tbl tr.grouprow .gh .ico{width:15px;height:15px;color:var(--ink-3)}

/* mini avatar */
.av{width:28px;height:28px;border-radius:99px;display:inline-grid;place-items:center;font-size:11px;font-weight:600;color:#fff;
  background:linear-gradient(150deg,#5A6873,#2C353D);flex:0 0 auto}
.av.sm{width:22px;height:22px;font-size:10px}
.who{display:flex;align-items:center;gap:9px;min-width:0}
.who .nm{font-weight:600;line-height:1.2}
.who .ro{font-size:11.5px;color:var(--ink-3);line-height:1.2}

/* ============================================================
   Toolbar / filters
   ============================================================ */
.toolbar{display:flex;align-items:center;gap:9px;padding:12px 14px;border-bottom:1px solid var(--line-soft);flex-wrap:wrap}
.toolbar .grow{flex:1}
.seg{display:inline-flex;background:var(--surface-sunk);border:1px solid var(--line);border-radius:var(--r-sm);padding:2px}
.seg button{border:0;background:transparent;font:inherit;font-size:12.5px;font-weight:500;color:var(--ink-2);
  padding:5px 11px;border-radius:var(--r-xs);cursor:pointer}
.seg button.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-card);font-weight:600}
.field-search{display:flex;align-items:center;gap:8px;background:var(--surface-sunk);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:7px 11px;color:var(--ink-3);min-width:220px}
.field-search input{border:0;background:transparent;outline:none;font:inherit;color:var(--ink);width:100%}
.chk{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2);cursor:pointer;user-select:none}
.chk input{accent-color:var(--signal);width:15px;height:15px}

/* ============================================================
   Forms
   ============================================================ */
.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 18px}
.form-grid.cols-1{grid-template-columns:1fr}
.fg{display:flex;flex-direction:column;gap:6px;min-width:0}
.fg.span-2{grid-column:1/-1}
.fg label{font-size:12px;font-weight:600;color:var(--ink-2)}
.fg label .req{color:var(--signal);margin-left:2px}
.inp,.sel,textarea.inp{
  font:inherit;font-size:13.5px;color:var(--ink);
  background:var(--surface-sunk);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:8px 11px;outline:none;width:100%;transition:border-color .12s,box-shadow .12s;
}
.inp:focus,.sel:focus,textarea.inp:focus{border-color:var(--sea);box-shadow:0 0 0 3px rgba(14,169,199,.18);background:var(--surface)}
.inp::placeholder{color:var(--ink-4)}
.inp.mono{font-family:var(--font-mono)}
.sel{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236E8295' stroke-width='2.4'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:30px;cursor:pointer}
.inp-affix{display:flex;align-items:center;background:var(--surface-sunk);border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}
.inp-affix .pre{padding:8px 10px;color:var(--ink-3);background:var(--surface-2);border-right:1px solid var(--line);font-weight:600;font-size:12.5px}
.inp-affix input{border:0;background:transparent;padding:8px 11px;outline:none;font:inherit;width:100%;font-family:var(--font-mono)}
.help{font-size:11.5px;color:var(--ink-3)}

/* toggle */
.switch{position:relative;width:38px;height:22px;flex:0 0 auto;cursor:pointer}
.switch input{display:none}
.switch .tk{position:absolute;inset:0;background:#BFC9D1;border-radius:99px;transition:background .15s;box-shadow:inset 0 0 0 1px rgba(16,40,60,.10)}
.switch .tk::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:99px;transition:transform .15s;box-shadow:0 1px 2px rgba(16,40,60,.30);border:1px solid rgba(16,40,60,.06)}
.switch input:checked + .tk{background:var(--ok);box-shadow:none}
.switch input:checked + .tk::after{transform:translateX(16px)}

/* ============================================================
   Tabs
   ============================================================ */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);overflow-x:auto}
.tab{padding:10px 14px;font-size:13px;font-weight:600;color:var(--ink-3);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;display:flex;align-items:center;gap:7px}
.tab:hover{color:var(--ink)}
.tab.active{color:var(--ink);border-bottom-color:var(--signal)}
.tab .ct{font-family:var(--font-mono);font-size:11px;background:var(--surface-sunk);padding:0 6px;border-radius:99px;color:var(--ink-3)}

/* ============================================================
   Drag/drop dropzone (invoice import, document upload)
   ============================================================ */
.dropzone{
  border:1.5px dashed var(--line-strong);border-radius:var(--r-md);
  background:repeating-linear-gradient(45deg,var(--surface-2),var(--surface-2) 12px,var(--surface) 12px,var(--surface) 24px);
  padding:30px;text-align:center;color:var(--ink-3);cursor:pointer;transition:border-color .15s,background .15s;
}
.dropzone:hover,.dropzone.drag{border-color:var(--signal);background:var(--signal-soft);color:var(--signal-ink)}
.dropzone .dz-ico{width:40px;height:40px;margin:0 auto 10px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:1px solid var(--line)}
.dropzone b{color:var(--ink);font-family:var(--font-display)}

/* ============================================================
   Timeline / rotation signature (Mob → onboard → Demob)
   ============================================================ */
.rota{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;font-size:12px}
.rota .seg-r{padding:9px 13px;display:flex;flex-direction:column;gap:2px;border-right:1px solid var(--line-soft);flex:0 0 auto}
.rota .seg-r:last-child{border-right:0}
.rota .seg-r.onboard{flex:1;background:var(--info-soft)}
.rota .seg-r.mob{background:var(--surface-2)}
.rota .seg-r.demob{background:var(--surface-2)}
.rota .k{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:600}
.rota .v{font-weight:600;color:var(--ink);font-family:var(--font-mono)}

/* progress */
.prog{height:7px;border-radius:99px;background:var(--surface-sunk);overflow:hidden;border:1px solid var(--line-soft)}
.prog > i{display:block;height:100%;background:var(--ok);border-radius:99px}
.prog.warn > i{background:var(--warn)}
.prog.sea > i{background:var(--sea)}
.prog-row{display:flex;align-items:center;gap:10px}
.prog-row .pct{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--ink-2);width:38px;text-align:right}

/* permission matrix — subtle indicators, not buttons */
.perm{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;line-height:1}
.perm::before{content:"";width:7px;height:7px;border-radius:99px;flex:0 0 auto}
.perm.full{color:var(--ok-ink)}.perm.full::before{background:var(--ok)}
.perm.read{color:var(--sea)}.perm.read::before{background:var(--sea)}
.perm.none{color:var(--ink-4)}.perm.none::before{background:var(--ink-4);opacity:.45}

/* masterdata category section header */
.md-cat{display:flex;align-items:center;gap:10px;margin:24px 2px 12px}
.md-cat:first-of-type{margin-top:6px}
.md-cat .t{font-family:var(--font-display);font-weight:600;font-size:13px;letter-spacing:.02em;text-transform:uppercase;color:var(--ink-2)}
.md-cat .rule{flex:1;height:1px;background:var(--line)}
.md-cat .ct{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);background:var(--surface-sunk);padding:1px 7px;border-radius:99px}

/* ============================================================
   Timesheet calendar
   ============================================================ */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.cal .dow{font-size:11px;font-weight:600;text-align:center;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);padding:0 0 4px}
.tcell{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);padding:8px 9px;min-height:66px;display:flex;flex-direction:column;gap:5px;position:relative;transition:border-color .12s,box-shadow .12s}
.tcell:hover{border-color:var(--line-strong);box-shadow:var(--shadow-card)}
.tcell .top{display:flex;align-items:center;justify-content:space-between;min-height:16px}
.tcell .d{font-size:11.5px;font-family:var(--font-mono);color:var(--ink-3)}
.tcell .hrs{font-weight:700;font-size:16px;font-family:var(--font-display);color:var(--ink);letter-spacing:-.3px;line-height:1}
.tcell .ot{align-self:flex-start;font-size:10px;font-weight:600;color:var(--signal-ink);background:var(--signal-soft);padding:1px 6px;border-radius:99px}
.tcell .ck{color:var(--ok);display:inline-flex}
.tcell .ck svg{width:15px;height:15px}
.tcell .pend{width:7px;height:7px;border-radius:99px;background:var(--warn);display:inline-block}
.tcell.work.pending{border-style:dashed;border-color:var(--line-strong);background:var(--surface-2)}
.tcell.work.pending .d{color:var(--warn-ink);font-weight:600}
.tcell.mob{background:var(--signal-soft);border-color:rgba(238,59,51,.28)}
.tcell.mob .hrs{color:var(--signal);font-size:13px}
.tcell.off{background:var(--surface-2)}
.tcell.off .hrs{color:var(--ink-4);font-size:13px;font-weight:600}
/* editable cell (employee portal) */
.tcell-inp{width:100%;border:1px solid var(--line);border-radius:var(--r-xs);padding:4px 6px;text-align:center;
  font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);background:var(--surface-sunk);outline:none}
.tcell-inp:focus{border-color:var(--sea);box-shadow:0 0 0 3px rgba(14,169,199,.18);background:var(--surface)}
.tcell .mini{font-size:10px;color:var(--ink-3);text-align:center;margin-top:1px}

/* ============================================================
   Tree (items to be invoiced)
   ============================================================ */
.tree{font-size:13px}
.tnode{border-bottom:1px solid var(--line-soft)}
.tnode .trow{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer}
.tnode .trow:hover{background:var(--surface-2)}
.tnode .twist{width:16px;height:16px;color:var(--ink-3);transition:transform .12s;flex:0 0 auto}
.tnode.open > .trow .twist{transform:rotate(90deg)}
.tnode .tlabel{font-weight:600;display:flex;align-items:center;gap:8px}
.tnode .tmeta{margin-left:auto;display:flex;align-items:center;gap:10px;color:var(--ink-3);font-size:12px}
.tchildren{display:none;padding-left:26px;border-left:2px solid var(--line-soft);margin-left:18px}
.tnode.open > .tchildren{display:block}
.leaf{display:flex;align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid var(--line-soft)}
.leaf:hover{background:var(--surface-2)}
.leaf:last-child{border-bottom:0}
.leaf .lcur{margin-left:auto;font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600}
.leaf.disabled{opacity:.5}
.leaf.disabled .chk input{pointer-events:none}

/* ============================================================
   Empty / loading / misc
   ============================================================ */
.empty{text-align:center;padding:46px 20px;color:var(--ink-3)}
.empty .ico{width:46px;height:46px;margin:0 auto 12px;display:grid;place-items:center;border-radius:50%;background:var(--surface-sunk);color:var(--ink-3)}
.empty b{display:block;color:var(--ink);font-family:var(--font-display);font-size:15px;margin-bottom:4px}
.divider{height:1px;background:var(--line-soft);margin:16px 0}
.kv{display:flex;flex-direction:column;gap:2px}
.kv .k{font-size:11.5px;color:var(--ink-3);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.kv .v{font-size:13.5px;color:var(--ink);font-weight:500}
.kv .v.mono{font-family:var(--font-mono)}
.muted{color:var(--ink-3)}
.amount{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600}
.amount.neg{color:var(--danger)}
.flag{font-size:13px}

/* note / callout */
.note{display:flex;gap:11px;padding:13px 15px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-2)}
.note .ico{flex:0 0 auto;width:20px;height:20px;color:var(--sea)}
.note.signal{background:var(--signal-soft);border-color:rgba(232,97,44,.3)}
.note.signal .ico{color:var(--signal)}
.note .t{font-weight:600;margin-bottom:2px}
.note .d{font-size:12.5px;color:var(--ink-2)}

/* ============================================================
   Modal / drawer
   ============================================================ */
.overlay{position:fixed;inset:0;background:rgba(10,26,38,.42);backdrop-filter:blur(2px);z-index:50;display:flex;justify-content:flex-end;
  opacity:0;animation:fade .15s ease forwards}
.drawer{width:min(560px,94vw);background:var(--surface);height:100%;display:flex;flex-direction:column;box-shadow:var(--shadow-pop);
  transform:translateX(20px);animation:slidein .2s cubic-bezier(.2,.7,.3,1) forwards}
.drawer.wide{width:min(820px,96vw)}
.drawer-head{display:flex;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--line)}
.drawer-head h3{margin:0;font-family:var(--font-display);font-size:17px;font-weight:700;letter-spacing:-.3px}
.drawer-body{flex:1;overflow-y:auto;padding:20px}
.drawer-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:9px;justify-content:flex-end;background:var(--surface-2)}
@keyframes fade{to{opacity:1}}
@keyframes slidein{to{transform:translateX(0)}}

/* toast */
.toast-wrap{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:80;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{display:flex;align-items:center;gap:10px;background:var(--surface-rail);color:#fff;padding:11px 16px;border-radius:var(--r-md);
  box-shadow:var(--shadow-pop);font-size:13px;font-weight:500;animation:fade .15s ease}
.toast .ico{width:17px;height:17px;color:#6FCF9B}

/* sea divider line in finance header */
.finance-banner{
  display:flex;align-items:center;gap:13px;padding:13px 18px;margin-bottom:20px;border-radius:var(--r-md);
  background:linear-gradient(100deg,#2C353D,#3C4853);color:#fff;border:1px solid var(--line-rail);position:relative;overflow:hidden
}
.finance-banner .fb-ico{width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.08);display:grid;place-items:center;border:1px solid var(--line-rail)}
.finance-banner .fb-t{font-family:var(--font-display);font-weight:700;font-size:15px}
.finance-banner .fb-d{font-size:12.5px;color:var(--ink-on-rail-2)}
.finance-banner .fb-right{margin-left:auto;display:flex;gap:18px;position:relative}
.finance-banner .fb-stat .l{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-on-rail-2)}
.finance-banner .fb-stat .n{font-family:var(--font-mono);font-weight:600;font-size:16px}

/* ============================================================
   Maritime hero band (dashboard identity)
   ============================================================ */
.sea-hero{
  position:relative;overflow:hidden;border-radius:var(--r-lg);margin-bottom:20px;
  background:linear-gradient(112deg,#0A2030 0%,#123A52 50%,#1A5468 100%);
  color:#fff;border:1px solid var(--line-rail);padding:26px 28px;
}
.sea-hero .deco{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}
.sea-hero .content{position:relative;z-index:2}
.sea-hero .eyebrow{font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#84B4CC;display:flex;align-items:center;gap:8px}
.sea-hero .eyebrow .ico{width:15px;height:15px}
.sea-hero h1{font-family:var(--font-display);font-weight:800;font-size:29px;letter-spacing:-.8px;margin:11px 0 6px;line-height:1.02}
.sea-hero .lead{color:#B7CCD9;font-size:13.5px;max-width:56ch}
.sea-hero .hero-kpis{display:flex;gap:34px;margin-top:22px;flex-wrap:wrap}
.sea-hero .hk .l{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:#84B4CC;font-weight:600;display:flex;align-items:center;gap:6px}
.sea-hero .hk .l .ico{width:13px;height:13px}
.sea-hero .hk .n{font-family:var(--font-display);font-weight:700;font-size:25px;letter-spacing:-.5px;margin-top:5px;font-variant-numeric:tabular-nums;line-height:1}
.sea-hero .hk .n .u{font-size:12px;color:#9DC0D0;font-weight:600;margin-left:2px}
.sea-hero .hk .n .sig{color:#FF8A6B}

/* ============================================================
   North Sea operations map
   ============================================================ */
.opsmap-card .card-head .pin{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-3)}
.opsmap{width:100%;display:block;border-radius:0}
.map-legend{display:flex;gap:20px;flex-wrap:wrap;align-items:center;padding:12px 18px;border-top:1px solid var(--line-soft);font-size:12px;color:var(--ink-2)}
.map-legend .it{display:flex;align-items:center;gap:7px}
.map-legend .sw{width:11px;height:11px;border-radius:3px;flex:0 0 auto}
.map-legend .sw.round{border-radius:99px}

/* ============================================================
   Crew readiness cards (people-first)
   ============================================================ */
.crew-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:14px}
.crew-card{position:relative;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);
  box-shadow:var(--shadow-card);overflow:hidden;display:flex;flex-direction:column;cursor:pointer;
  transition:border-color .12s,box-shadow .12s,transform .12s}
.crew-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-pop);transform:translateY(-1px)}
.crew-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--ok)}
.crew-card.bench::before{background:var(--ink-4)}
.crew-card.attention::before{background:var(--warn)}
.crew-card .cc-top{display:flex;align-items:center;gap:11px;padding:14px 15px 11px}
.av.sq{width:42px;height:42px;border-radius:11px;font-size:14px;flex:0 0 auto}
.crew-card .nm{font-family:var(--font-display);font-weight:600;line-height:1.15;font-size:14px}
.crew-card .pos{font-size:12px;color:var(--ink-3);margin-top:1px}
.crew-card .avail{margin-left:auto;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;display:flex;align-items:center;gap:5px;white-space:nowrap}
.crew-card .avail .d{width:7px;height:7px;border-radius:99px;background:currentColor}
.crew-card .cc-body{padding:0 15px 13px;display:flex;flex-direction:column;gap:10px}
.crew-card .cc-line{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2)}
.crew-card .cc-line .ico{width:14px;height:14px;color:var(--ink-3)}
.crew-card .cc-foot{display:flex;align-items:center;gap:11px;padding:11px 15px;border-top:1px solid var(--line-soft);background:var(--surface-2)}
.crew-card .cc-foot .meta{display:flex;flex-direction:column;gap:1px;line-height:1.2}
.crew-card .cc-foot .meta .k{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:600}
.crew-card .cc-foot .meta .v{font-size:12.5px;font-weight:600}
.ring{position:relative;width:40px;height:40px;flex:0 0 auto}
.ring .pct{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--ink)}

/* responsive */
@media(max-width:980px){
  :root{--rail-w:0px}
  .rail{display:none}
  .app{grid-template-columns:1fr}
}
