/* The styles of roadmap.html, in a file of their own so the page stays small (tools/page-assets.js). */
@font-face {
  font-family: "Hacked";
  src: url("/fonts/HACKED.woff2?v=c2b61b1d67") format("woff2"), url("/fonts/HACKED.ttf?v=db3080d82f") format("truetype");
  font-display: swap;
}

:root {
  --bg: #050006;
  --void: #09000c;
  --ink: #ffffff;
  --dim: rgba(255,255,255,.8);
  --ghost: rgba(255,255,255,.7);
  --dead: rgba(255,255,255,.58);
  --pink: #ff2492;
  --hot: #ff67bd;
  --soft: #ffd1ee;
  --green: #7dff2b;
  --mint: #caffab;
  --cyan: #00ffd5;
  --violet: #9a3cff;
  --line: rgba(255,36,146,.33);
  --line2: rgba(125,255,43,.34);
  --feature-rainbow: linear-gradient(90deg, #ff2492 0%, #ff4d5f 12%, #ff8a24 24%, #ffe44d 36%, #7dff2b 48%, #33ff99 58%, #00ffd5 68%, #3d7bff 79%, #9a3cff 90%, #d94dff 100%);
  --shadow: 0 0 0 1px rgba(255,36,146,.1), 0 24px 70px rgba(0,0,0,.42), 0 0 54px rgba(255,36,146,.19);
  --cut-sm: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
  --cut: polygon(0 0, calc(100% - 26px) 0, 100% 26px, 100% 100%, 28px 100%, 0 calc(100% - 26px));
  --max: 1260px;
}

@keyframes feature-rainbow-text {
  0% { background-position: 0% 50%; }
  100% { background-position: 300% 50%; }
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  min-height: 100svh;
  color: var(--ink);
  background:
    radial-gradient(circle at 18% -8%, rgba(255,36,146,.28), transparent 32%),
    radial-gradient(circle at 82% 12%, rgba(125,255,43,.11), transparent 24%),
    radial-gradient(circle at 50% 50%, rgba(96,0,90,.22), transparent 62%),
    var(--bg);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  overflow-x: hidden;
}
body::before,
body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
}
body::before {
  z-index: -2;
  background:
    linear-gradient(rgba(255,255,255,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.045) 1px, transparent 1px);
  background-size: 40px 40px;
  mask-image: linear-gradient(to bottom, #000, transparent 88%);
}
body::after {
  z-index: 1000;
  opacity: .11;
  background: linear-gradient(to bottom, rgba(255,255,255,.18), rgba(255,255,255,.18) 1px, transparent 1px, transparent 4px);
  background-size: 100% 4px;
  mix-blend-mode: screen;
}

a { color: inherit; text-decoration: none; }
button, input, textarea { color: inherit; font: inherit; }
button { cursor: pointer; }
[hidden] { display: none !important; }
/* The ranking, the progress strips and the vote budget all come from one answer, and the strip above the
   ranking only exists once it lands: drawn before it, the page jumped. It shows once, filled. */
html.rm-pending main { opacity: 0; }
/* Only after waiting unseen: the kept view is simply there, a fade on it read as a flicker between pages */
html.rm-fade main { transition: opacity .25s ease; }
.wrap { width: min(var(--max), calc(100% - 36px)); margin-inline: auto; }
.font-hacked,
.btn,
.hero-title,
.section-title,
.system-tag,
.feature-title,
.rank-number,
.vote-number,
.budget-number,
.panel-title,
.toast-title {
  font-family: "Hacked", Impact, "Arial Black", sans-serif;
  letter-spacing: .035em;
}

.btn {
  --btn-line: rgba(255,36,146,.72);
  --btn-bg: rgba(255,36,146,.15);
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 48px;
  padding: 13px 18px;
  border: 1px solid var(--btn-line);
  background: linear-gradient(135deg, rgba(255,255,255,.06), transparent 48%), var(--btn-bg);
  color: #fff;
  text-transform: uppercase;
  font-size: 12px;
  letter-spacing: .18em;
  clip-path: var(--cut-sm);
  overflow: hidden;
  transition: transform .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease, opacity .18s ease;
}
.btn::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(110deg, transparent, rgba(255,255,255,.18) 45%, transparent 62%);
  transform: translateX(-130%);
  transition: transform .5s ease;
}
.btn:hover:not(:disabled) { transform: translateY(-2px); border-color: rgba(125,255,43,.78); box-shadow: 0 0 28px rgba(255,36,146,.18), 0 0 22px rgba(125,255,43,.08); }
.btn:hover:not(:disabled)::after { transform: translateX(130%); }
.btn.green { --btn-line: rgba(125,255,43,.64); --btn-bg: rgba(125,255,43,.12); color: var(--mint); }
.btn.dark { --btn-line: rgba(255,255,255,.18); --btn-bg: rgba(0,0,0,.46); color: rgba(255,255,255,.84); }
.btn.danger { --btn-line: rgba(255,77,95,.58); --btn-bg: rgba(255,77,95,.12); color: #ffb5bd; }
.btn.tiny { min-height: 36px; padding: 9px 11px; font-size: 13px; letter-spacing: .14em; }
.btn:disabled { opacity: .42; cursor: not-allowed; transform: none; box-shadow: none; }

.glass-card {
  position: relative;
  border: 1px solid var(--line);
  background: linear-gradient(135deg, rgba(255,255,255,.055), transparent 42%), rgba(10,0,15,.72);
  box-shadow: var(--shadow);
  clip-path: var(--cut);
  overflow: hidden;
}
.glass-card::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: .09;
  background: linear-gradient(rgba(255,255,255,.11) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.11) 1px, transparent 1px);
  background-size: 19px 19px;
}

