/* Syno Manager - shared site stylesheet (synomanager.com).
   Design: "The Rack" - a NAS front panel seen in a dim server cupboard. Cool
   slate neutrals, a blue status-LED accent, cyan used for readouts and labels
   the way a drive-activity indicator is used. The palette is lifted from the
   app itself (lib/shared/theme/app_colors.dart) so a screenshot dropped onto a
   page sits on its own background. Space Grotesk (display) / Inter (body) /
   JetBrains Mono (readouts). One source of truth: every page inherits this, so
   the class names are stable. */

/* Fonts are loaded from each page's <head> with preconnect, not with an
   @import here - an @import serialises the request chain and blocks rendering
   until the font CSS arrives. See tools/build_site.py. */

:root{
  --panel:#0f1117; --panel-2:#1a1d2e; --panel-3:#252836; --well:#0b0d14;
  --edge:rgba(148,163,184,.12); --edge-2:rgba(148,163,184,.22); --edge-top:rgba(255,255,255,.06);
  --ink:#e2e8f0; --steel:#94a3b8; --steel-2:#64748b;
  --signal:#3b82f6; --signal-deep:#2563eb; --signal-soft:rgba(59,130,246,.14);
  --vfd:#06b6d4; --vfd-dim:rgba(6,182,212,.66);
  --violet:#8b5cf6;
  --ok:#22c55e; --warn:#f59e0b; --bad:#ef4444;
  --star:#fbbf24;
  --maxw:1180px; --narrow:760px; --radius:12px; --radius-sm:8px;
  --disp:"Space Grotesk",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --body:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,monospace;
  /* legacy aliases so inline styles keep resolving */
  --bg:var(--panel); --bg2:var(--panel-2); --card:var(--panel-2); --card2:var(--panel-3);
  --line:var(--edge-2); --txt:var(--ink); --mut:var(--steel); --accent:var(--signal);
  --accent2:var(--signal-deep); --glow:var(--signal-soft); --sans:var(--body);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:var(--panel);color:var(--ink);font-family:var(--body);line-height:1.68;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:var(--signal);text-decoration:none;transition:color .15s}
a:hover{color:#60a5fa}
/* height:auto is NOT optional here. Every <img> is stamped with its real
   width and height attributes by tools/build_site.py so the browser can
   reserve space and avoid layout shift. Those attributes keep applying to the
   HEIGHT even when a rule below sets only the width - so without this, a
   1324x2644 screenshot in a `width:300px` box renders 300 wide by 2644 tall.
   Enforced by tools/check_site.py. */
img{max-width:100%;height:auto;display:block}
::selection{background:var(--signal-soft);color:var(--ink)}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 26px}

/* eyebrow = a drive-bay label: cyan mono, ticked */
.eyebrow{font-family:var(--mono);color:var(--vfd);font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;font-size:.7rem;margin-bottom:14px;display:flex;align-items:center;gap:9px}
.eyebrow::before{content:"";width:14px;height:2px;background:var(--signal);display:inline-block;flex:none}

h1,h2,h3{font-family:var(--disp);line-height:1.1;letter-spacing:-.02em;color:var(--ink)}
h1{font-size:clamp(2.2rem,5vw,3.4rem);font-weight:700}
h2{font-size:clamp(1.6rem,3.2vw,2.3rem);font-weight:700;margin-bottom:16px}
h3{font-size:1.14rem;font-weight:600;margin-bottom:8px;letter-spacing:-.01em}
h4{font-family:var(--disp);font-size:1rem;font-weight:600;margin-bottom:6px;color:var(--ink)}
p.lead{color:var(--steel);font-size:1.06rem;max-width:66ch}
strong,b{color:var(--ink);font-weight:600}
.g{color:var(--signal)}
code{font-family:var(--mono);font-size:.88em;background:var(--well);border:1px solid var(--edge);
  border-radius:5px;padding:1px 6px;color:var(--vfd)}

/* nav - a rack rail */
header.nav{position:sticky;top:0;z-index:50;backdrop-filter:blur(14px);
  background:rgba(15,17,23,.86);border-bottom:1px solid var(--edge-2)}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;height:64px;gap:18px}
.brand{display:flex;align-items:center;gap:11px;font-family:var(--disp);font-weight:700;
  font-size:1.06rem;color:var(--ink);white-space:nowrap;letter-spacing:-.02em}
