/* =============================================================
   FLVCRTS Tools — Apple Liquid Glass Design System
   ============================================================= */

@font-face {
  font-family: 'CaslonAntique';
  src: url('fonts/CaslonAntique-BoldItalic.ttf') format('truetype');
  font-weight: 700; font-style: italic; font-display: swap;
}
@font-face {
  font-family: 'CaslonAntique';
  src: url('fonts/CaslonAntique-Bold.ttf') format('truetype');
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'CaslonAntique';
  src: url('fonts/CaslonAntique.ttf') format('truetype');
  font-weight: 400; font-style: normal; font-display: swap;
}

/* ── Design Tokens ────────────────────────────────────────── */
:root {
  /* Background mesh */
  --bg-base:  #07080e;
  --bg-mesh1: rgba(107,107,79,  .13);
  --bg-mesh2: rgba(60, 80, 140, .10);
  --bg-mesh3: rgba(90, 60, 110, .08);

  /* Text hierarchy */
  --t1:  rgba(255,255,255,.90);
  --t2:  rgba(255,255,255,.52);
  --t3:  rgba(255,255,255,.28);
  --t4:  rgba(255,255,255,.16);

  /* Accent */
  --accent:    #9e9e78;
  --accent-lo: rgba(158,158,120,.14);

  /* Glass material — light source from top-left */
  --g-fill:   rgba(255,255,255,.060);
  --g-fill-h: rgba(255,255,255,.096);
  --g-fill-p: rgba(255,255,255,.038);  /* pressed */
  --g-rim:    rgba(255,255,255,.130);  /* border */
  --g-rim-hi: rgba(255,255,255,.220);
  --g-top:    rgba(255,255,255,.320);  /* specular top-edge */
  --g-div:    rgba(255,255,255,.080);  /* dividers */
  --g-blur:   blur(48px) saturate(1.9) brightness(1.04);
  --g-blur-sm:blur(24px) saturate(1.5);

  /* Shadows */
  --sh-glass:
    0 12px 48px rgba(0,0,0,.28),
    0  3px 10px rgba(0,0,0,.14),
    inset 0  1px 0 var(--g-top),
    inset 0 -1px 0 rgba(255,255,255,.04);
  --sh-card:
    0  6px 24px rgba(0,0,0,.20),
    0  2px  6px rgba(0,0,0,.10),
    inset 0 1px 0 rgba(255,255,255,.22);
  --sh-btn:
    0  2px  8px rgba(0,0,0,.22),
    0  1px  2px rgba(0,0,0,.12),
    inset 0 1px 0 rgba(255,255,255,.5);
  --sh-inset:
    inset 0 1px 4px rgba(0,0,0,.18),
    inset 0 0 0 1px rgba(0,0,0,.06);

  /* Radii */
  --r-pill: 999px;
  --r-2xl:  28px;
  --r-xl:   22px;
  --r-lg:   16px;
  --r-md:   12px;
  --r-sm:    8px;

  /* Spacing */
  --hdr-h:    68px;  /* space reserved at top for floating pill */
  --sidebar-w: 210px;

  /* Fonts */
  --serif: 'CaslonAntique', Georgia, serif;
  --sans:  'DM Sans', system-ui, sans-serif;
  --mono:  'Space Mono', monospace;

  /* Motion reactive specular */
  --mx: 30%; --my: 25%;
}

/* ── Reset ─────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-font-smoothing: antialiased; color-scheme: dark; }
body {
  background: var(--bg-base);
  color: var(--t1);
  font-family: var(--sans);
  font-size: .9375rem;
  line-height: 1.55;
  height: 100dvh;
  overflow: hidden;
}
img   { display: block; max-width: 100%; }
a     { color: inherit; text-decoration: none; }
ul    { list-style: none; }
button { font: inherit; color: inherit; background: none; border: none; cursor: pointer; padding: 0; }
input, select, textarea { font: inherit; color: inherit; }
input:focus, select:focus, textarea:focus { outline: none; }
input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; }
input[type=range] { -webkit-appearance: none; appearance: none; }
[hidden] { display: none !important; }

/* ── Mesh background (fixed, behind everything) ─────────────── */
body::before {
  content: '';
  position: fixed; inset: 0; z-index: -1;
  background:
    radial-gradient(ellipse 1100px 800px at  8% 30%, var(--bg-mesh1), transparent),
    radial-gradient(ellipse  900px 700px at 92%  8%, var(--bg-mesh2), transparent),
    radial-gradient(ellipse  700px 600px at 52% 92%, var(--bg-mesh3), transparent),
    var(--bg-base);
}

