/* NARVALIO — ivory on deep water. System fonts only (§7: 0 web fonts).
 * Red (--alert) is reserved for errors and the expiry warning — never decoration. */
:root {
  --abyss: #071726;   /* page background */
  --ink: #0E2438;     /* cards / panels */
  --line: #1B3348;
  --tusk: #EDE7DA;    /* primary text (ivory) */
  --tusk-dim: #9AA7B2;/* muted text */
  --glacier: #7FB0CC; /* accent, links, focus */
  --alert: #C2543E;   /* errors + expiry only */
  --radius: 12px;
  --mono: ui-monospace, "Cascadia Code", "SFMono-Regular", Consolas, monospace;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-weight: 300;
  background: var(--abyss);
  color: var(--tusk);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

.page-centered {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}

.card {
  width: 100%;
  max-width: 460px;
  background: var(--ink);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 30px;
}
.card-wide { max-width: 680px; }

/* Logotype: monospace, echoing the 16-char identifier the product is built on. */
.brand {
  margin: 0 0 12px;
  font-family: var(--mono);
  font-weight: 500;
  font-size: 1.4rem;
  letter-spacing: 0.03em;
  color: var(--tusk);
}
.wordmark {
  display: flex;
  align-items: center;
  gap: 14px;
  letter-spacing: 0.26em;
  text-indent: 0.26em;
}
.wordmark .logo { width: 1.5em; height: 1.5em; color: var(--tusk); flex: none; }

.lede { font-size: 1.05rem; color: var(--tusk); }
.note { color: var(--tusk); }
.note-success { color: var(--glacier); }
.fineprint { color: var(--tusk-dim); font-size: 0.85rem; }
.status { min-height: 1.2em; color: var(--alert); font-size: 0.9rem; }

.actions { display: flex; gap: 12px; margin: 18px 0 6px; flex-wrap: wrap; }

.btn {
  display: inline-block;
  padding: 11px 18px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: transparent;
  color: var(--tusk);
  font: inherit;
  font-weight: 400;
  text-decoration: none;
  cursor: pointer;
}
.btn:hover { border-color: var(--glacier); }
.btn-primary { background: var(--glacier); border-color: var(--glacier); color: var(--abyss); font-weight: 500; }
.btn-primary:hover { filter: brightness(1.06); }
.btn-small { padding: 6px 10px; font-size: 0.85rem; }
.btn-danger { color: var(--alert); border-color: var(--alert); }
.btn-confirm { background: var(--alert); border-color: var(--alert); color: #fff; font-weight: 500; }
.btn[disabled] { opacity: 0.45; cursor: not-allowed; }

/* Confirmation popup (in-theme, replaces the native browser alert) */
.modal {
  position: fixed; inset: 0; z-index: 100;
  display: flex; align-items: center; justify-content: center; padding: 24px;
  background: rgba(6, 18, 30, 0.72);
}
.modal[hidden] { display: none; }
.modal-box {
  width: 100%; max-width: 420px;
  background: var(--ink);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 24px;
  box-shadow: 0 18px 48px rgba(0, 0, 0, 0.45);
}
.modal-actions { display: flex; gap: 12px; justify-content: flex-end; margin-top: 20px; }
.admin-actions { margin: 12px 0 6px; }
.vault-actions { margin: 2px 0 14px; }

.field { display: block; margin: 0 0 16px; }
.field span { display: block; margin-bottom: 6px; color: var(--tusk-dim); font-size: 0.9rem; }
.field input {
  width: 100%;
  padding: 11px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #0A1F31;
  color: var(--tusk);
  font: inherit;
}
.field input:focus { outline: 2px solid var(--glacier); outline-offset: 1px; }

/* Pre-payment obligations (§4/§8) */
.warnings-title { margin-bottom: 6px; }
.warnings { margin: 0 0 18px; padding-left: 20px; color: var(--tusk-dim); font-size: 0.88rem; }
.warnings li { margin: 4px 0; }
.waiver {
  display: flex; gap: 10px; align-items: flex-start;
  margin: 0 0 16px; padding: 14px;
  border: 1px solid var(--line); border-radius: 8px;
  font-size: 0.88rem; color: var(--tusk);
}
.waiver input { margin-top: 3px; flex: none; accent-color: var(--glacier); }
.cta-subtitle { margin: 2px 0 0; }

.uid-display {
  font-family: var(--mono);
  font-size: 1.25rem;
  letter-spacing: 0.14em;
  background: #0A1F31;
  border: 1px dashed var(--line);
  border-radius: 8px;
  padding: 14px;
  text-align: center;
  word-break: break-word;
  color: var(--tusk);
}

.vault-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

.uploader { margin: 18px 0; padding: 16px; border: 1px dashed var(--line); border-radius: 8px; }
.uploader input[type="file"] { color: var(--tusk-dim); }

.file-list { list-style: none; margin: 0; padding: 0; }
.file-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 0; border-top: 1px solid var(--line);
}
.file-meta { display: flex; flex-direction: column; min-width: 0; }
.file-name { overflow-wrap: anywhere; }
.file-size { color: var(--tusk-dim); font-size: 0.8rem; }
.file-actions { display: flex; gap: 8px; flex-shrink: 0; }

a { color: var(--glacier); }

/* Virtual keyboard (§7) */
#kbd-toggle { margin: 0 0 12px; }
.kbd { margin: 0 0 16px; }
#kbd-canvas {
  display: block;
  max-width: 100%;
  border: 1px solid var(--line);
  border-radius: 8px;
  cursor: pointer;
  touch-action: manipulation;
}
.kbd-note { margin-top: 10px; }

