/* Sentence Factory Floor: shared brand tokens + primitives.
   Everything is scoped under .sff-root so a station can be dropped into any host
   page (a gram-main Astro page, a standalone demo) without leaking styles.
   Each station injects its OWN component CSS (also scoped under .sff-root) on
   mount; this file is the only shared stylesheet. */

.sff-root{
  --sky:#68B7FF; --light-sky:#CAE5FF; --green:#59BA47; --green-dark:#3f9233;
  --navy:#406382; --ink:#22384e; --pink:#D67DCE; --yellow:#FCD921;
  --white:#fff; --text:#22384e; --muted:#5b7186;
  --mayor:#5b3b8c; --mayor-deep:#3a2560; --slang:#7B4F9E; --steel:#9fb4c6;
  --card-shadow:0 4px 18px rgba(64,99,130,.16);
  /* Brand fonts: gram-main ships Chowderhead / Nevis / MuseoSans. We name them
     first and fall back to Fredoka/Nunito so the component looks right both on
     the site (real fonts) and in a bare demo (web fonts). */
  --display:'Chowderhead','Fredoka','Nunito',system-ui,sans-serif;
  --body:'MuseoSans','Nunito',system-ui,'Helvetica Neue',Arial,sans-serif;
  font-family:var(--body);
  color:var(--text);
  line-height:1.55;
}
.sff-root *,.sff-root *::before,.sff-root *::after{box-sizing:border-box;}

/* ---- primitives shared across stations ---- */
.sff-root .sff-card{background:#fff;border-radius:18px;box-shadow:var(--card-shadow);padding:20px;}
.sff-root .sff-card + .sff-card{margin-top:16px;}
.sff-root h2.sff-section{font-family:var(--display);font-weight:700;color:var(--mayor-deep);font-size:1.5rem;margin:0 0 2px;}
.sff-root h3{font-family:var(--display);font-weight:600;color:var(--navy);margin:0;}
.sff-root .sff-lead{color:var(--muted);margin:0 0 12px;}

.sff-root .sff-btn{
  appearance:none;cursor:pointer;font-family:var(--display);font-weight:600;
  border:none;border-radius:14px;min-height:48px;padding:12px 22px;font-size:1.05rem;
  background:var(--green);color:#fff;box-shadow:0 4px 0 var(--green-dark);
  transition:transform .08s,box-shadow .08s;
}
.sff-root .sff-btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--green-dark);}
.sff-root .sff-btn:focus-visible{outline:3px solid var(--navy);outline-offset:3px;}
.sff-root .sff-btn.secondary{background:#fff;color:var(--navy);border:2px solid var(--navy);box-shadow:none;min-height:44px;font-size:.95rem;}
.sff-root .sff-btn.secondary:active{transform:translateY(1px);}
.sff-root .sff-btn.lever{font-size:1.25rem;padding:16px 30px;}

.sff-root .sff-speech{display:flex;gap:13px;align-items:flex-start;background:#fff;border-radius:16px;padding:14px 16px;box-shadow:var(--card-shadow);border-left:7px solid var(--mayor);}
.sff-root .sff-speech.slang{border-left-color:var(--slang);}
.sff-root .sff-speech.bare{box-shadow:none;padding:0;border:none;}
.sff-root .sff-avatar{flex:0 0 46px;width:46px;height:46px;border-radius:50%;overflow:hidden;background:#efe7fb;border:2px solid var(--mayor);}
.sff-root .sff-avatar.slang{background:#efe3f7;border-color:var(--slang);}
.sff-root .sff-portrait{width:100%;height:100%;object-fit:cover;object-position:top center;display:block;}
.sff-root .sff-who{font-family:var(--display);font-weight:700;font-size:.95rem;color:var(--mayor);}
.sff-root .sff-speech.slang .sff-who{color:var(--slang);}
.sff-root .sff-saidline{font-size:1rem;color:var(--ink);}
.sff-root .sff-saidline em{font-style:normal;background:linear-gradient(transparent 60%,#fff1a8 60%);}

.sff-root .sff-diagram-box{background:#fff;border-radius:14px;padding:16px 12px;margin:14px auto 0;max-width:100%;overflow-x:auto;box-shadow:inset 0 0 0 1px #e8f0f7;}
.sff-root .sff-diagram-box svg{display:block;margin:0 auto;max-width:100%;height:auto;}

.sff-root .sff-reveal{margin-top:14px;text-align:left;background:#fbf6ff;border:1px solid #ecdcfb;border-radius:12px;padding:13px 15px;}
.sff-root .sff-reveal-h{font-family:var(--display);font-weight:700;color:var(--mayor);margin-bottom:6px;font-size:.95rem;}
.sff-root .sff-parts{display:flex;flex-wrap:wrap;gap:7px;}
.sff-root .sff-part{display:inline-flex;flex-direction:column;align-items:center;gap:2px;background:#fff;border:1px solid #e6d6f6;border-radius:9px;padding:5px 9px;}
.sff-root .sff-part .pw{font-weight:800;color:var(--ink);}
.sff-root .sff-part .pr{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--slang);font-weight:700;}
.sff-root .sff-ccss{display:inline-block;margin-top:10px;font-size:.74rem;font-weight:700;color:var(--navy);background:#eaf4ff;border-radius:7px;padding:3px 9px;}

.sff-root .sff-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:6px;}
.sff-root .sff-fld{font-weight:700;color:var(--navy);font-size:.9rem;}
.sff-root select,.sff-root input[type="search"]{font-family:var(--body);font-size:.95rem;padding:10px 12px;min-height:44px;border:2px solid #cfe2f1;border-radius:11px;background:#fff;color:var(--ink);}
.sff-root select:focus-visible,.sff-root input:focus-visible{outline:3px solid var(--sky);outline-offset:1px;}

.sff-root .sff-built{font-family:var(--display);font-weight:700;color:var(--ink);}
.sff-root .sff-visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}

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