/* ════════════════════════════════════════════════════════════
   GLASS UTILITY (shared specular layer via ::before)
   Applied via JS-generated HTML — position:relative + overflow:hidden needed
   ════════════════════════════════════════════════════════════ */
.glass {
  position: relative;
  background: var(--g-fill);
  backdrop-filter: var(--g-blur);
  -webkit-backdrop-filter: var(--g-blur);
  border: 1px solid var(--g-rim);
  box-shadow: var(--sh-glass);
  overflow: hidden;
}
.glass::before {
  content: '';
  position: absolute; inset: 0; z-index: 0;
  border-radius: inherit;
  background:
    radial-gradient(
      ellipse 600px 400px at var(--mx) var(--my),
      rgba(255,255,255,.055), transparent 60%
    ),
    linear-gradient(
      145deg,
      rgba(255,255,255,.11) 0%,
      rgba(255,255,255,.04) 35%,
      transparent 65%
    );
  pointer-events: none;
}
.glass > * { position: relative; z-index: 1; }

/* ════════════════════════════════════════════════════════════
   HEADER — floating glass pill
   ════════════════════════════════════════════════════════════ */
.th {
  position: fixed;
  top: 10px;
  left: 50%;
  transform: translateX(-50%);
  width: min(calc(100% - 20px), 1040px);
  height: 46px;
  border-radius: var(--r-pill);
  z-index: 900;

  background: rgba(12,13,20,.55);
  backdrop-filter: blur(48px) saturate(2.0) brightness(1.06);
  -webkit-backdrop-filter: blur(48px) saturate(2.0) brightness(1.06);
  border: 1px solid rgba(255,255,255,.13);
  box-shadow:
    0 8px 40px rgba(0,0,0,.32),
    0 2px  8px rgba(0,0,0,.16),
    inset 0  1px 0 rgba(255,255,255,.28),
    inset 0 -1px 0 rgba(255,255,255,.04);

  display: flex;
  align-items: center;
  padding: 0 14px;
  gap: 0;
}

.th::before {
  content: '';
  position: absolute; inset: 0;
  border-radius: var(--r-pill);
  background: linear-gradient(135deg, rgba(255,255,255,.09) 0%, transparent 55%);
  pointer-events: none;
}

.th__back {
  display: flex; align-items: center; gap: .4rem;
  font-family: var(--mono); font-size: .62rem;
  text-transform: uppercase; letter-spacing: .07em;
  color: var(--t3); padding: 0 10px;
  transition: color .18s;
  white-space: nowrap; flex-shrink: 0;
}
.th__back:hover { color: var(--t1); }
.th__back svg { flex-shrink: 0; }
.th__back span { display: inline; }

.th__logo {
  position: absolute; left: 50%; transform: translateX(-50%);
  font-family: var(--serif); font-weight: 700; font-style: italic;
  font-size: 1.1rem; color: var(--t1); letter-spacing: .02em;
  white-space: nowrap; pointer-events: none;
}
.th__label {
  font-family: var(--mono); font-weight: 400; font-style: normal;
  font-size: .58rem; text-transform: uppercase; letter-spacing: .1em;
  color: var(--accent); margin-left: .5rem; vertical-align: middle;
}

.th__right {
  margin-left: auto; display: flex; align-items: center; flex-shrink: 0;
}
.th__badge {
  font-family: var(--mono); font-size: .58rem; text-transform: uppercase;
  letter-spacing: .08em; color: var(--t3);
  border: 1px solid rgba(255,255,255,.10); border-radius: 4px;
  padding: .12rem .42rem;
}

/* ════════════════════════════════════════════════════════════
   APP SHELL — true 100dvh, no outer scroll
   ════════════════════════════════════════════════════════════ */
#app {
  position: fixed;
  inset: 0;
  padding-top: var(--hdr-h);
  overflow: hidden;
}

/* Scrollable inner when needed */
.scroll-inner {
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  scrollbar-color: rgba(255,255,255,.12) transparent;
}
.scroll-inner::-webkit-scrollbar { width: 4px; }
.scroll-inner::-webkit-scrollbar-thumb { background: rgba(255,255,255,.12); border-radius: 2px; }

/* ════════════════════════════════════════════════════════════
   HOME — App Launcher
   ════════════════════════════════════════════════════════════ */
