/* Terminal portfolio — Rosé Pine palette, mobile-first. */

:root {
  --moon: #232136;      /* base   */
  --moon-lo: #1a1827;   /* surface */
  --moon-hi: #2a283e;   /* overlay */
  --foam: #e0def4;      /* text   */
  --muted: #6e6a86;     /* muted  */
  --sub: #908caa;       /* subtle */
  --iris: #c4a7e7;
  --pine: #9ccfd8;
  --gold: #f6c177;
  --love: #eb6f92;
  --rose: #ea9a97;
  --foam-line: rgba(224, 222, 244, 0.08);
  --font: 'JetBrains Mono', ui-monospace, 'Cascadia Code', Menlo, Consolas, monospace;
}

[data-theme='dawn'] {
  --moon: #faf4ed;
  --moon-lo: #fffaf3;
  --moon-hi: #f2e9e1;
  --foam: #575279;
  --muted: #9893a5;
  --sub: #797593;
  --iris: #907aa9;
  --pine: #56949f;
  --gold: #ea9d34;
  --love: #b4637a;
  --rose: #d7827e;
  --foam-line: rgba(87, 82, 117, 0.12);
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  height: 100%;
}

body {
  font-family: var(--font);
  font-size: 14px;
  line-height: 1.55;
  color: var(--foam);
  background:
    radial-gradient(1200px 700px at 70% -10%, color-mix(in oklab, var(--pine) 14%, transparent), transparent 60%),
    radial-gradient(900px 600px at 10% 110%, color-mix(in oklab, var(--iris) 12%, transparent), transparent 55%),
    var(--moon-lo);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  -webkit-font-smoothing: antialiased;
}

/* ── window chrome ─────────────────────────────── */

.window {
  width: min(920px, 100%);
  height: min(780px, 92dvh);
  display: flex;
  flex-direction: column;
  background: var(--moon);
  border: 1px solid var(--foam-line);
  border-radius: 12px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.45), 0 2px 8px rgba(0, 0, 0, 0.3);
  overflow: hidden;
}

.titlebar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 14px;
  background: var(--moon-hi);
  border-bottom: 1px solid var(--foam-line);
  user-select: none;
}

.dots { display: flex; gap: 7px; }

.dot {
  width: 11px;
  height: 11px;
  border-radius: 50%;
}
.dot-close { background: var(--love); }
.dot-min   { background: var(--gold); }
.dot-max   { background: var(--pine); }

.title {
  flex: 1;
  text-align: center;
  font-size: 12px;
  color: var(--sub);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.theme-btn {
  font: inherit;
  font-size: 14px;
  line-height: 1;
  color: var(--sub);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 4px 7px;
  cursor: pointer;
}
.theme-btn:hover, .theme-btn:focus-visible {
  color: var(--foam);
  border-color: var(--foam-line);
  outline: none;
}

/* ── scrollback ────────────────────────────────── */

.scroll {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 18px 18px 8px;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: var(--moon-hi) transparent;
}

.line { white-space: pre-wrap; overflow-wrap: anywhere; }
.line.cmd-echo { color: var(--foam); }
.line.cmd-echo .prompt-user { color: var(--pine); }
.line.cmd-echo .prompt-path { color: var(--gold); }
.line.cmd-echo .prompt-sym  { color: var(--muted); }

.block { margin: 6px 0 14px; }
.block + .block { margin-top: -4px; }

h1.whoami {
  margin: 2px 0 0;
  font-size: 22px;
  letter-spacing: 0.5px;
  color: var(--iris);
}
h1.whoami small {
  display: block;
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--pine);
  margin-top: 2px;
}

.section-title {
  color: var(--gold);
  font-weight: 700;
  margin: 14px 0 4px;
}
.section-title::before { content: '# '; color: var(--muted); font-weight: 400; }

.muted { color: var(--muted); }
.sub   { color: var(--sub); }

a { color: var(--pine); text-decoration: none; }
a:hover, a:focus-visible { text-decoration: underline; outline: none; }

.tag {
  display: inline-block;
  font-size: 11.5px;
  padding: 1px 8px;
  margin: 2px 4px 2px 0;
  border: 1px solid color-mix(in oklab, var(--iris) 45%, transparent);
  border-radius: 20px;
  color: var(--iris);
  background: color-mix(in oklab, var(--iris) 10%, transparent);
}

.row { display: flex; gap: 10px; padding: 3px 0; flex-wrap: wrap; }
.row .k { color: var(--pine); min-width: 120px; }
.row .v { color: var(--foam); }

/* experience */
.job { margin: 10px 0; padding-left: 14px; border-left: 2px solid color-mix(in oklab, var(--pine) 40%, transparent); }
.job .org { color: var(--gold); font-weight: 700; }
.job .title { color: var(--iris); text-align: left; font-size: 14px; }
.job .title::before { content: '— '; color: var(--muted); }
.job ul { margin: 4px 0 0; padding-left: 18px; }
.job li { margin: 2px 0; }
.job li::marker { color: var(--muted); }

/* projects */
.proj {
  display: block;
  margin: 8px 0;
  padding: 10px 12px;
  border: 1px solid var(--foam-line);
  border-radius: 8px;
  background: color-mix(in oklab, var(--moon-hi) 55%, transparent);
  color: inherit;
}
.proj { cursor: pointer; }
.proj:hover, .proj:focus-visible {
  border-color: color-mix(in oklab, var(--pine) 55%, transparent);
  text-decoration: none;
  outline: none;
}
.proj .name { color: var(--pine); font-weight: 700; }
.proj .name::before { content: '▸ '; color: var(--muted); }
.proj .year { float: right; color: var(--muted); font-size: 12px; }
.proj .desc { color: var(--sub); margin: 2px 0 4px; }
.proj .live { color: var(--gold); }