/* Countdown states — red only when genuinely near expiry */
.countdown-warn { color: var(--glacier); }
.countdown-soon { color: var(--alert); }

/* Storage gauge (addendum §6) */
.gauge { margin: 0 0 14px; }
.gauge-bar {
  height: 8px; background: #0A1F31;
  border: 1px solid var(--line); border-radius: 6px; overflow: hidden;
}
.gauge-fill { height: 100%; width: 0; background: var(--glacier); transition: width 0.2s; }
.gauge-fill.gauge-high { background: var(--alert); }
#gauge-label { margin-top: 6px; }

/* Pages with a footer (landing, legal) + language switcher */
.page-flow { min-height: 100vh; display: flex; flex-direction: column; align-items: center; padding: 24px; }
.page-flow > main { width: 100%; max-width: 460px; margin: 24px 0; }
.page-flow > main.card-wide, .page-flow > main.legal { max-width: 760px; }
.site-footer {
  margin-top: auto; width: 100%; max-width: 760px;
  padding: 16px 4px 4px; border-top: 1px solid var(--line);
  display: flex; flex-wrap: wrap; gap: 10px 18px; justify-content: space-between;
  font-size: 0.8rem;
}
.site-footer nav { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.site-footer a { color: var(--tusk-dim); text-decoration: none; }
.site-footer a:hover { color: var(--tusk); }
.site-footer a.active { color: var(--glacier); }

/* Legal pages */
.legal h1 { font-family: var(--mono); font-weight: 500; font-size: 1.4rem; margin-bottom: 8px; }
.legal h2 { font-size: 1.05rem; margin: 26px 0 8px; color: var(--tusk); }
.legal p, .legal li { color: var(--tusk-dim); }
.legal a { color: var(--glacier); }
.legal address { font-style: normal; color: var(--tusk-dim); }
.legal .draft { border-left: 2px solid var(--alert); padding: 8px 14px; color: var(--tusk); margin: 14px 0; font-size: 0.9rem; }
.legal h3 { font-size: 0.98rem; margin: 20px 0 6px; color: var(--tusk); }
.legal ul, .legal ol { padding-left: 1.3em; margin: 10px 0; }
.legal li { margin: 6px 0; }
.legal p { margin: 10px 0; }

/* Admin */
.mono { font-family: var(--mono); letter-spacing: 0.04em; }
.admin-section-title { margin: 22px 0 6px; color: var(--glacier); font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.08em; }