.home {
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.5rem 3rem;
  gap: 2.5rem;
}

.home-brand {
  text-align: center;
}
.home-brand-logo {
  font-family: var(--serif); font-weight: 700; font-style: italic;
  font-size: clamp(2rem, 5vw, 3rem);
  color: var(--t1); letter-spacing: .02em; display: block;
  margin-bottom: .4rem;
}
.home-brand-sub {
  font-family: var(--mono); font-size: .68rem;
  text-transform: uppercase; letter-spacing: .14em; color: var(--t3);
}

.home-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  width: 100%; max-width: 680px;
}

.tool-card {
  background: var(--g-fill);
  border: 1px solid var(--g-rim);
  border-radius: var(--r-xl);
  padding: 22px 20px;
  cursor: pointer;
  position: relative; overflow: hidden;
  transition: background .18s, box-shadow .18s, transform .18s;
  text-align: left;
}
.tool-card::before {
  content: '';
  position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(140deg, rgba(255,255,255,.10) 0%, transparent 55%);
  opacity: 0; transition: opacity .2s; pointer-events: none;
}
.tool-card:hover {
  background: var(--g-fill-h);
  box-shadow: var(--sh-card);
  transform: translateY(-1px) scale(1.005);
}
.tool-card:hover::before { opacity: 1; }
.tool-card:active { transform: scale(.99); background: var(--g-fill-p); }

.tool-card__icon {
  width: 38px; height: 38px;
  background: var(--g-fill-h);
  border: 1px solid var(--g-rim);
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent); margin-bottom: 14px;
  box-shadow: var(--sh-card);
}
.tool-card__icon svg { width: 18px; height: 18px; }
.tool-card__cat {
  font-family: var(--mono); font-size: .58rem;
  text-transform: uppercase; letter-spacing: .10em;
  color: var(--accent); margin-bottom: 4px; display: block;
}
.tool-card__name {
  font-size: .925rem; font-weight: 600; color: var(--t1);
  line-height: 1.25; margin-bottom: 6px;
}
.tool-card__desc {
  font-size: .78rem; color: var(--t2); line-height: 1.5;
}
.tool-card__arrow {
  position: absolute; top: 14px; right: 16px;
  font-size: .75rem; color: var(--t3);
  opacity: 0; transform: translate(-2px, 2px);
  transition: opacity .18s, transform .18s;
}
.tool-card:hover .tool-card__arrow { opacity: 1; transform: translate(0,0); }

/* ════════════════════════════════════════════════════════════
   TOOL VIEW — Sidebar + Content
   ════════════════════════════════════════════════════════════ */
.tool-view {
  display: flex;
  height: 100%;
  overflow: hidden;
}

/* Sidebar */
.t-sidebar {
  width: var(--sidebar-w);
  flex-shrink: 0;
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 16px 10px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  border-right: 1px solid var(--g-div);
  background: rgba(255,255,255,.025);
  scrollbar-width: none;
}
.t-sidebar::-webkit-scrollbar { display: none; }

.t-sidebar__back {
  display: flex; align-items: center; gap: .45rem;
  font-family: var(--mono); font-size: .62rem;
  text-transform: uppercase; letter-spacing: .07em;
  color: var(--t3); padding: 8px 10px; border-radius: var(--r-md);
  transition: color .15s, background .15s; margin-bottom: 8px;
  white-space: nowrap;
}
.t-sidebar__back svg { width: 11px; height: 11px; flex-shrink: 0; }
.t-sidebar__back:hover { color: var(--t1); background: var(--g-fill); }

.t-sidebar__section {
  font-family: var(--mono); font-size: .56rem;
  text-transform: uppercase; letter-spacing: .12em;
  color: var(--t4); padding: 0 10px; margin: 8px 0 4px;
}

.t-sidebar__link {
  display: flex; align-items: center; gap: 9px;
  width: 100%; padding: 9px 10px; border-radius: var(--r-md);
  font-size: .84rem; font-weight: 450; color: var(--t2);
  text-align: left; transition: all .15s;
}
.t-sidebar__link:hover { color: var(--t1); background: var(--g-fill); }
.t-sidebar__link.is-active {
  color: var(--t1);
  background: var(--g-fill-h);
  box-shadow:
    0 2px 8px rgba(0,0,0,.2),
    inset 0 1px 0 rgba(255,255,255,.18),
    inset 0 0 0 1px rgba(255,255,255,.09);
}
.t-sidebar__link-icon {
  width: 17px; height: 17px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent);
}
.t-sidebar__link-icon svg { width: 15px; height: 15px; }