/* help table */
.help-row {
  display: flex;
  gap: 14px;
  padding: 3px 6px;
  border-radius: 5px;
  cursor: pointer;
}
.help-row:hover { background: var(--moon-hi); }
.help-row .cmd { color: var(--pine); min-width: 130px; }
.help-row .dsc { color: var(--sub); }

.cmdlink {
  cursor: pointer;
  border-bottom: 1px dashed color-mix(in oklab, var(--pine) 60%, transparent);
}
.cmdlink:hover { color: var(--gold); }

.copy-btn {
  font: inherit;
  font-size: 11px;
  cursor: pointer;
  padding: 1px 8px;
  border-radius: 6px;
  border: 1px solid var(--foam-line);
  background: transparent;
  color: var(--muted);
}
.copy-btn:hover, .copy-btn:focus-visible { color: var(--foam); border-color: color-mix(in oklab, var(--pine) 60%, transparent); }
.copy-btn:active { background: var(--moon); }

pre.ascii {
  color: var(--pine);
  font-size: 12px;
  line-height: 1.2;
  margin: 0 0 10px;
  overflow-x: auto;
}

.error { color: var(--love); }

/* ── chips (quick commands) ────────────────────── */

.chips {
  flex: none;
  display: flex;
  gap: 8px;
  padding: 10px 14px;
  overflow-x: auto;
  border-top: 1px solid var(--foam-line);
  background: color-mix(in oklab, var(--moon-hi) 45%, transparent);
  scrollbar-width: none;
}
.chips::-webkit-scrollbar { display: none; }

.chip {
  flex: none;
  font: inherit;
  font-size: 13px;
  padding: 7px 14px;
  border-radius: 20px;
  border: 1px solid var(--foam-line);
  background: var(--moon-hi);
  color: var(--sub);
  cursor: pointer;
  transition: color .15s, border-color .15s, background .15s;
}
.chip::before { content: '❯ '; color: var(--muted); }
.chip:hover, .chip:focus-visible {
  color: var(--foam);
  border-color: color-mix(in oklab, var(--pine) 55%, transparent);
  outline: none;
}
.chip:active { background: var(--moon); }
.chip.primary { border-color: color-mix(in oklab, var(--gold) 55%, transparent); color: var(--gold); }

/* ── input ─────────────────────────────────────── */

.prompt-row {
  flex: none;
  position: relative;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--foam-line);
  background: var(--moon);
}

.prompt { flex: none; white-space: nowrap; }
.prompt-user { color: var(--pine); }
.prompt-path { color: var(--gold); }
.prompt-sym  { color: var(--muted); }

#cmdInput {
  flex: 1;
  min-width: 0;
  font: inherit;
  font-size: 16px; /* prevents iOS zoom on focus */
  color: var(--foam);
  background: transparent;
  border: none;
  caret-color: var(--iris);
}
#cmdInput:focus { outline: none; }
#cmdInput::placeholder { color: var(--muted); opacity: .7; }

/* live prompt caret when input is empty and unfocused */
.prompt-row.typing #cmdInput { caret-color: var(--foam); }

/* ── autocomplete suggestions ───────────────────── */

.suggestions {
  position: absolute;
  left: 10px;
  right: 10px;
  bottom: calc(100% + 8px);
  max-height: min(280px, 42dvh);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 4px;
  background: var(--moon-lo);
  border: 1px solid var(--foam-line);
  border-radius: 10px;
  box-shadow: 0 -14px 40px rgba(0, 0, 0, 0.4);
  z-index: 10;
  scrollbar-width: thin;
  scrollbar-color: var(--moon-hi) transparent;
}

.sug {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 7px 10px;
  border-radius: 6px;
  cursor: pointer;
}
.sug:hover { background: color-mix(in oklab, var(--moon-hi) 70%, transparent); }
.sug.active { background: var(--moon-hi); }
.sug-cmd { color: var(--pine); white-space: nowrap; }
.sug-cmd::before { content: '❯ '; color: var(--muted); }
.sug-desc {
  flex: 1;
  min-width: 0;
  font-size: 12px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── mobile ────────────────────────────────────── */

@media (max-width: 640px) {
  body { padding: 0; align-items: stretch; }

  .window {
    width: 100%;
    height: 100dvh;
    border-radius: 0;
    border: none;
    box-shadow: none;
  }

  .scroll { padding: 14px 12px 6px; }
  h1.whoami { font-size: 19px; }
  .row { flex-direction: column; gap: 0; padding: 5px 0; }
  .row .k { min-width: 0; font-size: 11.5px; text-transform: uppercase; letter-spacing: 1px; }
  .row .v { overflow-wrap: anywhere; }
  .help-row { flex-direction: column; gap: 0; padding: 6px; }
  .help-row .cmd { min-width: 0; }
  .proj .year { float: none; display: block; }

  .chips { padding: 8px 10px; }
  .chip { padding: 9px 14px; font-size: 13.5px; }

  .prompt-row { padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); }
  .prompt .prompt-path, .prompt .prompt-sym { display: none; }

  .suggestions { left: 6px; right: 6px; max-height: 50dvh; }
  .sug { flex-direction: column; gap: 0; padding: 9px 10px; }
  .sug-desc { white-space: normal; }
}

@media (prefers-reduced-motion: reduce) {
  .scroll { scroll-behavior: auto; }
  * { transition: none !important; animation: none !important; }
}