.brand:hover{color:var(--ink)}
.brand img{width:30px;height:30px;border-radius:8px;display:block}
.nav nav{display:flex;gap:22px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.nav nav a{color:var(--steel);font-size:.86rem;font-weight:500;white-space:nowrap;
  position:relative;padding:2px 0}
.nav nav a:hover,.nav nav a.active{color:var(--ink)}
.nav nav a.active::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;background:var(--signal)}
.nav nav a.cta{color:var(--vfd);font-family:var(--mono);font-size:.8rem;letter-spacing:.05em}
.nav-toggle{display:none;background:none;border:1px solid var(--edge-2);color:var(--ink);
  border-radius:8px;padding:6px 10px;font-size:1.1rem;cursor:pointer}
@media(max-width:960px){
  .nav nav{display:none;position:absolute;top:64px;left:0;right:0;flex-direction:column;
    align-items:stretch;gap:0;background:var(--panel-2);border-bottom:1px solid var(--edge-2);padding:6px 0}
  .nav nav.open{display:flex}
  .nav nav a{padding:13px 26px}
  .nav nav a.active::after{display:none}
  .nav-toggle{display:block}
}

/* hero - the faceplate. A row of bay ticks along the baseline. */
.hero{position:relative;overflow:hidden;padding:76px 0 44px;
  background:linear-gradient(180deg,var(--panel-2) 0%,var(--panel) 64%)}
.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:14px;
  background:repeating-linear-gradient(90deg,var(--edge-2) 0 1px,transparent 1px 13px);
  -webkit-mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);
  mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);opacity:.55}
.hero h1{max-width:16ch}
.hero p{color:var(--steel);font-size:1.11rem;max-width:60ch;margin:18px 0 24px}
.hero.split .wrap{display:grid;grid-template-columns:1.15fr .85fr;gap:44px;align-items:center;position:relative;z-index:1}
.hero-shot{justify-self:center;filter:drop-shadow(0 34px 60px rgba(0,0,0,.6))}
.hero-shot img{width:300px}
@media(max-width:900px){.hero.split .wrap{grid-template-columns:1fr;text-align:center}
  .hero.split .badges,.hero.split .pills,.hero.split .rating,.hero.split .readout{justify-content:center}
  .hero.split h1,.hero.split p{margin-left:auto;margin-right:auto}.hero-shot img{width:244px}}

/* a mono readout strip (spec line) */
.readout{font-family:var(--mono);font-size:.76rem;letter-spacing:.04em;color:var(--vfd-dim);
  display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:20px}
.readout span{white-space:nowrap}
.readout span::before{content:"\00B7  ";color:var(--steel-2)}
.readout span:first-child::before{content:""}

.rating{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 22px;
  font-size:.9rem;color:var(--steel);font-family:var(--mono)}
.rating .stars{color:var(--star);letter-spacing:2px;font-size:1.02rem;font-family:var(--body)}
.rating strong{color:var(--ink);font-weight:600}

.badges{display:flex;flex-wrap:wrap;gap:12px}
.badges img{height:46px}
.badges.social img{height:38px}
.pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.pill{font-family:var(--mono);font-size:.72rem;letter-spacing:.03em;color:var(--steel);
  border:1px solid var(--edge-2);border-radius:6px;padding:5px 11px;background:var(--well)}

section{padding:62px 0;position:relative;border-top:1px solid var(--edge)}
.section-head{max-width:70ch;margin-bottom:34px}

/* feature rows */
.feat{display:grid;grid-template-columns:1fr 1fr;gap:52px;align-items:center}
.feat.rev .shots{order:2}
.feat+.feat{margin-top:64px}
.shots{display:flex;gap:16px;justify-content:center}
.shots img{width:230px;filter:drop-shadow(0 20px 38px rgba(0,0,0,.55));transition:transform .25s ease}
.shots img:hover{transform:translateY(-5px)}
.shots.one img{width:270px}
.feat ul{list-style:none;margin-top:16px;display:flex;flex-direction:column;gap:11px}
.feat li{position:relative;padding-left:26px;color:var(--steel)}
.feat li b{color:var(--ink);font-weight:600}
.feat li::before{content:"";position:absolute;left:0;top:11px;width:11px;height:2px;background:var(--signal)}
@media(max-width:900px){.feat,.feat.rev{grid-template-columns:1fr;gap:28px}.feat.rev .shots{order:0}}

/* panels (card grids) */
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid.two{grid-template-columns:repeat(2,1fr)}
.gcard{background:linear-gradient(180deg,var(--panel-2),var(--panel-3));
  border:1px solid var(--edge);border-top-color:var(--edge-top);border-radius:var(--radius);
  padding:22px 22px 24px;transition:border-color .2s,transform .2s;position:relative;overflow:hidden}