/* Content area */
.t-content {
  flex: 1; min-width: 0;
  height: 100%; overflow-y: auto; overflow-x: hidden;
  padding: 32px 32px 48px;
  scrollbar-width: thin;
  scrollbar-color: rgba(255,255,255,.10) transparent;
}
.t-content::-webkit-scrollbar { width: 4px; }
.t-content::-webkit-scrollbar-thumb { background: rgba(255,255,255,.10); border-radius: 2px; }

/* Tool header */
.t-head { margin-bottom: 28px; }
.t-head__eyebrow {
  display: block;
  font-family: var(--mono); font-size: .62rem;
  text-transform: uppercase; letter-spacing: .11em;
  color: var(--accent); margin-bottom: .55rem;
}
.t-head__title {
  font-family: var(--serif); font-weight: 700; font-style: italic;
  font-size: 1.9rem; color: var(--t1); line-height: 1.08;
  letter-spacing: .01em; margin-bottom: .45rem;
}
.t-head__sub { font-size: .855rem; color: var(--t2); line-height: 1.6; }

/* Rule */
.t-rule { border: none; border-top: 1px solid var(--g-div); margin: 20px 0; }

/* ════════════════════════════════════════════════════════════
   SHARED CONTROLS — Glass design language
   ════════════════════════════════════════════════════════════ */

.ctrl-field { display: flex; flex-direction: column; gap: .45rem; }
.ctrl-group { display: flex; flex-direction: column; gap: 18px; }

.ctrl-label {
  font-family: var(--mono); font-size: .6rem;
  text-transform: uppercase; letter-spacing: .09em; color: var(--t3);
}
.ctrl-label-note {
  font-family: var(--sans); text-transform: none;
  letter-spacing: 0; font-size: .68rem; color: var(--t3);
}
.ctrl-row { display: flex; align-items: center; justify-content: space-between; }
.ctrl-val { font-family: var(--mono); font-size: .72rem; color: var(--t1); }

/* Segmented control (like iOS) */
.ctrl-tabs {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.07);
  border-radius: var(--r-md);
  padding: 3px; display: flex; gap: 2px;
  box-shadow: var(--sh-inset);
}
.ctrl-tab {
  flex: 1; padding: 7px 10px; border-radius: 9px;
  font-family: var(--mono); font-size: .65rem;
  text-transform: uppercase; letter-spacing: .06em; color: var(--t3);
  transition: all .15s; position: relative; overflow: hidden;
}
.ctrl-tab:hover { color: var(--t2); }
.ctrl-tab.is-active {
  background: var(--g-fill-h);
  color: var(--t1);
  box-shadow:
    0 1px 5px rgba(0,0,0,.22),
    inset 0 1px 0 rgba(255,255,255,.22),
    inset 0 0 0 1px rgba(255,255,255,.08);
}

/* Slider */
.ctrl-slider {
  width: 100%; height: 5px; border-radius: var(--r-pill);
  background: rgba(255,255,255,.12); cursor: pointer;
  box-shadow: var(--sh-inset);
}
.ctrl-slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 20px; height: 20px; border-radius: 50%;
  background: rgba(255,255,255,.96);
  box-shadow: 0 2px 8px rgba(0,0,0,.28), 0 0 0 1px rgba(255,255,255,.12);
  cursor: pointer;
}
.ctrl-slider::-moz-range-thumb {
  width: 20px; height: 20px; border-radius: 50%;
  background: rgba(255,255,255,.96); border: none;
  box-shadow: 0 2px 8px rgba(0,0,0,.28);
}

/* Input */
.ctrl-input {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.09);
  border-radius: var(--r-md); padding: .5rem .75rem;
  color: var(--t1); font-size: .85rem; width: 100%;
  box-shadow: var(--sh-inset);
  transition: border-color .15s, background .15s;
}
.ctrl-input:focus {
  border-color: rgba(255,255,255,.2);
  background: rgba(255,255,255,.07);
}
.ctrl-input::placeholder { color: var(--t3); }

.ctrl-dims { display: flex; align-items: center; gap: .4rem; }
.ctrl-dim-sep { color: var(--t3); flex-shrink: 0; font-size: .8rem; }