.hero { padding: 24px 0 12px; }
.hero-panel {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 24px;
  padding: 22px 26px;
}
.system-tag {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  width: fit-content;
  border: 1px solid rgba(125,255,43,.42);
  background: rgba(125,255,43,.1);
  color: var(--mint);
  padding: 9px 11px;
  font-size: 13px;
  letter-spacing: .22em;
  text-transform: uppercase;
}
.system-tag.pink { border-color: rgba(255,36,146,.48); background: rgba(255,36,146,.1); color: var(--soft); }
.hero-title { margin: 12px 0 0; font-size: clamp(34px, 4.5vw, 56px); line-height: .92; text-transform: uppercase; }
.hero-title em { color: var(--hot); font-style: normal; }
.hero-copy { max-width: 760px; margin: 9px 0 0; color: var(--dim); line-height: 1.55; font-size: 14px; }
.hero-copy a { color: var(--soft); text-decoration: underline; text-underline-offset: 3px; }
.hero-round { min-width: 180px; border-left: 1px solid rgba(255,255,255,.12); padding-left: 24px; }
.hero-round .budget-label { display: block; }
.hero-round strong { display: block; margin-top: 7px; color: var(--mint); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; }

.budget-panel {
  display: grid;
  grid-template-columns: minmax(190px, 1fr) repeat(2, minmax(135px, 180px)) minmax(240px, 1.35fr);
  align-items: stretch;
  gap: 8px;
  margin-top: 8px;
  padding: 0;
}
.viewer-identity,
.budget-cell {
  border: 1px solid rgba(255,255,255,.1);
  background: rgba(0,0,0,.36);
  min-height: 58px;
  padding: 11px 14px;
  clip-path: var(--cut-sm);
}
.viewer-identity { border-color: rgba(125,255,43,.2); }
.viewer-identity strong { display: block; color: var(--mint); text-transform: uppercase; letter-spacing: .1em; font-size: 13px; }
.viewer-identity span { display: block; margin-top: 5px; color: var(--ghost); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.budget-label { color: var(--ghost); font-size: 13px; letter-spacing: .17em; text-transform: uppercase; font-weight: 900; }
.budget-number { display: block; margin-top: 5px; font-size: 23px; line-height: 1; color: var(--mint); }
.budget-number small { color: var(--ghost); font-size: 12px; font-weight: 700; }
.budget-cell.priority-pool { border-color: rgba(255,36,146,.24); }
.budget-cell.priority-pool .budget-number > span:first-child {
  color: transparent;
  background: var(--feature-rainbow);
  background-size: 300% 100%;
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: feature-rainbow-text 7s linear infinite;
  text-shadow: none;
}
.budget-cell.suggestion-pool { border-color: rgba(225,229,233,.22); }
.budget-cell.suggestion-pool .budget-number { color: #e1e5e9; }
.tier-line { border-left: 2px solid var(--pink); padding: 9px 12px; color: var(--dim); line-height: 1.45; font-size: 12px; }
.tier-line strong { display: block; color: var(--soft); text-transform: uppercase; letter-spacing: .12em; font-size: 13px; }
.tier-line span { display: block; margin-top: 4px; }

.status-strip {
  margin-top: 8px;
  padding: 10px 13px;
  border: 1px solid rgba(125,255,43,.28);
  background: rgba(0,0,0,.38);
  clip-path: var(--cut-sm);
  color: var(--dim);
  line-height: 1.45;
  font-size: 12px;
}
.status-strip strong { color: var(--mint); }
.status-strip.is-error { border-color: rgba(255,36,146,.46); color: var(--soft); }
.status-strip.is-preview { border-color: rgba(0,255,213,.35); color: rgba(215,255,249,.82); }

.section { padding: 26px 0; }
.section-head { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 18px; align-items: end; margin-bottom: 20px; }
.section-title { margin: 10px 0 0; font-size: clamp(32px, 4.5vw, 50px); line-height: .92; text-transform: uppercase; }
.section-copy { max-width: 720px; margin: 8px 0 0; color: var(--dim); line-height: 1.55; font-size: 13px; }
.round-chip { border: 1px solid rgba(255,255,255,.14); background: rgba(0,0,0,.42); padding: 12px 14px; clip-path: var(--cut-sm); color: var(--ghost); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; }
.round-chip strong { color: var(--mint); }

/* The arrows live in a gutter either side rather than on top of the cards. */
.ranking-viewport { position: relative; padding-inline: 56px; }

.ranking-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin-top: 2px;
  color: var(--ghost);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px;
  letter-spacing: .08em;
}
.ranking-pager[hidden] { display: none; }
.ranking-pager-dots { display: flex; gap: 6px; }
.ranking-pager-dot {
  width: 7px;
  height: 7px;
  background: rgba(255,255,255,.22);
  border: 1px solid rgba(255,255,255,.28);
  transition: background .2s ease, border-color .2s ease, transform .2s ease;
}
.ranking-pager-dot.is-current { background: var(--mint); border-color: var(--mint); transform: scale(1.25); }
.ranking-pager-hint { color: var(--mint); }

.feature-list {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 100%;
  column-gap: 18px;
  align-items: start;
  overflow-x: auto;
  overflow-y: clip;
  padding: 4px 1px 14px;
  scroll-snap-type: none;
  scroll-padding-inline: 1px;
  overscroll-behavior-inline: contain;
  /* pan-x matters: without it the browser refuses to scroll the ranking
     sideways on touch, leaving the pointer drag as the only route. */
  touch-action: pan-x pan-y;
  user-select: none;
  -webkit-user-select: none;
  scrollbar-color: rgba(255,36,146,.55) rgba(255,255,255,.06);
  scrollbar-width: thin;
}
.feature-list.is-dragging,
.feature-list.is-settling { scroll-snap-type: none; }
.feature-list.is-hinting { scroll-snap-type: none; }
@media (pointer: coarse) {
  /* Touch scrolls natively, so the browser does the settling that
     settleRankingAfterDrag does for a mouse. */
  .feature-list:not(.is-dragging):not(.is-settling):not(.is-hinting) { scroll-snap-type: x mandatory; }
  .feature-page { scroll-snap-align: start; }
}
.feature-list.is-dragging { cursor: grabbing; }
.feature-list.is-dragging .feature-summary { cursor: grabbing; }
.feature-list::-webkit-scrollbar { height: 8px; }
.feature-list::-webkit-scrollbar-track { background: rgba(255,255,255,.06); }
.feature-list::-webkit-scrollbar-thumb { background: rgba(255,36,146,.55); border-radius: 999px; }
[data-community-list] { scrollbar-color: rgba(225,229,233,.5) rgba(255,255,255,.06); }
[data-community-list]::-webkit-scrollbar-thumb { background: rgba(225,229,233,.5); }
.feature-page {
  min-width: 0;
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 10px;
  align-items: start;
}
.feature-page > .feature-card { grid-column: span 3; grid-row: auto; }
.feature-page > .feature-card.is-top-ranked { grid-column: 1 / -1; }
.ranking-scroll {
  position: absolute;
  z-index: 25;
  top: 50%;
  width: 42px;
  height: 58px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(125,255,43,.55);
  background: rgba(5,0,7,.94);
  color: var(--mint);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 28px;
  line-height: 1;
  clip-path: var(--cut-sm);
  box-shadow: 0 8px 28px rgba(0,0,0,.5), 0 0 18px rgba(125,255,43,.14);
  transform: translateY(-50%);
  transition: opacity .18s ease, border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}
.ranking-scroll:hover:not(:disabled) {
  border-color: var(--mint);
  box-shadow: 0 8px 28px rgba(0,0,0,.5), 0 0 26px rgba(125,255,43,.36);
  transform: translateY(calc(-50% - 2px));
}
.ranking-scroll:disabled { opacity: .22; cursor: default; box-shadow: none; }
/* Sit in the viewport's gutter, clear of the cards. */
.ranking-scroll.previous { left: 0; }
.ranking-scroll.next { right: 0; }
@media (max-width: 820px) {
  /* No room for gutters; swiping is the natural gesture here anyway. */
  .ranking-viewport { padding-inline: 0; }
  .ranking-scroll { display: none; }
}
/* Draws the eye to the direction that still has pages, until first use. */
.ranking-scroll.is-inviting:not(:disabled) { animation: rankingInvite 1.9s ease-in-out 3; }
@keyframes rankingInvite {
  0%, 100% { transform: translateY(-50%); box-shadow: 0 8px 28px rgba(0,0,0,.5), 0 0 14px rgba(125,255,43,.12); }
  50% { transform: translateY(-50%) translateX(4px); box-shadow: 0 8px 28px rgba(0,0,0,.5), 0 0 30px rgba(125,255,43,.45); }
}
@media (prefers-reduced-motion: reduce) {
  .ranking-scroll.is-inviting:not(:disabled) { animation: none; }
}
.feature-card {
  --accent: var(--pink);
  --accent-rgb: 255, 36, 146;
  min-height: 0;
  display: block;
  padding: 0;
  border-color: rgba(var(--accent-rgb), .32);
  transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}
.feature-card:hover { border-color: rgba(var(--accent-rgb), .58); box-shadow: var(--shadow), 0 0 34px rgba(var(--accent-rgb), .1); }
.feature-card.is-expanded { border-color: rgba(var(--accent-rgb), .65); }
.feature-card.is-suggestion { --accent: #e1e5e9; --accent-rgb: 225, 229, 233; }
.feature-summary {
  position: relative;
  z-index: 2;
  width: 100%;
  min-height: 142px;
  display: grid;
  grid-template-columns: 46px 80px minmax(0, 1fr) 84px 18px;
  grid-template-rows: 1fr;
  gap: 9px;
  align-items: center;
  padding: 10px 14px;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: grab;
  touch-action: pan-x pan-y;
}
.feature-summary:hover { background: linear-gradient(90deg, rgba(var(--accent-rgb), .075), transparent 72%); }
.feature-summary:focus-visible { outline: 1px solid var(--accent); outline-offset: -3px; }
.rank-number { grid-column: 1; grid-row: 1; align-self: center; color: rgba(255,255,255,.66); font-size: 28px; line-height: 1; text-align: left; }
.rank-number::before { content: "#"; color: var(--accent); font-size: 13px; vertical-align: top; margin-right: 2px; }

.tube-wrap { grid-column: 2; grid-row: 1; display: grid; justify-items: center; align-items: center; gap: 0; }
.tube {
  --fill: 50%;
  position: relative;
  width: 62px;
  height: 118px;
  border: 2px solid rgba(255,255,255,.34);
  border-top-color: rgba(255,255,255,.66);
  border-radius: 24px 24px 17px 17px;
  background:
    linear-gradient(90deg, rgba(255,255,255,.12), rgba(255,255,255,.015) 24%, rgba(255,255,255,.03) 62%, rgba(255,255,255,.12)),
    rgba(0,0,0,.26);
  box-shadow:
    inset 0 0 20px rgba(255,255,255,.08),
    inset 0 -16px 22px rgba(0,0,0,.22),
    0 0 22px rgba(var(--accent-rgb), .2);
  overflow: visible;
  isolation: isolate;
}
.tube::after {
  content: "";
  position: absolute;
  z-index: 8;
  left: 50%;
  bottom: -4px;
  width: 74px;
  height: 12px;
  transform: translateX(-50%);
  border: 1px solid rgba(255,255,255,.25);
  background: linear-gradient(180deg, rgba(255,255,255,.08), rgba(0,0,0,.78));
  clip-path: var(--cut-sm);
  box-shadow: 0 0 16px rgba(var(--accent-rgb), .2);
}
.water-canvas {
  position: absolute;
  z-index: 1;
  inset: 5px 6px 7px;
  width: calc(100% - 12px);
  height: calc(100% - 12px);
  display: block;
  border-radius: 13px 13px 9px 9px;
  background: linear-gradient(180deg, rgba(255,255,255,.025), rgba(0,0,0,.12));
}
.tube-glass {
  position: absolute;
  z-index: 6;
  inset: 5px 6px 7px;
  border-radius: 13px 13px 9px 9px;
  pointer-events: none;
  overflow: hidden;
  box-shadow:
    inset 1px 0 rgba(255,255,255,.33),
    inset -1px 0 rgba(255,255,255,.08),
    inset 0 1px rgba(255,255,255,.14);
}
.tube-glass::before {
  content: "";
  position: absolute;
  top: 6px;
  bottom: 8px;
  left: 4px;
  width: 7px;
  border-radius: 999px;
  background: linear-gradient(180deg, rgba(255,255,255,.62), rgba(255,255,255,.1) 25%, rgba(255,255,255,.28) 65%, rgba(255,255,255,.04));
  opacity: .58;
  filter: blur(.25px);
}
.tube-glass::after {
  content: "";
  position: absolute;
  top: 8px;
  right: 4px;
  width: 8px;
  height: 58%;
  border-radius: 999px;
  background: linear-gradient(180deg, rgba(255,255,255,.22), rgba(255,255,255,0));
  opacity: .4;
  transform: rotate(5deg);
}
.tube:hover { border-color: rgba(255,255,255,.5); box-shadow: inset 0 0 20px rgba(255,255,255,.09), 0 0 30px rgba(var(--accent-rgb), .25); }
.tube-scale { display: none; }

.feature-summary-main { grid-column: 3; grid-row: 1; min-width: 0; padding-inline: 0; }
.feature-kicker { color: var(--accent); font-size: 13px; letter-spacing: .2em; text-transform: uppercase; font-weight: 900; }
.feature-title { display: block; margin: 0; font-size: clamp(20px, 2vw, 27px); line-height: 1.02; text-align: left; text-transform: uppercase; overflow-wrap: break-word; hyphens: auto; }
.feature-description { margin: 0; color: var(--dim); line-height: 1.65; }
.feature-votes { grid-column: 4; grid-row: 1; align-self: center; text-align: right; }
.feature-votes .vote-number { font-size: 29px; }
.feature-votes .vote-label { margin-top: 3px; }
.expand-marker { position: static; grid-column: 5; grid-row: 1; color: var(--accent); font-size: 17px; text-align: center; transition: transform .18s ease; }
.feature-card.is-expanded .expand-marker { transform: rotate(45deg); }
.feature-card.is-top-ranked .feature-summary {
  min-height: 190px;
  grid-template-columns: 64px 112px minmax(0, 1fr) 116px 22px;
  gap: 14px;
  padding: 13px 22px;
}
.feature-card.is-top-ranked .rank-number { font-size: 40px; }
.feature-card.is-top-ranked .tube { width: 84px; height: 164px; border-radius: 32px 32px 22px 22px; }
.feature-card.is-top-ranked .tube::after { width: 98px; height: 14px; }
.feature-card.is-top-ranked .feature-title { font-size: clamp(28px, 3.4vw, 42px); }
.feature-card.is-top-ranked .vote-number { font-size: 38px; }
.feature-details {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: 1fr;
  gap: 14px;
  align-items: center;
  padding: 14px;
  border-top: 1px solid rgba(var(--accent-rgb), .2);
  background: rgba(0,0,0,.25);
}
.feature-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 13px; }
.meta-chip { border: 1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.34); padding: 7px 9px; color: var(--ghost); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; text-transform: uppercase; }
.meta-chip.is-user { border-color: rgba(125,255,43,.28); color: var(--mint); }
.meta-chip.is-pending { border-color: rgba(0,255,213,.28); color: var(--cyan); }