.gcard::before{content:"";position:absolute;left:0;top:18px;bottom:18px;width:2px;
  background:var(--signal);opacity:0;transition:opacity .2s;border-radius:2px}
.gcard:hover{border-color:var(--edge-2);transform:translateY(-2px)}
.gcard:hover::before{opacity:1}
.gcard .ic{font-size:1.15rem;margin-bottom:12px;filter:grayscale(1) brightness(1.5);opacity:.55}
.gcard h3{font-size:1.02rem;margin-bottom:6px}
.gcard p{color:var(--steel);font-size:.92rem}
.gcard.link{display:block;color:inherit}
.gcard.link:hover h3{color:var(--signal)}
@media(max-width:900px){.grid,.grid.two{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.grid,.grid.two{grid-template-columns:1fr}}

/* gallery */
.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.gallery figure{margin:0}
.gallery img{width:100%;filter:drop-shadow(0 14px 26px rgba(0,0,0,.5))}
.gallery figcaption{font-family:var(--mono);color:var(--steel);font-size:.72rem;letter-spacing:.02em;
  text-align:center;margin-top:9px}
.gallery.six{grid-template-columns:repeat(6,1fr);gap:12px}
@media(max-width:900px){.gallery{grid-template-columns:repeat(3,1fr)}
  .gallery.six{grid-template-columns:repeat(3,1fr)}}
@media(max-width:600px){.gallery{grid-template-columns:repeat(2,1fr)}
  .gallery.six{grid-template-columns:repeat(2,1fr)}}

/* steps + lists */
.cols{display:grid;grid-template-columns:1fr 1fr;gap:44px}
@media(max-width:900px){.cols{grid-template-columns:1fr;gap:30px}}
ol.steps{list-style:none;counter-reset:s;display:flex;flex-direction:column;gap:16px}
ol.steps li{position:relative;padding-left:48px;color:var(--steel)}
ol.steps li b{color:var(--ink)}
ol.steps li::before{counter-increment:s;content:counter(s,decimal-leading-zero);position:absolute;left:0;top:-1px;
  width:32px;height:32px;border-radius:8px;background:var(--well);border:1px solid var(--edge-2);
  color:var(--vfd);font-family:var(--mono);font-weight:600;font-size:.82rem;display:grid;place-items:center}
ul.plain{list-style:none;display:flex;flex-direction:column;gap:12px}
ul.plain li{padding-left:24px;position:relative;color:var(--steel)}
ul.plain li b{color:var(--ink)}
ul.plain li::before{content:"";position:absolute;left:3px;top:12px;width:9px;height:2px;background:var(--signal)}

/* notes = spec plates; tables = spec sheets */
.note{background:var(--panel-2);border:1px solid var(--edge);border-left:2px solid var(--vfd);
  border-radius:var(--radius-sm);padding:17px 19px;color:var(--steel);margin-top:20px;font-size:.94rem}
.note b{color:var(--ink)}
.note.warn{border-left-color:var(--warn)}
.note.stop{border-left-color:var(--bad)}
table.t{width:100%;border-collapse:collapse;margin:16px 0;font-size:.92rem}
table.t th,table.t td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--edge);vertical-align:top}
table.t thead th,table.t th{color:var(--vfd);font-family:var(--mono);font-weight:500;font-size:.7rem;
  letter-spacing:.09em;text-transform:uppercase}
table.t td:first-child{color:var(--ink);font-weight:600}
table.t td{color:var(--steel)}
table.t .yes{color:var(--ok);font-weight:700}
table.t .no{color:var(--steel-2)}
.tscroll{overflow-x:auto}

/* FAQ */
details{background:var(--panel-2);border:1px solid var(--edge);border-radius:var(--radius-sm);
  margin-bottom:10px;overflow:hidden}
details[open]{border-color:var(--edge-2)}
details summary{cursor:pointer;padding:16px 18px;font-weight:600;color:var(--ink);list-style:none;
  display:flex;align-items:center}
details summary::-webkit-details-marker{display:none}
details summary::before{content:"+";font-family:var(--mono);color:var(--vfd);font-weight:600;
  margin-right:13px;font-size:1.05rem;line-height:1}
details[open] summary::before{content:"\2212"}
details .body{padding:0 18px 16px 43px;color:var(--steel);font-size:.94rem}
details .body p+p{margin-top:10px}

/* breadcrumb */
.crumb{font-family:var(--mono);color:var(--steel-2);font-size:.76rem;margin-bottom:16px}
.crumb a{color:var(--steel-2)}
.crumb a:hover{color:var(--vfd)}