/* Checkbox */
.ctrl-check {
  display: flex; align-items: center; gap: .5rem;
  font-size: .8rem; color: var(--t2); cursor: pointer;
}
.ctrl-check input[type=checkbox] {
  width: 15px; height: 15px;
  border: 1px solid rgba(255,255,255,.15); border-radius: 4px;
  background: rgba(255,255,255,.04); cursor: pointer;
  appearance: none; -webkit-appearance: none; flex-shrink: 0;
  display: grid; place-items: center;
  transition: background .15s, border-color .15s;
}
.ctrl-check input[type=checkbox]:checked {
  background: var(--accent); border-color: var(--accent);
}
.ctrl-check input[type=checkbox]:checked::after {
  content: ''; display: block; width: 4px; height: 7px;
  border: 1.5px solid rgba(0,0,0,.7); border-top: none; border-left: none;
  transform: rotate(45deg) translateY(-1px);
}

/* Buttons */
.btn-primary {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  background: rgba(255,255,255,.92); color: #07080e;
  font-family: var(--mono); font-size: .68rem;
  text-transform: uppercase; letter-spacing: .09em; font-weight: 700;
  padding: .7rem 1.25rem; border-radius: var(--r-pill);
  box-shadow: var(--sh-btn); width: 100%;
  transition: opacity .15s, transform .1s;
}
.btn-primary:hover { opacity: .88; }
.btn-primary:active { transform: scale(.98); opacity: .82; }
.btn-primary:disabled { opacity: .28; cursor: not-allowed; }

.btn-secondary {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  background: var(--g-fill); border: 1px solid var(--g-rim);
  font-family: var(--mono); font-size: .68rem;
  text-transform: uppercase; letter-spacing: .09em;
  color: var(--t1); padding: .62rem 1.1rem; border-radius: var(--r-pill);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18);
  transition: background .15s;
}
.btn-secondary:hover { background: var(--g-fill-h); }

.btn-ghost {
  display: inline-flex; align-items: center; gap: .4rem;
  font-size: .78rem; color: var(--t3); transition: color .15s;
}
.btn-ghost:hover { color: var(--t1); }

/* ════════════════════════════════════════════════════════════
   IMAGE PROCESSOR
   ════════════════════════════════════════════════════════════ */
.img-tool {
  display: grid;
  grid-template-columns: 1fr 260px;
  gap: 14px;
  align-items: start;
}

.img-drop {
  background: rgba(255,255,255,.03);
  border: 1.5px dashed rgba(255,255,255,.12);
  border-radius: var(--r-xl);
  min-height: 280px;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  cursor: pointer;
  transition: background .18s, border-color .18s;
  position: relative; overflow: hidden;
}
.img-drop:hover, .img-drop.is-over {
  background: rgba(255,255,255,.055);
  border-color: rgba(255,255,255,.24);
}
.img-drop input[type=file] { display: none; }
.img-drop.has-image { cursor: default; align-items: stretch; justify-content: flex-start; }
.img-drop.has-image .img-drop__inner { display: none; }

.img-drop__inner {
  display: flex; flex-direction: column;
  align-items: center; text-align: center;
  gap: .6rem; padding: 2.5rem;
  pointer-events: none;
}
.img-drop__icon {
  width: 44px; height: 44px;
  background: var(--g-fill);
  border: 1px solid var(--g-rim); border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent); margin-bottom: 4px;
  box-shadow: var(--sh-card);
}
.img-drop__title { font-size: .875rem; font-weight: 600; color: var(--t1); }
.img-drop__hint  { font-size: .78rem; color: var(--t3); }
.img-drop__formats {
  font-family: var(--mono); font-size: .6rem; color: var(--t4);
  text-transform: uppercase; letter-spacing: .08em;
}

.img-preview-wrap {
  flex: 1; display: flex; align-items: center; justify-content: center;
  padding: 1.25rem; min-height: 200px;
}
.img-preview-wrap img { max-width: 100%; max-height: 280px; border-radius: 8px; object-fit: contain; }

.img-meta {
  border-top: 1px solid var(--g-div);
  padding: .875rem 1.125rem;
  display: flex; justify-content: space-between; align-items: center;
}
.img-meta-info { display: flex; flex-direction: column; gap: .08rem; }
.img-meta-name { font-size: .78rem; font-weight: 500; color: var(--t1); }
.img-meta-dims { font-family: var(--mono); font-size: .66rem; color: var(--t2); }
.img-meta-size { font-family: var(--mono); font-size: .75rem; color: var(--accent); font-weight: 700; }

.img-controls { display: flex; flex-direction: column; gap: 14px; }