.vote-panel { display: grid; gap: 9px; align-content: center; }
.vote-readout { border: 1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.42); padding: 10px; text-align: center; clip-path: var(--cut-sm); }
.vote-number { display: block; font-size: 42px; line-height: 1; color: var(--accent); text-shadow: 0 0 14px rgba(var(--accent-rgb), .4); }
.vote-label { display: block; margin-top: 6px; color: var(--ghost); font-size: 13px; text-transform: uppercase; letter-spacing: .16em; }
.vote-controls { display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 8px; }
.vote-controls .btn { padding-inline: 10px; }
.vote-pool-controls { grid-template-columns: minmax(92px, auto) 46px minmax(150px, 1fr); align-items: stretch; }
.vote-pool-label { display: grid; align-content: center; gap: 3px; border: 1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.36); padding: 8px 10px; color: var(--ghost); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; letter-spacing: .09em; text-transform: uppercase; clip-path: var(--cut-sm); }
.vote-pool-label strong { color: var(--ink); font-size: 13px; }
.vote-pool-label.is-priority {
  border-color: rgba(255,36,146,.32);
}
.vote-pool-label.is-priority strong {
  color: #ffb4d9;
}
.vote-pool-label.is-suggestion { border-color: rgba(225,229,233,.25); }
.vote-pool-label.is-suggestion strong { color: #e1e5e9; }
.btn.priority-vote {
  --btn-line: rgba(255,36,146,.58);
  --btn-bg: rgba(255,36,146,.12);
  color: #ffcee7;
}
.btn.suggestion-vote { --btn-line: rgba(225,229,233,.42); --btn-bg: rgba(225,229,233,.08); color: #f3f5f7; }
.vote-note { min-height: 17px; color: var(--ghost); font-size: 12px; text-align: center; }
.admin-card-actions { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 12px; border-top: 1px solid rgba(154,60,255,.22); }
.admin-card-actions::before { content: "Admin controls"; width: 100%; color: #c58cff; font-size: 12px; font-weight: 900; letter-spacing: .18em; text-transform: uppercase; }

.empty-card { padding: 30px; color: var(--dim); line-height: 1.7; }

/* Admin-only vote breakdown, shown inside an expanded feature card. */
.feature-stats { margin-top: 14px; padding-top: 12px; border-top: 1px solid rgba(154,60,255,.22); }
.feature-stats-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; }
.feature-stats-title { color: #c58cff; font-size: 12px; font-weight: 900; letter-spacing: .18em; text-transform: uppercase; }
.feature-stats-total { color: var(--ghost); font-size: 12px; }
.feature-stats-rows { display: grid; gap: 7px; margin-top: 10px; }
.feature-stats-row { display: grid; grid-template-columns: minmax(110px, 1.1fr) minmax(0, 2fr) auto; gap: 10px; align-items: center; }
.feature-stats-tier { color: var(--dim); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.feature-stats-tier.is-unknown { color: var(--ghost); font-style: italic; }
.feature-stats-bar { position: relative; height: 8px; background: rgba(255,255,255,.06); border: 1px solid rgba(154,60,255,.24); overflow: hidden; }
.feature-stats-bar > span { position: absolute; top: 0; bottom: 0; left: 0; background: linear-gradient(90deg, rgba(154,60,255,.85), rgba(197,140,255,.85)); }
.feature-stats-figure { color: var(--ink); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; white-space: nowrap; }
.feature-stats-figure span { color: var(--ghost); }
.feature-stats-empty, .feature-stats-note { margin-top: 8px; color: var(--ghost); font-size: 13px; line-height: 1.5; }

/* Admin inline editor for a card's wording. */
.admin-edit-form { display: grid; gap: 10px; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(154,60,255,.22); }
.admin-edit-form label { display: block; color: #c58cff; font-size: 12px; font-weight: 900; letter-spacing: .18em; text-transform: uppercase; }
.admin-edit-form input, .admin-edit-form textarea { width: 100%; margin-top: 5px; padding: 9px 11px; border: 1px solid rgba(154,60,255,.36); background: rgba(0,0,0,.42); color: var(--ink); font: inherit; font-size: 12px; }
.admin-edit-form textarea { min-height: 84px; resize: vertical; }
.admin-edit-actions { display: flex; flex-wrap: wrap; gap: 8px; }

@media (max-width: 720px) {
  .feature-stats-row { grid-template-columns: 1fr auto; }
  .feature-stats-bar { grid-column: 1 / -1; }
}

.admin-create-panel { margin-top: 14px; padding: 0; border-color: rgba(154,60,255,.36); }
.admin-create-panel > summary { position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 20px; align-items: center; padding: 16px 20px; list-style: none; cursor: pointer; }
.admin-create-panel > summary::-webkit-details-marker { display: none; }
.admin-create-panel > summary::after { content: "+"; color: #c58cff; font-family: "Hacked", Impact, sans-serif; font-size: 24px; }
.admin-create-panel[open] > summary::after { transform: rotate(45deg); }
.admin-create-title { display: block; color: #dfbdff; font-family: "Hacked", Impact, "Arial Black", sans-serif; font-size: 23px; text-transform: uppercase; }
.admin-create-copy { display: block; margin-top: 4px; color: var(--ghost); font-size: 12px; }
.admin-create-wrap { position: relative; z-index: 2; padding: 0 20px 20px; border-top: 1px solid rgba(154,60,255,.18); }
.admin-feature-form { display: grid; grid-template-columns: minmax(220px, .65fr) minmax(300px, 1.35fr) auto; gap: 14px; align-items: end; }

/* Progress strips. Deliberately plain next to the ranking cards: these are
   read once on the way past, and the ranking has to stay the thing you see. */
.progress-section { padding: 16px 0; }
.progress-section .section-head { margin-bottom: 10px; }
/* Deliberately far smaller than a ranking heading. These two sections frame
   the ranking; they must not compete with it for the first screen. */
.progress-section .section-title { font-size: clamp(19px, 2.1vw, 26px); }
.progress-strip { display: flex; flex-wrap: wrap; gap: 10px; }
.progress-chip { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; padding: 10px 16px;
  border: 1px solid rgba(255,255,255,.13); border-radius: 10px; background: rgba(255,255,255,.04); }
.progress-chip.is-active { border-color: rgba(0,255,170,.34); background: rgba(0,255,170,.06); }
.progress-chip.is-done { opacity: .72; }
.progress-chip-summary { display: flex; align-items: baseline; gap: 12px; flex: 1 1 auto;
  margin: 0; padding: 0; border: 0; background: none; font: inherit; color: inherit;
  text-align: left; cursor: pointer; }
.progress-chip-summary::after { content: '+'; margin-left: auto; padding-left: 10px; color: var(--mint);
  font-family: 'Hacked', Impact, sans-serif; font-size: 17px; line-height: 1; transition: transform .18s ease; }
.progress-chip.is-expanded .progress-chip-summary::after { transform: rotate(45deg); }
.progress-chip-summary:hover .progress-chip-name { color: var(--mint); }
.progress-chip-details { flex-basis: 100%; margin: 0; padding-top: 9px;
  border-top: 1px solid rgba(255,255,255,.09); color: var(--dim); font-size: 12.5px; line-height: 1.6; }
.progress-chip-name { color: var(--ink); font-size: 14px; letter-spacing: .01em; }
.progress-chip-votes { color: var(--ghost); font-size: 12px; white-space: nowrap; }
.progress-chip-actions { display: flex; gap: 6px; }
@media (max-width: 700px) {
  .progress-chip { width: 100%; flex-wrap: wrap; }
}
.suggestion-panel { margin-top: 14px; padding: 0; }
.suggestion-panel > summary {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 20px;
  align-items: center;
  padding: 18px 22px;
  list-style: none;
  cursor: pointer;
}
.suggestion-panel > summary::-webkit-details-marker { display: none; }
.suggestion-panel > summary::after { content: "+"; color: var(--mint); font-family: "Hacked", Impact, sans-serif; font-size: 24px; }
.suggestion-panel[open] > summary::after { transform: rotate(45deg); }
.suggestion-summary-copy { display: block; }
.suggestion-summary-title { display: block; margin: 0; color: var(--ink); font-family: "Hacked", Impact, "Arial Black", sans-serif; font-size: 25px; letter-spacing: .035em; text-transform: uppercase; }
.suggestion-summary-subtitle { display: block; margin-top: 4px; color: var(--ghost); font-size: 12px; }
.suggestion-form-wrap { position: relative; z-index: 2; padding: 0 22px 22px; border-top: 1px solid rgba(255,255,255,.1); }
.suggestion-panel p { color: var(--dim); line-height: 1.65; }
.suggestion-panel form { display: grid; grid-template-columns: minmax(220px, .6fr) minmax(300px, 1.4fr) auto; gap: 14px; align-items: end; }
.field { display: grid; gap: 7px; margin-top: 15px; }
.field label { color: var(--mint); font-size: 13px; letter-spacing: .17em; text-transform: uppercase; font-weight: 900; }
.field input,
.field textarea {
  width: 100%;
  border: 1px solid rgba(255,255,255,.15);
  background: rgba(0,0,0,.48);
  color: #fff;
  padding: 13px 14px;
  outline: none;
  clip-path: var(--cut-sm);
  resize: vertical;
}
.field input:focus,
.field textarea:focus { border-color: rgba(125,255,43,.52); box-shadow: 0 0 18px rgba(125,255,43,.08); }
.field textarea { min-height: 74px; }
.field-count { color: var(--ghost); font-size: 13px; text-align: right; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.similarity-panel {
  grid-column: 1 / -1;
  border: 1px solid rgba(0,255,213,.28);
  background: rgba(0,0,0,.38);
  padding: 15px;
  clip-path: var(--cut-sm);
}
.similarity-head { display: flex; justify-content: space-between; gap: 16px; align-items: baseline; }
.similarity-title { color: var(--cyan); font-family: "Hacked", Impact, "Arial Black", sans-serif; font-size: 18px; letter-spacing: .06em; text-transform: uppercase; }
.similarity-copy { color: var(--ghost); font-size: 12px; text-align: right; }
.similarity-results { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-top: 11px; }
.similarity-match { border: 1px solid rgba(255,255,255,.12); background: rgba(255,255,255,.035); padding: 11px; min-width: 0; color: inherit; text-align: left; cursor: pointer; transition: border-color .18s ease, background .18s ease, transform .18s ease; }
.similarity-match:hover, .similarity-match:focus-visible { border-color: rgba(0,255,213,.5); background: rgba(0,255,213,.07); transform: translateY(-1px); outline: none; }
.similarity-match strong { display: block; color: var(--ink); font-size: 12px; line-height: 1.25; text-transform: uppercase; }
.similarity-match-meta { display: flex; justify-content: space-between; gap: 8px; margin-top: 8px; color: var(--ghost); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; text-transform: uppercase; }
.similarity-match-score { color: var(--cyan); }
.similarity-empty { margin-top: 11px; color: var(--dim); font-size: 12px; }
.similarity-confirm { display: flex; gap: 10px; align-items: flex-start; margin-top: 13px; padding-top: 13px; border-top: 1px solid rgba(255,255,255,.1); color: var(--mint); font-size: 12px; line-height: 1.45; cursor: pointer; }
.similarity-confirm input { width: 17px; height: 17px; margin: 1px 0 0; accent-color: var(--green); flex: 0 0 auto; }
.suggestion-actions { display: grid; gap: 8px; margin-bottom: 1px; }
.suggestion-help { grid-column: 1 / -1; margin: 0; color: var(--ghost); font-size: 12px; line-height: 1.55; }
.admin-link { width: 100%; }

.footer { padding: 40px 0 58px; color: var(--ghost); font-size: 12px; }
.footer-inner { display: flex; justify-content: space-between; gap: 20px; border-top: 1px solid rgba(255,255,255,.1); padding-top: 22px; }
.footer a:hover { color: var(--mint); }
.footer-links { display: flex; flex-wrap: wrap; gap: 8px 18px; }

.toast {
  position: fixed;
  z-index: 1100;
  right: 18px;
  bottom: 18px;
  width: min(380px, calc(100% - 36px));
  padding: 15px 16px;
  border: 1px solid rgba(125,255,43,.42);
  background: rgba(4,0,7,.94);
  clip-path: var(--cut-sm);
  box-shadow: var(--shadow);
  transform: translateY(24px);
  opacity: 0;
  pointer-events: none;
  transition: transform .2s ease, opacity .2s ease;
}
.toast.is-visible { transform: translateY(0); opacity: 1; }
.toast.is-error { border-color: rgba(255,36,146,.56); }
.toast-title { color: var(--mint); text-transform: uppercase; font-size: 15px; }
.toast.is-error .toast-title { color: var(--soft); }
.toast-copy { margin-top: 5px; color: var(--dim); line-height: 1.45; font-size: 12px; }

@media (max-width: 1040px) {
  .budget-panel { grid-template-columns: 1fr 1fr 1fr; }
  .tier-line { grid-column: 1 / -1; }
  .suggestion-panel form { grid-template-columns: 1fr 1fr; }
  .admin-feature-form { grid-template-columns: 1fr 1fr; }
  .admin-feature-form .btn { grid-column: 1 / -1; justify-self: start; }
  .suggestion-actions { grid-column: 1 / -1; grid-template-columns: repeat(2, minmax(0, 220px)); }
}
@media (max-width: 820px) {
  .hero-panel { grid-template-columns: 1fr; }
  .hero-round { border-left: 0; border-top: 1px solid rgba(255,255,255,.12); padding: 14px 0 0; }
  .section-head { grid-template-columns: 1fr; }
  .round-chip { justify-self: start; }
  .feature-list { grid-auto-columns: 100%; }
  .feature-page { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .feature-page > .feature-card { grid-column: auto !important; }
  .feature-page > .feature-card.is-top-ranked { grid-column: 1 / -1 !important; }
  .feature-summary { grid-template-columns: 34px 68px minmax(0, 1fr) 68px 16px; gap: 6px; padding-inline: 10px; }
  .rank-number { font-size: 23px; }
  .feature-title { font-size: 19px; }
  .feature-votes .vote-number { font-size: 25px; }
  .feature-details { grid-template-columns: 1fr; padding: 16px; }
  .ranking-scroll.previous { left: 4px; }
  .ranking-scroll.next { right: 4px; }
}
@media (max-width: 640px) {
  .hero { padding-top: 14px; }
  .hero-panel { padding: 19px; }
  .budget-panel { grid-template-columns: 1fr 1fr; }
  .viewer-identity,
  .tier-line { grid-column: 1 / -1; }
  .feature-list { grid-auto-columns: 100%; }
  .feature-page { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .feature-summary { min-height: 126px; grid-template-columns: 28px 58px minmax(0, 1fr) 58px 14px; grid-template-rows: 1fr; gap: 5px; padding-inline: 7px; }
  .rank-number { font-size: 19px; }
  .rank-number::before { font-size: 12px; }
  .tube { height: 102px; width: 52px; }
  .tube::after { width: 62px; }
  .feature-title { font-size: 16px; }
  .feature-votes .vote-number { font-size: 21px; }
  .feature-votes .vote-label { font-size: 12px; letter-spacing: .08em; }
  .feature-details { padding: 15px; }
  .vote-controls { grid-template-columns: 54px minmax(0, 1fr); }
  .vote-pool-controls { grid-template-columns: 1fr 54px minmax(0, 1.5fr); }
  .suggestion-panel form { grid-template-columns: 1fr; }
  .admin-feature-form { grid-template-columns: 1fr; }
  .admin-feature-form .btn { grid-column: auto; width: 100%; }
  .similarity-results { grid-template-columns: 1fr; }
  .suggestion-actions { grid-column: auto; grid-template-columns: 1fr; }
  .suggestion-help { grid-column: auto; }
  .footer-inner { flex-direction: column; }
}
@media (max-width: 480px) {
  .feature-page { grid-template-columns: 1fr; }
  .feature-page > .feature-card,
  .feature-page > .feature-card.is-top-ranked { grid-column: 1 !important; }
  .feature-card.is-top-ranked .feature-summary {
    min-height: 158px;
    grid-template-columns: 34px 74px minmax(0, 1fr) 64px 14px;
    gap: 6px;
    padding: 10px;
  }
  .feature-card.is-top-ranked .rank-number { font-size: 28px; }
  .feature-card.is-top-ranked .tube { width: 66px; height: 136px; }
  .feature-card.is-top-ranked .tube::after { width: 78px; }
  .feature-card.is-top-ranked .feature-title { font-size: 19px; }
  .feature-card.is-top-ranked .vote-number { font-size: 28px; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; }
}