/* quotes */
.quotes{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.quote{background:var(--panel-2);border:1px solid var(--edge);border-top-color:var(--edge-top);
  border-radius:var(--radius);padding:22px}
.quote .stars{color:var(--star);letter-spacing:2px;font-size:.92rem;margin-bottom:11px}
.quote p{color:var(--ink);font-size:1rem;margin-bottom:12px;line-height:1.6}
.quote .who{font-family:var(--mono);color:var(--steel);font-size:.76rem}
@media(max-width:800px){.quotes{grid-template-columns:1fr}}

/* guide index + inline-shot layout */
.guide-toc{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:6px 0 0}
.guide-toc a{background:var(--panel-2);border:1px solid var(--edge);border-radius:var(--radius-sm);
  padding:12px 15px;color:var(--ink);font-weight:600;font-size:.9rem;display:flex;align-items:center;gap:9px;
  transition:border-color .2s,color .2s}
.guide-toc a:hover{border-color:var(--edge-2);color:var(--vfd)}
@media(max-width:900px){.guide-toc{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.guide-toc{grid-template-columns:1fr}}
.with-shot{display:grid;grid-template-columns:1fr 250px;gap:34px;align-items:start}
.with-shot img{width:250px;filter:drop-shadow(0 16px 30px rgba(0,0,0,.55))}
.with-shot.left{grid-template-columns:250px 1fr}
@media(max-width:800px){.with-shot,.with-shot.left{grid-template-columns:1fr}.with-shot img{width:224px;margin:0 auto}}

/* on-page contents rail */
.onthispage{background:var(--well);border:1px solid var(--edge);border-radius:var(--radius-sm);
  padding:16px 20px;margin:0 0 34px}
.onthispage b{font-family:var(--mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--vfd);display:block;margin-bottom:10px}
.onthispage ul{list-style:none;display:flex;flex-wrap:wrap;gap:8px 18px}
.onthispage a{font-size:.9rem;color:var(--steel)}
.onthispage a:hover{color:var(--signal)}

/* cta + buttons */
.cta{text-align:center;background:linear-gradient(180deg,var(--panel-2),var(--panel))}
.cta .badges{justify-content:center}
.btn{display:inline-block;background:linear-gradient(180deg,var(--signal),var(--signal-deep));
  color:#f8fafc;font-weight:600;padding:13px 26px;border-radius:var(--radius-sm);font-size:1rem;
  border-top:1px solid rgba(255,255,255,.22);box-shadow:0 1px 0 rgba(0,0,0,.4)}
.btn:hover{color:#fff;filter:brightness(1.08)}
.btn.ghost{background:var(--panel-2);border:1px solid var(--edge-2);color:var(--ink);box-shadow:none}

footer{padding:50px 0;border-top:1px solid var(--edge-2);color:var(--steel);font-size:.86rem;text-align:center}
footer .foot-brand{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:24px}
footer .foot-brand img{width:82px;height:82px;border-radius:20px;opacity:.96}
footer .flinks{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;margin-bottom:16px;
  font-family:var(--mono);font-size:.8rem}
footer .legal{max-width:68ch;margin:0 auto;font-size:.76rem;color:var(--steel-2)}

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

/* Enlarge-on-click for screenshots. Matched by src, the same rule lightbox.js
   uses, so a new page cannot forget to opt in and an icon is still left alone. */
img[src*="screenshots/"]{cursor:zoom-in}

.lb{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;
  padding:24px;background:rgba(0,0,0,.9);backdrop-filter:blur(4px)}
.lb.open{display:flex}
.lb img{max-width:min(100%,520px);max-height:92vh;width:auto;height:auto;
  box-shadow:0 24px 70px rgba(0,0,0,.6);cursor:zoom-out}
.lb-close{position:absolute;top:14px;right:18px;width:44px;height:44px;font-size:30px;line-height:1;
  color:#fff;background:rgba(255,255,255,.12);border:0;border-radius:50%;cursor:pointer}
.lb-close:hover{background:rgba(255,255,255,.22)}
body.lb-lock{overflow:hidden}
@media(prefers-reduced-motion:no-preference){
  .lb.open img{animation:lb-in .16s ease-out}
  @keyframes lb-in{from{transform:scale(.97);opacity:.6}to{transform:none;opacity:1}}
}

pre.code{background:var(--well);border:1px solid var(--edge-2);border-radius:var(--radius-sm);
  padding:16px 18px;margin:14px 0 6px;overflow-x:auto;font-family:var(--mono);font-size:.82rem;
  line-height:1.62;color:var(--ink);white-space:pre}
p.capt{color:var(--steel-2);font-size:.84rem;margin:0 0 22px;font-family:var(--mono)}