.output-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.output-stat {
  background: rgba(255,255,255,.03);
  border: 1px solid var(--g-div); border-radius: var(--r-md);
  padding: .65rem .85rem;
}
.output-stat__label { font-family: var(--mono); font-size: .56rem; text-transform: uppercase; letter-spacing: .08em; color: var(--t3); margin-bottom: 2px; display: block; }
.output-stat__val { font-family: var(--mono); font-size: .82rem; color: var(--t1); }
.output-stat__val.is-small { color: #6dbf8a; }
.output-stat__val.is-large { color: #c97a7a; }

/* ════════════════════════════════════════════════════════════
   ASPECT RATIO CHART
   ════════════════════════════════════════════════════════════ */
.ratio-filters {
  display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 20px;
}
.ratio-filter {
  font-family: var(--mono); font-size: .62rem;
  text-transform: uppercase; letter-spacing: .08em;
  padding: .38rem .88rem; border-radius: var(--r-pill);
  border: 1px solid var(--g-div); color: var(--t3);
  background: var(--g-fill-p);
  transition: all .15s; cursor: pointer;
}
.ratio-filter:hover { color: var(--t1); border-color: var(--g-rim); background: var(--g-fill); }
.ratio-filter.is-active {
  background: rgba(255,255,255,.88); color: #07080e;
  border-color: transparent;
  box-shadow: 0 2px 8px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.8);
}

.ratio-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(148px, 1fr));
  gap: 8px;
}

.ratio-card {
  background: var(--g-fill-p);
  border: 1px solid var(--g-div);
  border-radius: var(--r-lg);
  padding: 14px;
  cursor: pointer; position: relative;
  transition: background .15s, box-shadow .15s, transform .15s;
  text-align: left;
}
.ratio-card:hover {
  background: var(--g-fill);
  box-shadow: var(--sh-card);
  transform: translateY(-1px);
}
.ratio-card.copied::after {
  content: '✓ Copied';
  position: absolute; top: .5rem; right: .6rem;
  font-family: var(--mono); font-size: .58rem; color: #6dbf8a;
}
.ratio-vis {
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.12); border-radius: 3px;
}
.ratio-num { font-family: var(--mono); font-weight: 700; font-size: .8rem; color: var(--t1); margin-top: 8px; }
.ratio-name { font-size: .76rem; font-weight: 600; color: var(--t1); margin-top: 2px; }
.ratio-desc { font-size: .68rem; color: var(--t3); line-height: 1.4; margin-top: 3px; }
.ratio-tag { font-family: var(--mono); font-size: .55rem; text-transform: uppercase; letter-spacing: .07em; color: var(--accent); }

/* ════════════════════════════════════════════════════════════
   LETTERBOX CREATOR
   ════════════════════════════════════════════════════════════ */
.lb-tool { display: grid; grid-template-columns: 1fr 260px; gap: 14px; align-items: start; }

.lb-preview {
  background: rgba(255,255,255,.025);
  border: 1px solid var(--g-div); border-radius: var(--r-xl);
  min-height: 260px;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.lb-canvas-wrap { width: 100%; }
.lb-canvas-wrap canvas { display: block; width: 100%; height: auto; border-radius: var(--r-xl); }
.lb-placeholder { display: flex; flex-direction: column; align-items: center; gap: .65rem; padding: 2.5rem; color: var(--t3); text-align: center; }
.lb-placeholder svg { color: var(--t4); }
.lb-placeholder p { font-size: .82rem; }

.lb-drop {
  background: rgba(255,255,255,.03);
  border: 1.5px dashed rgba(255,255,255,.12);
  border-radius: var(--r-md); padding: 1.1rem;
  text-align: center; cursor: pointer;
  font-size: .82rem; color: var(--t3);
  transition: all .18s;
}
.lb-drop:hover, .lb-drop.is-over {
  background: rgba(255,255,255,.055);
  border-color: rgba(255,255,255,.24); color: var(--t1);
}
.lb-drop input { display: none; }
.lb-controls { display: flex; flex-direction: column; gap: 14px; }

.ratio-select {
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.09); border-radius: var(--r-md);
  padding: .5rem .75rem; color: var(--t1); font-size: .85rem; width: 100%;
  appearance: none; -webkit-appearance: none; cursor: pointer;
  box-shadow: var(--sh-inset);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5L6 7.5l3-3' stroke='rgba(255,255,255,.35)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right .75rem center;
  padding-right: 2.25rem;
}
.ratio-select option { background: #151820; }

.color-pick-row { display: flex; align-items: center; gap: .75rem; }
.color-swatch-btn {
  width: 34px; height: 34px; border-radius: var(--r-sm);
  border: 1px solid rgba(255,255,255,.12); cursor: pointer;
  flex-shrink: 0; overflow: hidden; position: relative;
}
.color-swatch-btn input[type=color] {
  position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; height: 100%;
}

/* ════════════════════════════════════════════════════════════
   COLOR PICKER
   ════════════════════════════════════════════════════════════ */
.color-tool { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: start; }
.color-picker-panel { display: flex; flex-direction: column; gap: 14px; }

.color-preview-swatch {
  width: 100%; height: 110px; border-radius: var(--r-lg);
  border: 1px solid var(--g-div); position: relative;
  overflow: hidden; cursor: pointer;
  transition: filter .15s;
  box-shadow: var(--sh-card);
}
.color-preview-swatch::after {
  content: '';
  position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.18) 0%, transparent 50%);
  pointer-events: none;
}
.color-preview-swatch input[type=color] {
  position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; height: 100%;
}
.color-preview-swatch__hex {
  position: absolute; bottom: .65rem; left: 50%; transform: translateX(-50%);
  font-family: var(--mono); font-size: .78rem; font-weight: 700;
  padding: .22rem .55rem; border-radius: var(--r-sm);
  background: rgba(0,0,0,.38); color: white; pointer-events: none;
  white-space: nowrap; backdrop-filter: blur(8px);
}

