@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/instrument-sans-400.woff2') format('woff2');
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/instrument-sans-500.woff2') format('woff2');
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/instrument-sans-600.woff2') format('woff2');
}

body{margin:0;background:#F3F1EC}
a{color:#1A1A18}a:hover{color:#355241}

@keyframes orbit{from{transform:rotate(40deg)}to{transform:rotate(400deg)}}

@keyframes orbitrev{from{transform:rotate(0deg)}to{transform:rotate(-360deg)}}

@keyframes pulse{0%{transform:scale(.1);opacity:.35}100%{transform:scale(1);opacity:0}}

@keyframes up{from{transform:translateY(108%)}to{transform:none}}

@keyframes fadeup{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}

@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

@keyframes flow{0%{offset-distance:0%;opacity:0}12%{opacity:1}88%{opacity:1}100%{offset-distance:100%;opacity:0}}

@keyframes halt{0%{offset-distance:0%;opacity:0}8%{opacity:1}60%{offset-distance:100%;opacity:1;animation-timing-function:cubic-bezier(.15,.75,.3,1)}100%{offset-distance:38%;opacity:0}}

@keyframes gatepulse{0%,54%,70%,100%{opacity:.35}60%{opacity:1}}

@keyframes satorbit{from{offset-distance:0%}to{offset-distance:100%}}
.sat{position:absolute;left:0;top:0;border-radius:50%;offset-rotate:0deg;animation:satorbit 16s linear infinite}
.year-bead{
  position:absolute;
  left:0;
  top:0;
  width:11px;
  height:11px;
  border-radius:50%;
  background:#355241;
  offset-path:path("M 122 20.7 A 101.2 101.2 0 1 1 121.99 20.7");
  offset-rotate:0deg;
  animation:satorbit 12s linear infinite;
}
.gate{animation:gatepulse 3s linear infinite}
.orbit{transform-origin:100px 100px;animation:orbit 14s linear infinite}
.orbitrev{transform-origin:100px 100px;animation:orbitrev 40s linear infinite}
.pulse{transform-origin:100px 100px;animation:pulse 6s cubic-bezier(.16,1,.3,1) infinite}
.pulse2{animation-delay:3s}
.mask{display:block;overflow:hidden;padding-bottom:.08em}
.mask>span{display:block;animation:up 1.4s cubic-bezier(.16,1,.3,1) both}
.fadeup{animation:fadeup 1.2s cubic-bezier(.16,1,.3,1) both}
.marquee{animation:marquee 90s linear infinite}
.marquee:hover{animation-play-state:paused}
.dot{position:absolute;left:0;top:0;border-radius:50%;offset-rotate:0deg;opacity:0;animation-iteration-count:infinite}
.rowlink:hover .arrow{transform:translateX(6px)}
.arrow{transition:transform .25s cubic-bezier(.16,1,.3,1);display:inline-block}
@media (prefers-reduced-motion: reduce){.orbit,.orbitrev,.pulse,.mask>span,.fadeup,.marquee,.dot,.gate,.sat,.year-bead{animation:none !important}.orbit{transform:rotate(40deg)}.pulse{opacity:0}.sat,.year-bead{offset-distance:11%}}

/* Production frame: keep 1440 design, centre on wide screens */
.canvas-page {
  width: 100%;
  max-width: 1440px;
  margin: 0 auto;
  background: #F3F1EC;
  color: #1A1A18;
  font-family: 'Instrument Sans', 'Helvetica Neue', Arial, sans-serif;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  overflow-x: visible;
}
.canvas-page a { color: inherit; }
/* Board wrappers must not generate boxes — they sit inside flex/grid rows. */
sc-if, sc-for, [data-logic] {
  display: contents;
}
.canvas-page[data-canvas="self-check"] {
  min-width: 1440px;
}