.color-inputs { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 6px; }
.color-input-wrap { display: flex; flex-direction: column; gap: .28rem; }
.color-input-label { font-family: var(--mono); font-size: .56rem; text-transform: uppercase; letter-spacing: .08em; color: var(--t3); }
.color-input-field {
  background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.09);
  border-radius: var(--r-sm); padding: .42rem .55rem;
  color: var(--t1); font-family: var(--mono); font-size: .78rem;
  width: 100%; text-align: center; box-shadow: var(--sh-inset);
  transition: border-color .15s, background .15s;
}
.color-input-field:focus {
  border-color: rgba(255,255,255,.2); background: rgba(255,255,255,.07);
}

/* HSL sliders */
.hue-slider, .sat-slider, .lit-slider {
  width: 100%; height: 16px; border-radius: var(--r-pill); cursor: pointer;
  box-shadow: 0 1px 4px rgba(0,0,0,.2), inset 0 0 0 1px rgba(0,0,0,.1);
}
.hue-slider {
  background: linear-gradient(to right,
    hsl(0,100%,50%), hsl(36,100%,50%), hsl(72,100%,50%), hsl(108,100%,50%),
    hsl(144,100%,50%), hsl(180,100%,50%), hsl(216,100%,50%), hsl(252,100%,50%),
    hsl(288,100%,50%), hsl(324,100%,50%), hsl(360,100%,50%)
  );
}
.hue-slider::-webkit-slider-thumb,
.sat-slider::-webkit-slider-thumb,
.lit-slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 22px; height: 22px; border-radius: 50%;
  background: white;
  box-shadow: 0 2px 8px rgba(0,0,0,.35), 0 0 0 2px rgba(255,255,255,.7);
  cursor: pointer;
}
.hue-slider::-moz-range-thumb,
.sat-slider::-moz-range-thumb,
.lit-slider::-moz-range-thumb {
  width: 22px; height: 22px; border-radius: 50%;
  background: white; border: 2px solid rgba(255,255,255,.7);
  box-shadow: 0 2px 8px rgba(0,0,0,.35);
}

/* Palette */
.palette-panel { display: flex; flex-direction: column; gap: 16px; }

.palette-swatches { display: flex; gap: 5px; border-radius: var(--r-lg); overflow: hidden; }
.palette-swatch {
  flex: 1; aspect-ratio: 1/1.85; cursor: pointer;
  position: relative; transition: transform .15s; border-radius: 4px;
  min-height: 80px;
}
.palette-swatch::after {
  content: '';
  position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.18) 0%, transparent 55%);
  pointer-events: none;
}
.palette-swatch:hover { transform: scale(1.04); z-index: 1; }
.palette-swatch__hex {
  position: absolute; bottom: .38rem; left: 50%; transform: translateX(-50%);
  font-family: var(--mono); font-size: .55rem;
  background: rgba(0,0,0,.42); color: white;
  padding: .12rem .38rem; border-radius: 3px;
  white-space: nowrap; pointer-events: none;
  backdrop-filter: blur(4px);
}
.palette-swatch.copied::after { content: '✓'; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); font-size: 1.2rem; color: white; background: none; }

.extract-drop {
  background: rgba(255,255,255,.03);
  border: 1.5px dashed rgba(255,255,255,.12); border-radius: var(--r-md);
  padding: .9rem; text-align: center; cursor: pointer;
  font-size: .8rem; color: var(--t3); transition: all .18s;
}
.extract-drop:hover, .extract-drop.is-over {
  background: rgba(255,255,255,.055);
  border-color: rgba(255,255,255,.24); color: var(--t1);
}
.extract-drop input { display: none; }

.extracted-colors { display: flex; gap: 5px; margin-top: .6rem; }
.extracted-color {
  flex: 1; aspect-ratio: 1; border-radius: 6px; cursor: pointer;
  position: relative; transition: transform .15s; min-height: 38px;
}
.extracted-color::after {
  content: '';
  position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.15) 0%, transparent 55%);
  pointer-events: none;
}
.extracted-color:hover { transform: scale(1.1); z-index: 1; }

/* Palette type tabs — stacked */
#palTypeTabs {
  display: flex; flex-direction: column; gap: 3px;
  background: none; border: none; padding: 0;
}
#palTypeTabs .ctrl-tab {
  text-align: left;
  border: 1px solid var(--g-div);
  background: var(--g-fill-p);
  border-radius: var(--r-md);
}
#palTypeTabs .ctrl-tab.is-active {
  background: var(--g-fill-h);
  border-color: rgba(255,255,255,.14);
}

/* ════════════════════════════════════════════════════════════
   TOAST
   ════════════════════════════════════════════════════════════ */
.toast {
  position: fixed; bottom: 20px; left: 50%;
  transform: translateX(-50%) translateY(10px);
  background: rgba(255,255,255,.92); color: #07080e;
  font-family: var(--mono); font-size: .68rem;
  text-transform: uppercase; letter-spacing: .09em;
  padding: .58rem 1.15rem; border-radius: var(--r-pill);
  opacity: 0; transition: opacity .2s, transform .2s;
  pointer-events: none; z-index: 9001;
  box-shadow: 0 4px 20px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.8);
  white-space: nowrap;
}
.toast.is-visible { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ════════════════════════════════════════════════════════════
   MOBILE
   ════════════════════════════════════════════════════════════ */
@media (max-width: 780px) {
  :root { --hdr-h: 58px; --sidebar-w: 100%; }

  body { overflow-y: auto; height: auto; min-height: 100dvh; }
  #app { position: static; height: auto; overflow: visible; }

  .home { height: auto; min-height: calc(100dvh - var(--hdr-h)); justify-content: flex-start; padding-top: 1.5rem; }
  .home-grid { grid-template-columns: 1fr; max-width: 100%; }

  .tool-view { flex-direction: column; height: auto; overflow: visible; }
  .t-sidebar {
    width: 100%; height: auto; border-right: none;
    border-bottom: 1px solid var(--g-div);
    padding: 8px 10px; flex-direction: row;
    overflow-x: auto; overflow-y: hidden; flex-wrap: nowrap;
    background: rgba(10,12,20,.8);
    backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px);
    position: sticky; top: var(--hdr-h); z-index: 200;
  }
  .t-sidebar__section { display: none; }
  .t-sidebar__back { margin-bottom: 0; margin-right: 8px; }
  .t-sidebar__nav { flex-direction: row; gap: 4px; }
  .t-sidebar__link { white-space: nowrap; padding: 7px 12px; }
  .t-sidebar__link.is-active { border: none; background: rgba(255,255,255,.12); }
  .t-sidebar__link-icon { display: none; }

  .t-content { height: auto; overflow: visible; padding: 20px 16px 40px; }

  .img-tool { grid-template-columns: 1fr; }
  .lb-tool { grid-template-columns: 1fr; }
  .color-tool { grid-template-columns: 1fr; }
  .color-inputs { grid-template-columns: 1fr 1fr 1fr 1fr; }

  .th { width: calc(100% - 16px); top: 8px; }
}

@media (max-width: 480px) {
  .th__back span { display: none; }
  .ratio-grid { grid-template-columns: repeat(2, 1fr); }
  .home-grid { grid-template-columns: 1fr; }
  .color-inputs { grid-template-columns: 1fr 1fr; }
}
