:root{
  /* Brand */
  --gold:#d49304;
  --gold-deep:#b67d03;
  --gold-soft:#e8b34a;
  --gold-glow:rgba(212,147,4,.18);
  --navy:#002469;
  --navy-600:#0a3187;
  --ink:#0e1d3d;
  --muted:#5b6884;
  --muted-2:#8a93a8;
  /* Surfaces */
  --cream:#FBF7EE;
  --cream-2:#F4ECDA;
  --warm-white:#FFFDF8;
  --soft-blue:#e9f0fa;
  --soft-blue-2:#f3f7fd;
  --line:rgba(14,29,61,.09);
  /* System */
  --r-sm:12px; --r:18px; --r-lg:26px; --r-pill:999px;
  /* Alias of --r-pill: a bunch of selectors written for the generate-flow
     UI (.pv-act, .sefer-card__perek, .gdrop__chip, and others) reference
     var(--pill) directly. That variable was only ever declared on
     .genroot{...} below, so every one of those selectors silently lost its
     rounding -- rendering with square corners instead of a pill shape --
     anywhere it appeared outside a .genroot ancestor (My Class's own
     buttons, the homepage subject cards, etc., none of which are ever
     wrapped in .genroot). Declaring it here makes var(--pill) resolve
     everywhere, matching what every one of those selectors always visually
     intended. .genroot's own redeclaration below is now redundant but
     harmless (same value) -- left as-is rather than touched.  */
  --pill:999px;
  --shadow-sm:0 1px 2px rgba(14,29,61,.05), 0 4px 14px -6px rgba(14,29,61,.12);
  --shadow:0 2px 4px rgba(14,29,61,.04), 0 18px 40px -16px rgba(14,29,61,.22);
  --shadow-lg:0 8px 30px -10px rgba(14,29,61,.18), 0 40px 80px -30px rgba(14,29,61,.35);
  --maxw:1180px;
  --ease:cubic-bezier(.22,.61,.36,1);
}
 
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body{
  font-family:'Inter',system-ui,sans-serif;
  color:var(--ink);
  background:var(--cream);
  line-height:1.6;
  overflow-x:hidden;
}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
::selection{background:var(--gold-glow);color:var(--navy)}
 
.wrap{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 28px}
.serif{font-family:'Fraunces',Georgia,serif;font-optical-sizing:auto}
.accent{color:var(--gold)}
.accent-i{font-family:'Fraunces',serif;font-style:italic;font-weight:500;color:var(--gold)}
 
/* ============ BUTTONS ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  font-weight:550;font-size:.95rem;letter-spacing:-.01em;
  padding:.82rem 1.4rem;border-radius:var(--r-pill);
  border:1px solid transparent;cursor:pointer;
  transition:transform .35s var(--ease), box-shadow .35s var(--ease), background .25s ease, color .25s ease;
  white-space:nowrap;
}
.btn svg{transition:transform .35s var(--ease)}
.btn--gold{
  background:linear-gradient(180deg,var(--gold-soft),var(--gold));
  color:#3a2a00;
  box-shadow:0 1px 0 rgba(255,255,255,.5) inset, 0 10px 24px -10px rgba(212,147,4,.7), 0 2px 6px rgba(212,147,4,.25);
}
.btn--gold:hover{transform:translateY(-2px);box-shadow:0 1px 0 rgba(255,255,255,.55) inset,0 18px 34px -12px rgba(212,147,4,.8),0 3px 10px rgba(212,147,4,.3)}
.btn--gold:hover svg{transform:translateX(3px)}
.btn--ghost{
  background:rgba(255,255,255,.5);
  color:var(--navy);
  border-color:var(--line);
  backdrop-filter:blur(8px);
}
.btn--ghost:hover{transform:translateY(-2px);background:#fff;box-shadow:var(--shadow-sm)}
.btn--sm{padding:.5rem .95rem;font-size:.84rem}
 
/* ============ NAV ============ */
.nav{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;justify-content:center;padding:18px 20px;transition:padding .4s var(--ease)}
.nav.scrolled{padding:10px 20px}
.nav__inner{
  width:100%;max-width:1080px;
  display:flex;align-items:center;justify-content:space-between;
  gap:24px;padding:10px 12px 10px 22px;
  border-radius:var(--r-pill);
  background:rgba(255,253,248,.62);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:var(--shadow-sm), 0 1px 0 rgba(255,255,255,.6) inset;
  backdrop-filter:blur(18px) saturate(1.4);
  -webkit-backdrop-filter:blur(18px) saturate(1.4);
  transition:box-shadow .4s var(--ease), background .4s var(--ease), max-width .4s var(--ease);
}
.nav.scrolled .nav__inner{box-shadow:var(--shadow), 0 1px 0 rgba(255,255,255,.6) inset;background:rgba(255,253,248,.8)}
.nav__brand img{height:26px;width:auto}
.nav__links{display:flex;gap:6px}
.nav__links a{
  font-size:.92rem;font-weight:500;color:var(--muted);
  padding:.5rem .85rem;border-radius:var(--r-pill);
  transition:color .2s ease, background .2s ease;
}
.nav__links a:hover{color:var(--navy);background:rgba(14,29,61,.045)}
.nav__cta{padding:.6rem 1.15rem;font-size:.9rem}
.nav__burger{display:none;flex-direction:column;justify-content:center;gap:5px;width:42px;height:42px;background:none;border:0;cursor:pointer;padding:10px;border-radius:50%;transition:background .2s}
.nav__burger:hover{background:rgba(14,29,61,.05)}
.nav__burger span{display:block;height:2px;width:100%;background:var(--navy);border-radius:2px;transition:transform .3s var(--ease),opacity .2s}
.nav__burger.on span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav__burger.on span:nth-child(2){opacity:0}
.nav__burger.on span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.nav__sheet{position:fixed;inset:0;z-index:99;background:rgba(14,29,61,.18);backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .25s ease}
.nav__sheet.open{opacity:1;pointer-events:auto}
.nav__sheet-in{position:absolute;top:84px;left:16px;right:16px;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);padding:14px;display:flex;flex-direction:column;gap:4px;transform:translateY(-10px);transition:transform .28s var(--ease)}
.nav__sheet.open .nav__sheet-in{transform:translateY(0)}
.nav__sheet-in a{padding:.85rem 1rem;border-radius:14px;color:var(--ink);font-weight:500;font-size:1.02rem}
.nav__sheet-in a:hover{background:var(--soft-blue-2)}
.nav__sheet-in .btn{margin-top:8px;justify-content:center}
 
/* ============ HERO ============ */
.hero{position:relative;padding:176px 0 64px;text-align:center;overflow:hidden}
.hero__bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.hero__bg::before{ /* warm radial wash */
  content:"";position:absolute;inset:-20%;
  background:
    radial-gradient(60% 50% at 50% 0%, rgba(233,240,250,.9), transparent 70%),
    radial-gradient(40% 40% at 85% 20%, rgba(212,147,4,.07), transparent 70%),
    radial-gradient(50% 45% at 12% 30%, rgba(0,36,105,.05), transparent 70%);
}
.hero__inner{position:relative;z-index:2;max-width:880px;margin:0 auto;padding:0 28px}
.eyebrow{
  display:inline-flex;align-items:center;gap:.55rem;
  font-size:.8rem;font-weight:550;letter-spacing:.02em;color:var(--navy);
  background:rgba(255,255,255,.6);border:1px solid var(--line);
  padding:.4rem .85rem;border-radius:var(--r-pill);margin-bottom:30px;
  box-shadow:var(--shadow-sm);backdrop-filter:blur(8px);
}
.eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 4px var(--gold-glow)}
h1.hero__title{
  font-family:'Fraunces',serif;font-weight:500;
  font-size:clamp(2.7rem,6.4vw,4.7rem);
  line-height:1.04;letter-spacing:-.02em;color:var(--ink);
}
.hero__sub{
  margin:26px auto 0;max-width:620px;
  font-size:clamp(1.05rem,1.5vw,1.22rem);
  color:var(--muted);line-height:1.65;font-weight:420;
}
.hero__cta{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:38px}
.hero__note{margin-top:22px;font-size:.85rem;color:var(--muted-2);display:flex;align-items:center;justify-content:center;gap:.5rem}
.hero__note--copy{letter-spacing:.01em}
.hero__scroll{display:inline-flex;flex-direction:column;align-items:center;gap:8px;margin-top:54px;
  font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);
  background:none;border:0;cursor:pointer;transition:color .25s ease}
.hero__scroll:hover{color:var(--navy)}
.hero__scroll .mouse{width:24px;height:38px;border:1.5px solid rgba(14,29,61,.22);border-radius:999px;position:relative}
.hero__scroll .mouse::after{content:"";position:absolute;left:50%;top:7px;transform:translateX(-50%);
  width:3px;height:7px;border-radius:2px;background:var(--gold);animation:scrolldot 1.8s var(--ease) infinite}
@keyframes scrolldot{0%{opacity:0;transform:translate(-50%,0)}30%{opacity:1}70%{opacity:1}100%{opacity:0;transform:translate(-50%,12px)}}
 
/* ============ SECTION HEAD ============ */
.sec{position:relative;padding:96px 0}
section[id]{scroll-margin-top:96px}
.sec-head{text-align:center;max-width:680px;margin:0 auto 18px}
.sec-eyebrow{font-size:.8rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:14px}
.sec-head h2{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2rem,3.6vw,2.9rem);line-height:1.1;letter-spacing:-.02em;color:var(--ink)}
.sec-head p{margin-top:16px;color:var(--muted);font-size:1.08rem}
 
/* ============ SEFORIM SHELF (SUBJECT EXPLORER) ============ */
#subjects{
  background:
    radial-gradient(78% 62% at 50% 0%, var(--soft-blue-2), transparent 62%),
    linear-gradient(180deg,var(--cream),#fbf9f3 55%, var(--cream));
}
.shelf-scene{position:relative;max-width:860px;margin:78px auto 0;padding:34px 58px 6px}
.shelf-glow{position:absolute;left:50%;top:0;transform:translateX(-50%);
  width:78%;height:130px;border-radius:50%;pointer-events:none;
  background:radial-gradient(ellipse at center, rgba(212,147,4,.13), transparent 70%);filter:blur(22px)}
.shelf-viewport{position:relative;z-index:2;display:flex;justify-content:flex-start;overflow-x:auto;overflow-y:hidden;
  scrollbar-width:none;-ms-overflow-style:none;padding-top:92px;margin-top:-92px;scroll-behavior:smooth;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 34px,#000 calc(100% - 34px),transparent 100%);
  mask-image:linear-gradient(90deg,transparent 0,#000 34px,#000 calc(100% - 34px),transparent 100%)}
.shelf-viewport::-webkit-scrollbar{display:none}
.shelf-row{position:relative;z-index:2;display:flex;align-items:flex-end;gap:7px;padding:0 18px;flex:0 0 auto;margin:0 auto;perspective:1400px}
.shelf-row::after{content:"";position:absolute;left:4%;right:4%;bottom:-3px;height:24px;z-index:-1;
  background:radial-gradient(ellipse at center, rgba(20,12,4,.32), transparent 72%);filter:blur(7px)}
.shelf-nav{position:absolute;top:calc(50% - 4px);transform:translateY(-50%);z-index:8;width:44px;height:44px;border-radius:50%;
  border:1px solid rgba(212,147,4,.55);background:linear-gradient(180deg,var(--gold-soft),var(--gold));color:#fff;
  box-shadow:0 8px 18px -6px rgba(212,147,4,.8),0 1px 0 rgba(255,255,255,.45) inset;
  display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .2s var(--ease),box-shadow .2s}
.shelf-nav:hover{transform:translateY(-50%) scale(1.09);box-shadow:0 12px 24px -8px rgba(212,147,4,.95),0 1px 0 rgba(255,255,255,.5) inset}
.shelf-nav:active{transform:translateY(-50%) scale(1.02)}
.shelf-nav.left{left:7px}
.shelf-nav.right{right:7px}
 
.sefer{position:relative;width:var(--w,66px);height:var(--h,270px);border:0;padding:0;cursor:pointer;background:none;
  transform-origin:bottom center;transition:transform .45s var(--ease), filter .45s var(--ease)}
.sefer__spine{position:absolute;inset:0;border-radius:3px 6px 6px 3px;overflow:hidden;
  background:
    linear-gradient(90deg, rgba(255,255,255,.24) 0%, rgba(255,255,255,.08) 8%, rgba(255,255,255,0) 22%, rgba(0,0,0,.08) 68%, rgba(0,0,0,.2) 86%, rgba(0,0,0,.36) 100%),
    var(--c1,#13346b);
  box-shadow:inset 1.5px 0 0 rgba(255,255,255,.22), inset -2.5px 0 7px rgba(0,0,0,.28), inset 0 0 0 1px rgba(0,0,0,.08)}
/* ---- real, worn, tooled-leather look (see the app owner's reference photo
   of antique gilt-tooled spines) — four stacked layers instead of one flat
   color: uneven dark/light dye blotching, fine grain, a soft light sheen,
   and a burned-edge vignette top & bottom. Same set of layers is mirrored
   on the flying cover (.bl-cover) in the open animation, so the sefer never
   "changes look" mid-transition. ---- */
.sefer__mottle{position:absolute;inset:0;z-index:1;pointer-events:none;mix-blend-mode:multiply;opacity:.95;
  background:
    radial-gradient(ellipse 60% 26% at 10% 6%, rgba(0,0,0,.58), transparent 70%),
    radial-gradient(ellipse 50% 24% at 88% 18%, rgba(0,0,0,.4), transparent 70%),
    radial-gradient(ellipse 64% 32% at 26% 46%, rgba(0,0,0,.28), transparent 72%),
    radial-gradient(ellipse 52% 28% at 82% 58%, rgba(0,0,0,.44), transparent 70%),
    radial-gradient(ellipse 62% 34% at 34% 80%, rgba(0,0,0,.48), transparent 70%),
    radial-gradient(ellipse 48% 24% at 90% 94%, rgba(0,0,0,.4), transparent 68%),
    radial-gradient(ellipse 44% 22% at 6% 92%, rgba(0,0,0,.36), transparent 68%),
    radial-gradient(ellipse 90% 30% at 50% 0%, rgba(0,0,0,.32), transparent 60%),
    radial-gradient(ellipse 90% 30% at 50% 100%, rgba(0,0,0,.36), transparent 60%)}
/* fine leather-pore grain, plus a coarser crackle of hairline creases —
   the crackle is drawn with repeating-linear-gradient (vector, not a
   raster noise tile) specifically so it stays crisp and visible even on
   the narrowest ~64px spines, where a fine noise PNG/SVG tile would just
   wash out into mush once the browser downsamples it. */
.sefer__grain{position:absolute;inset:0;z-index:1;opacity:.5;mix-blend-mode:overlay;pointer-events:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='60'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.55' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.7'/></svg>");
  background-size:34px 34px}
.sefer__crackle{position:absolute;inset:0;z-index:1;pointer-events:none;mix-blend-mode:overlay;opacity:.5;
  background:
    repeating-linear-gradient(96deg, rgba(0,0,0,.24) 0px, transparent 1px, transparent 5px, rgba(255,255,255,.05) 6px, transparent 7px),
    repeating-linear-gradient(-8deg, rgba(0,0,0,.16) 0px, transparent 1px, transparent 9px)}
.sefer__sheen{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(115deg, transparent 26%, rgba(255,255,255,.2) 44%, rgba(255,255,255,.04) 58%, transparent 76%)}
.sefer__vignette{position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(180deg, rgba(0,0,0,.58) 0%, transparent 16%, transparent 84%, rgba(0,0,0,.62) 100%)}
/* clean page-head at the very top */
.sefer__top{position:absolute;top:0;left:3px;right:3px;height:4px;border-radius:5px 5px 0 0;z-index:5;
  background:linear-gradient(180deg,#f6efdc,#e0d4b6)}
/* the gilt-bordered title panel near the top — every antique bound sefer
   has one; ours holds the small emblem (the vertical title running the
   full spine below stays as the actual identifier — far more legible on a
   66-78px-wide spine than trying to cram a title sideways into a small
   box). Sized in %, so it scales cleanly across every subject's own h/w. */
.sefer__panel{position:absolute;left:14%;right:14%;top:8%;height:13%;z-index:3;border-radius:2px;pointer-events:none;
  border:1.5px solid var(--foil,#eccd82);opacity:.85;display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 0 rgba(255,255,255,.1), inset 0 1px 2px rgba(0,0,0,.2)}
.sefer__panel::before{content:"";position:absolute;inset:2.5px;border:1px solid var(--foil,#eccd82);opacity:.55;border-radius:1px}
.sefer__mark{width:36%;height:60%;border-radius:50%;border:1.3px solid var(--foil,#eccd82);opacity:.8}
/* three raised binding bands (real hand-bound spines have cords under the
   leather at roughly these heights) — each a gently embossed ridge with a
   thin double gilt line, exactly like the reference photo. */
.sefer__band{position:absolute;left:1.5px;right:1.5px;height:7px;z-index:2;pointer-events:none;
  background:linear-gradient(180deg, rgba(0,0,0,.42), rgba(0,0,0,0) 34%, rgba(255,255,255,.05) 50%, rgba(255,255,255,.32) 62%, rgba(0,0,0,0) 78%, rgba(0,0,0,.24) 100%)}
.sefer__band::before,.sefer__band::after{content:"";position:absolute;left:0;right:0;height:1px;background:var(--foil,#eccd82);opacity:.55}
.sefer__band::before{top:1px}
.sefer__band::after{bottom:1px}
.sefer__band--1{top:38%}
.sefer__band--2{top:61%}
.sefer__band--3{top:83%}
/* full title, running vertically up the spine — fits any length, sits
   above the bands (a real stamped title often runs right across them) */
.sefer__title{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:4;
  writing-mode:vertical-rl;text-orientation:mixed;
  font-family:'Fraunces',serif;font-weight:700;
  /* the real bug behind "still hard to read": every spine used the SAME
     fixed gold fill (#caa04a) no matter what color the leather under it
     was -- fine against navy/slate/teal, but gold-on-gold and gold-on-
     cream (two of the five covers) had almost no contrast at all, no
     matter how the shadow was tuned. Each cover already carries its own
     --foil value chosen for contrast against its own leather (dark navy
     foil on the light gold/cream covers, light gold foil on the dark
     navy/slate/teal covers) -- using that as the actual text color, not
     just the accent border, is what makes every spine legible. */
  color:var(--foil,#eccd82);
  font-size:calc(var(--w,66px) * .3);letter-spacing:.03em;
  -webkit-text-stroke: .5px rgba(0,0,0,.4);
  text-shadow:
    -.03em -.03em 0 rgba(255,255,255,.4),
    .04em .04em .03em rgba(0,0,0,.55),
    0 .03em .1em rgba(0,0,0,.35)}
.sefer__hint{position:absolute;top:-42px;left:50%;transform:translateX(-50%) translateY(6px);white-space:nowrap;
  background:#fff;border:1px solid var(--line);box-shadow:var(--shadow);
  padding:.4rem .85rem;border-radius:var(--r-pill);font-family:'Fraunces',serif;font-size:.86rem;font-weight:500;color:var(--navy);
  opacity:0;pointer-events:none;transition:opacity .35s var(--ease), transform .35s var(--ease);z-index:20}
.sefer__hint::after{content:"";position:absolute;left:50%;bottom:-5px;transform:translateX(-50%) rotate(45deg);
  width:8px;height:8px;background:#fff;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.sefer:hover{transform:translateY(-22px) scale(1.02);z-index:10;
  filter:brightness(1.04) drop-shadow(0 24px 24px rgba(20,12,4,.28))}
.sefer:hover .sefer__hint{opacity:1;transform:translateX(-50%) translateY(0)}
.sefer.launching{opacity:0}
/* book pulls off the shelf, flips to show its COVER, the cover opens, the page zooms to the generator */
.book-launch-layer{position:fixed;inset:0;z-index:9999;pointer-events:auto;overflow:hidden;perspective:1700px}
.bl-scrim{position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;
  background:radial-gradient(ellipse 80% 70% at 50% 46%, rgba(10,8,4,.28) 0%, rgba(8,7,10,.6) 68%, rgba(6,5,8,.74) 100%)}
.bl-stage{position:fixed;transform-style:preserve-3d;will-change:transform}
.bl-cover,.bl-page{position:absolute;left:50%;top:50%}
/* the front cover of the sefer — the SAME antique gilt-tooled leather
   system as the shelf spine (.sefer__mottle/__grain/__sheen/__vignette/
   __panel/__band), rebuilt at cover proportions so the sefer never visibly
   "changes look" the instant it lifts off the shelf. */
.bl-cover{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  transform-origin:left center;will-change:transform;z-index:2;border-radius:5px 10px 10px 5px;backface-visibility:hidden;overflow:hidden;
  background:linear-gradient(135deg, rgba(255,255,255,.16) 0%, rgba(255,255,255,.03) 40%, rgba(0,0,0,.10) 100%), var(--c1,#13346b);
  box-shadow:0 40px 80px -22px rgba(20,12,4,.62), inset 0 0 0 1px rgba(255,255,255,.08), inset 2px 0 6px rgba(0,0,0,.18)}
.bl-cover::before{content:"";position:absolute;inset:11px;border:1.5px solid var(--foil,#eccd82);opacity:.5;border-radius:4px;pointer-events:none;z-index:2}
.bl-mottle{position:absolute;inset:0;z-index:1;pointer-events:none;mix-blend-mode:multiply;opacity:.88;
  background:
    radial-gradient(ellipse 46% 20% at 14% 8%, rgba(0,0,0,.42), transparent 72%),
    radial-gradient(ellipse 40% 18% at 82% 14%, rgba(0,0,0,.3), transparent 72%),
    radial-gradient(ellipse 50% 22% at 24% 40%, rgba(0,0,0,.22), transparent 72%),
    radial-gradient(ellipse 44% 20% at 78% 52%, rgba(0,0,0,.34), transparent 72%),
    radial-gradient(ellipse 50% 24% at 30% 72%, rgba(0,0,0,.38), transparent 72%),
    radial-gradient(ellipse 40% 18% at 84% 84%, rgba(0,0,0,.3), transparent 72%),
    radial-gradient(ellipse 38% 18% at 12% 90%, rgba(0,0,0,.26), transparent 72%)}
.bl-grain{position:absolute;inset:0;z-index:1;opacity:.42;mix-blend-mode:overlay;pointer-events:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='60'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.55' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.7'/></svg>");
  background-size:46px 46px}
.bl-crackle{position:absolute;inset:0;z-index:1;pointer-events:none;mix-blend-mode:overlay;opacity:.42;
  background:
    repeating-linear-gradient(96deg, rgba(0,0,0,.22) 0px, transparent 1px, transparent 6px, rgba(255,255,255,.05) 7px, transparent 8px),
    repeating-linear-gradient(-8deg, rgba(0,0,0,.14) 0px, transparent 1px, transparent 11px)}
.bl-sheen{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(115deg, transparent 26%, rgba(255,255,255,.22) 44%, rgba(255,255,255,.05) 58%, transparent 76%)}
.bl-vignette{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg, rgba(0,0,0,.4) 0%, transparent 16%, transparent 78%, rgba(0,0,0,.5) 100%),
    linear-gradient(90deg, rgba(0,0,0,.3) 0%, transparent 12%, transparent 88%, rgba(0,0,0,.38) 100%)}
.bl-panel{position:absolute;left:17%;right:17%;top:9%;height:11%;z-index:2;border-radius:3px;pointer-events:none;
  border:1.5px solid var(--foil,#eccd82);opacity:.85;display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 0 rgba(255,255,255,.1), inset 0 1px 2px rgba(0,0,0,.2)}
.bl-panel::before{content:"";position:absolute;inset:3px;border:1px solid var(--foil,#eccd82);opacity:.5;border-radius:2px}
.bl-mark{width:30%;height:56%;border-radius:50%;border:1.3px solid var(--foil,#eccd82);opacity:.8}
.bl-band{position:absolute;left:7%;right:7%;height:8px;z-index:2;pointer-events:none;border-radius:1px;
  background:linear-gradient(180deg, rgba(0,0,0,.4), rgba(0,0,0,0) 34%, rgba(255,255,255,.05) 50%, rgba(255,255,255,.3) 62%, rgba(0,0,0,0) 78%, rgba(0,0,0,.22) 100%)}
.bl-band::before,.bl-band::after{content:"";position:absolute;left:0;right:0;height:1px;background:var(--foil,#eccd82);opacity:.55}
.bl-band::before{top:1px}
.bl-band::after{bottom:1px}
.bl-band--1{bottom:16%}
.bl-band--2{bottom:9%}
.bl-emblem,.bl-title{position:relative;z-index:3}
.bl-emblem{width:38px;height:38px;border-radius:50%;border:2px solid var(--foil,#eccd82);opacity:.7}
.bl-title{font-family:'Fraunces',serif;font-weight:700;text-align:center;line-height:1.12;
  letter-spacing:.01em;padding:0 16px;
  /* same per-cover --foil fill as the shelf spine's title, for the same
     reason: a fixed gold fill vanished against the gold/cream covers. */
  color:var(--foil,#eccd82);
  -webkit-text-stroke: .5px rgba(0,0,0,.4);
  text-shadow:
    -.03em -.03em 0 rgba(255,255,255,.4),
    .04em .04em .03em rgba(0,0,0,.55),
    0 .03em .1em rgba(0,0,0,.35)}
/* the inner page revealed when the cover opens, then zoomed to fill the screen */
.bl-page{transform-origin:center center;background:#fbf7ef;will-change:transform;z-index:1;opacity:0;border-radius:6px 10px 10px 6px;
  box-shadow:0 30px 80px -20px rgba(20,12,4,.5), inset 0 0 0 1px rgba(0,0,0,.03)}
/* wooden shelf board */
.shelf-board{position:relative;z-index:1}
.shelf-board__top{height:13px;border-radius:3px 3px 0 0;
  background:linear-gradient(180deg,#d6b78a,#b8966a);box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}
.shelf-board__front{position:relative;height:26px;border-radius:0 0 7px 7px;overflow:hidden;
  background:linear-gradient(180deg,#9c7a52,#6f5436);
  box-shadow:0 24px 36px -14px rgba(20,12,4,.4), inset 0 1px 0 rgba(255,255,255,.18)}
.shelf-board__front::after{content:"";position:absolute;inset:0;opacity:.4;
  background:repeating-linear-gradient(90deg, rgba(255,255,255,.05) 0 2px, rgba(0,0,0,.06) 2px 5px)}
 
.subjects-note{text-align:center;margin-top:28px;color:var(--muted-2);font-size:.9rem}
 
/* ============ HOW IT WORKS ============ */
#how{background:var(--warm-white)}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:50px}
.step{
  position:relative;padding:30px 26px 28px;border-radius:var(--r-lg);
  background:linear-gradient(180deg,#fff,var(--cream));
  border:1px solid var(--line);box-shadow:var(--shadow-sm);
  transition:transform .4s var(--ease), box-shadow .4s var(--ease);
}
.step:hover{transform:translateY(-4px);box-shadow:var(--shadow)}
.step__n{font-family:'Fraunces',serif;font-style:italic;font-size:1rem;color:var(--gold-deep);
  width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;
  background:var(--gold-glow);margin-bottom:18px}
.step h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.35rem;color:var(--ink);margin-bottom:8px}
.step p{color:var(--muted);font-size:.97rem}
.step .chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:16px}
.chip{font-size:.78rem;font-weight:500;color:var(--navy);background:var(--soft-blue);
  border:1px solid rgba(0,36,105,.07);padding:.28rem .65rem;border-radius:var(--r-pill)}
 
/* ============ WHY / COMPARISON ============ */
#why{background:linear-gradient(180deg,var(--cream),#f5eee0)}
.cmp{position:relative;display:grid;grid-template-columns:1.5fr 1fr 1.06fr;
  max-width:860px;margin:58px auto 0}
/* shadow plate behind the gold column — absolute so it doesn't consume a grid track */
.cmp__hl{position:absolute;top:0;bottom:0;left:70%;right:0;z-index:0;border-radius:18px;
  box-shadow:0 26px 50px -20px rgba(212,147,4,.5)}
/* every cell is a real grid cell, so rows are shared and always aligned */
.cmp__hd,.cmp__cell{position:relative;z-index:1;border-bottom:1px solid var(--line)}
.cmp__hd{min-height:98px;padding:20px 18px;display:flex;flex-direction:column;justify-content:center}
.cmp__cell{min-height:62px;padding:13px 20px;display:flex;align-items:center}
 
/* FEATURE column (white) */
.cmp__hd--feat{align-items:flex-start;border-bottom-color:transparent}
.cmp__feattitle{font-family:'Fraunces',serif;font-weight:500;font-size:1.18rem;color:var(--ink);line-height:1.2}
.cmp__featsub{font-size:.82rem;color:var(--muted);margin-top:5px}
.cmp__cell--feat{color:var(--ink);font-size:.97rem;font-weight:450;line-height:1.4;border-color:var(--line)}
 
/* OTHER AI column — stronger gray */
.cmp__hd--ai,.cmp__cell--ai{background:#e7eaee;text-align:center}
.cmp__hd--ai{align-items:center}
.cmp__cell--ai{flex-direction:column;justify-content:center;gap:6px;border-color:rgba(14,29,61,.07)}
.cmp__name--ai{font-family:'Fraunces',serif;font-weight:600;font-size:1.08rem;color:#5d6573}
.cmp__tag--ai{font-size:.76rem;color:#949ba6;margin-top:4px}
 
/* REBBISDESK column — stronger gold, bordered, no spill */
.cmp__hd--rd,.cmp__cell--rd{background:linear-gradient(180deg,#fff8e8,#fdf1d4);text-align:center;
  border-left:2px solid var(--gold);border-right:2px solid var(--gold)}
.cmp__hd--rd{align-items:center;border-top:2px solid var(--gold);border-bottom:0;
  border-radius:17px 17px 0 0;background:linear-gradient(180deg,var(--gold-soft),var(--gold))}
.cmp__cell--rd{flex-direction:column;justify-content:center;gap:6px;border-bottom-color:rgba(212,147,4,.2)}
.cmp__cell--rd:last-child{border-bottom:2px solid var(--gold);border-radius:0 0 17px 17px}
.cmp__name--rd{font-family:'Fraunces',serif;font-weight:600;font-size:1.16rem;color:#3a2a00}
.cmp__tag--rd{font-size:.76rem;color:#6b4e07;margin-top:4px;font-weight:500}
.cmp__badge{position:absolute;top:-13px;left:50%;transform:translateX(-50%);
  background:var(--navy);color:#fff;font-size:.64rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  padding:.32rem .8rem;border-radius:var(--r-pill);white-space:nowrap;box-shadow:var(--shadow-sm);z-index:4}
 
.mark{width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none}
.mark svg{width:14px;height:14px}
.mark--x{background:#ccd1d8;color:#727a87}
.mark--check{background:var(--gold);color:#fff;box-shadow:0 5px 12px -3px rgba(212,147,4,.8)}
.cmp__sub{font-size:.77rem;line-height:1.25}
.cmp__sub--ai{color:#8b929d}
.cmp__sub--rd{color:#6b4e07;font-weight:550}
@media (max-width:680px){
  .cmp{grid-template-columns:1.4fr .9fr .96fr;font-size:.88rem}
  .cmp__cell,.cmp__hd{padding-left:12px;padding-right:12px}
  .cmp__sub{display:none}
  .cmp__name--ai,.cmp__name--rd{font-size:.92rem}
  .cmp__feattitle{font-size:1rem}
}
 
/* ============ VISION / THE REBBE ============ */
#vision{background:linear-gradient(180deg,#012c78,#001433);color:#dde5f5;position:relative;overflow:hidden}
#vision::before{content:"";position:absolute;top:-25%;right:-8%;width:560px;height:560px;border-radius:50%;
  background:radial-gradient(circle,rgba(212,147,4,.2),transparent 65%);pointer-events:none}
#vision::after{content:"";position:absolute;bottom:-30%;left:-10%;width:480px;height:480px;border-radius:50%;
  background:radial-gradient(circle,rgba(59,90,134,.4),transparent 68%);pointer-events:none}
.vision-grid{position:relative;z-index:2;display:grid;grid-template-columns:.92fr 1.08fr;gap:56px;align-items:center}
/* portrait */
.vision-figure{margin:0}
.vision-frame{position:relative;aspect-ratio:4/5;border-radius:var(--r-lg);overflow:hidden;
  background:linear-gradient(160deg,#0a3a8a,#022156);
  border:1px solid rgba(236,205,130,.45);
  box-shadow:0 30px 70px -28px rgba(0,0,0,.7), inset 0 0 0 6px rgba(255,255,255,.03);}
.vision-frame::after{content:"";position:absolute;inset:10px;border:1px solid rgba(236,205,130,.4);border-radius:16px;pointer-events:none;z-index:3}
.vision-img{width:100%;height:100%;object-fit:cover;object-position:50% 30%;display:block}
/* respectful edge treatment — soft gold light + navy feather into the section, never over the face */
.vision-veil{position:absolute;inset:0;pointer-events:none;z-index:2;border-radius:inherit;
  background:
    radial-gradient(130% 80% at 50% -8%, rgba(236,205,130,.22), transparent 46%),
    radial-gradient(125% 120% at 50% 42%, transparent 60%, rgba(1,18,46,.5) 100%);
  box-shadow:inset 0 0 60px 8px rgba(1,18,46,.45)}
.vision-cap{margin-top:18px;text-align:center;font-size:.84rem;color:#8fa3c8;line-height:1.55}
.vision-cap b{display:block;color:#eef3fb;font-family:'Fraunces',serif;font-weight:500;font-size:1rem;margin-bottom:3px}
.vision-cap-heb{display:block;color:var(--gold-soft);font-size:1.02rem;margin-bottom:4px}
/* content */
.vision-eyebrow{font-size:.8rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-soft);margin-bottom:16px}
.vision-content h2{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2rem,3.4vw,2.8rem);line-height:1.1;letter-spacing:-.02em;color:#fff}
.vision-content > p{margin-top:20px;color:#c2cfe6;font-size:1.08rem;line-height:1.7;max-width:560px}
.vision-cta{margin-top:28px}
.vision-quote{display:block;position:relative;margin:34px 0 0;padding:28px 30px 24px 34px;border-radius:var(--r);
  background:rgba(255,255,255,.05);border:1px solid rgba(236,205,130,.25);border-left:3px solid var(--gold);
  text-decoration:none;color:inherit;cursor:pointer;
  transition:transform .35s var(--ease), box-shadow .35s var(--ease), background .3s ease, border-color .3s ease}
.vision-quote:hover{transform:translateY(-3px);background:rgba(255,255,255,.08);border-color:rgba(236,205,130,.5);
  box-shadow:0 24px 50px -22px rgba(0,0,0,.6)}
.vision-quote .mark{position:absolute;top:-16px;left:18px;font-family:'Fraunces',serif;font-size:4rem;color:var(--gold);opacity:.5;line-height:1}
.vision-quote p{font-family:'Fraunces',serif;font-style:italic;font-weight:400;font-size:1.16rem;line-height:1.6;color:#f3f6fc}
.vision-quote p [lang=he]{font-style:normal;font-size:1.12em}
.vision-cite{display:block;margin-top:16px;font-size:.84rem;color:#9fb1d0;line-height:1.5}
.vision-cite-name{display:block;color:var(--gold-soft);font-size:1.04rem;margin-bottom:2px}
.vision-more{display:inline-flex;align-items:center;gap:.4rem;margin-top:16px;
  font-family:'Inter';font-style:normal;font-size:.82rem;font-weight:600;letter-spacing:.02em;color:var(--gold-soft)}
.vision-more svg{transition:transform .35s var(--ease)}
.vision-quote:hover .vision-more svg{transform:translateX(4px)}
.vision-src{margin-top:22px;font-size:.84rem;color:#8298bf;line-height:1.65}
.vision-src b{color:#b7c6e2;font-weight:600}
.vision-src [lang=he]{color:var(--gold-soft);font-size:1.08em}
[lang=he]{font-family:'Frank Ruhl Libre','Fraunces',serif;font-weight:500}
@media (max-width:820px){
  .vision-grid{grid-template-columns:1fr;gap:36px}
  .vision-figure{max-width:360px;margin:0 auto}
}
 
/* ============ SOURCE OVERLAY (in-page) ============ */
#srcOverlay{position:fixed;inset:0;z-index:300;background:var(--cream);overflow-y:auto;
  opacity:0;visibility:hidden;transition:opacity .35s var(--ease)}
#srcOverlay.open{opacity:1;visibility:visible}
.so-bar{position:sticky;top:0;background:rgba(251,247,238,.85);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line);z-index:2}
.so-bar__in{max-width:760px;margin:0 auto;padding:14px 28px;display:flex;align-items:center;justify-content:space-between}
.so-bar__in img{height:24px}
.so-close{display:inline-flex;align-items:center;gap:.45rem;font-size:.9rem;font-weight:500;color:var(--muted);padding:.45rem .9rem;border-radius:999px;border:1px solid var(--line);background:#fff;cursor:pointer;font-family:inherit;transition:.2s}
.so-close:hover{color:var(--navy);box-shadow:var(--shadow-sm)}
.so-close svg{transition:transform .3s var(--ease)}.so-close:hover svg{transform:translateX(-3px)}
.so-wrap{max-width:760px;margin:0 auto;padding:0 28px}
.so-head{padding:56px 0 8px;text-align:center}
.so-eyebrow{font-size:.78rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:14px}
.so-head h2{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(1.9rem,4.5vw,2.7rem);line-height:1.1;letter-spacing:-.02em;color:var(--ink)}
.so-head p{margin-top:12px;color:var(--muted);font-size:1.02rem}
.so-q{margin:40px 0 10px;padding:36px 34px;border-radius:var(--r-lg);position:relative;background:linear-gradient(165deg,#fff,#fbf4e4);border:1px solid var(--line);box-shadow:0 30px 60px -30px rgba(14,29,61,.3)}
.so-q::before{content:"";position:absolute;left:0;top:24px;bottom:24px;width:3px;border-radius:3px;background:linear-gradient(var(--gold-soft),var(--gold))}
.so-q .heb{font-family:'Frank Ruhl Libre',serif;font-size:1.45rem;line-height:1.7;color:var(--navy);direction:rtl;text-align:right;margin-bottom:16px}
.so-q .en{font-family:'Fraunces',serif;font-style:italic;font-size:1.22rem;line-height:1.5;color:var(--ink)}
.so-q .en b{font-style:normal;font-weight:600}
.so-label{margin:44px 0 16px;font-family:'Fraunces',serif;font-size:1.35rem;font-weight:500;color:var(--ink)}
.so-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.so-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px 20px}
.so-card.full{grid-column:1/-1}
.so-card h4{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:8px;font-weight:600}
.so-card p{font-size:.96rem;color:var(--ink)}
.so-card .he{font-family:'Frank Ruhl Libre',serif;color:var(--navy);font-size:1.12rem}
.so-card a{color:var(--gold-deep);font-weight:600;text-decoration:none;border-bottom:1px solid rgba(212,147,4,.4)}
.so-note{font-size:.85rem;color:var(--muted-2);margin-top:6px;font-style:italic}
.so-refs{display:flex;flex-direction:column;gap:14px}
.so-ref{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px 20px}
.so-ref .top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:6px}
.so-ref .name{font-family:'Fraunces',serif;font-size:1.1rem;font-weight:500;color:var(--ink)}
.so-ref .loc{font-size:.8rem;color:var(--gold-deep);font-weight:600;white-space:nowrap}
.so-ref .he{font-family:'Frank Ruhl Libre',serif;font-size:1.18rem;color:var(--navy);direction:rtl;text-align:right;margin:6px 0 10px;line-height:1.7}
.so-ref .en{color:var(--muted);font-size:.95rem}
.so-closing{margin:40px 0;padding:24px 28px;border-radius:var(--r);background:#fff8ea;border:1px solid rgba(212,147,4,.3)}
.so-closing h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.2rem;color:var(--ink);margin-bottom:8px}
.so-closing p{color:var(--muted)}
.so-foot{padding:24px 0 70px;text-align:center;color:var(--muted-2);font-size:.85rem}
@media (max-width:560px){.so-grid{grid-template-columns:1fr}.so-q{padding:28px 24px}}
 
/* ============ FAQ ============ */
#faq{background:var(--cream)}
.faq{max-width:780px;margin:46px auto 0}
.faq__item{border-bottom:1px solid var(--line)}
.faq__q{width:100%;text-align:left;background:none;border:0;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:24px 4px;font-family:'Fraunces',serif;font-weight:500;font-size:1.22rem;color:var(--ink)}
.faq__q .ic{flex:none;width:30px;height:30px;border-radius:50%;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;color:var(--gold-deep);transition:transform .4s var(--ease),background .3s}
.faq__item.open .faq__q .ic{transform:rotate(45deg);background:var(--gold-glow)}
.faq__a{overflow:hidden;max-height:0;transition:max-height .5s var(--ease)}
.faq__a p{padding:0 4px 26px;color:var(--muted);font-size:1.02rem;max-width:90%}
 
/* ============ FOOTER ============ */
footer{background:linear-gradient(180deg,#002469,#001230);color:#cdd6e8;padding:74px 0 30px;position:relative;overflow:hidden}
footer::before{content:"";position:absolute;top:-40%;right:-10%;width:520px;height:520px;border-radius:50%;
  background:radial-gradient(circle,rgba(212,147,4,.16),transparent 65%);pointer-events:none}
.foot-top{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:34px}
.foot-brand img{height:30px;margin-bottom:18px}
.foot-brand p{color:#9fb0cf;font-size:.96rem;max-width:300px}
.foot-wait{margin-top:22px;display:flex;gap:8px;max-width:330px}
.foot-wait input{flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);
  border-radius:var(--r-pill);padding:.7rem 1rem;color:#fff;font-family:inherit;font-size:.9rem;outline:none}
.foot-wait input::placeholder{color:#7e8eae}
.foot-wait input:focus{border-color:var(--gold-soft)}
.foot-col h5{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:#7e8eae;margin-bottom:16px;font-weight:600}
.foot-col a{display:block;color:#cdd6e8;font-size:.95rem;padding:6px 0;transition:color .2s}
.foot-col a:hover{color:var(--gold-soft)}
.foot-bottom{margin-top:54px;padding-top:24px;border-top:1px solid rgba(255,255,255,.1);
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;color:#7e8eae;font-size:.85rem}
 
/* ============ REVEAL ============ */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .8s var(--ease), transform .8s var(--ease)}
.reveal.in{opacity:1;transform:none}
 
/* ============ RESPONSIVE ============ */
@media (max-width:860px){
  .nav__links{display:none}
  .nav__cta{display:none}
  .nav__burger{display:flex}
  .steps{grid-template-columns:1fr}
  .compare{grid-template-columns:1fr}
  .foot-top{grid-template-columns:1fr 1fr;gap:30px}
  .foot-brand{grid-column:1/-1}
  .shelf-viewport{justify-content:flex-start;-webkit-overflow-scrolling:touch}
  .shelf-row{padding:0 16px 4px;gap:9px}
  .sefer{flex:0 0 auto;transform:scale(.92)}
  .sefer:hover{transform:translateY(-14px) scale(.94)}
  .shelf-nav{display:none}
}
@media (max-width:520px){
  .hero{padding:150px 0 80px}
  .foot-top{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none !important}
  html{scroll-behavior:auto}
}
 
/* ===== sound toggle (was injected by JS in the concept) ===== */
.sfx-toggle{position:fixed;right:20px;bottom:20px;z-index:200;width:44px;height:44px;border-radius:50%;
  border:1px solid rgba(255,255,255,.7);background:rgba(255,253,248,.7);backdrop-filter:blur(14px) saturate(1.3);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);box-shadow:0 2px 4px rgba(14,29,61,.06),0 14px 30px -12px rgba(14,29,61,.3);
  cursor:pointer;display:flex;align-items:center;justify-content:center;color:#0e2a63;transition:transform .3s cubic-bezier(.22,.61,.36,1),box-shadow .3s,color .2s}
.sfx-toggle:hover{transform:translateY(-2px) scale(1.04)}
.sfx-toggle.off{color:#9aa1ac}
.sfx-toggle svg{width:19px;height:19px}
 
 
/* ===================== GENERATE FLOW (scoped under .genroot) ===================== */
.genroot{--soft:#EAF0F9;--soft-2:#f3f7fd;--line-2:rgba(14,29,61,.16);--pill:999px;background:var(--cream);min-height:100vh;display:block}
.genroot .gnav{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:14px 26px;background:rgba(251,247,238,.82);backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);border-bottom:1px solid var(--line)}
.genroot .gnav__l{display:flex;align-items:center;gap:16px}
.genroot .gnav__l img{height:24px}
.genroot .gnav__crumb{display:flex;align-items:center;flex-wrap:wrap;font-size:.86rem;color:var(--muted)}
.genroot .gnav__crumb .c{color:var(--muted-2)}
.genroot .gnav__crumb .c.on{color:var(--navy);font-weight:600}
.genroot .gnav__crumb .sep{color:var(--line-2)}
.genroot .gback{display:inline-flex;align-items:center;gap:.4rem;font-size:.88rem;font-weight:500;color:var(--muted);border:1px solid var(--line);border-radius:var(--pill);padding:.45rem .9rem;background:#fff;transition:.2s}
.genroot .gback:hover{color:var(--navy);box-shadow:var(--shadow-sm)}
.genroot .gwrap{max-width:1200px;margin:0 auto;padding:34px 26px 120px;display:grid;grid-template-columns:1fr 372px;gap:34px;align-items:start}
.genroot .ghead{margin-bottom:26px}
.genroot .gkick{font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);font-weight:600;margin-bottom:10px}
.genroot .ghead h1{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2rem,4vw,2.7rem);letter-spacing:-.02em;color:var(--ink)}
.genroot .ghead p{margin-top:8px;color:var(--muted);font-size:1.02rem;max-width:34rem}
.genroot .gstep{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px;margin-bottom:18px;box-shadow:var(--shadow-sm);transition:opacity .4s var(--ease),filter .4s var(--ease)}
.genroot .gstep.locked{opacity:.45;pointer-events:none;filter:saturate(.6)}
.genroot .gstep__head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.genroot .gstep__n{flex:none;width:28px;height:28px;border-radius:50%;background:var(--soft);color:var(--navy);font-weight:700;font-size:.85rem;display:flex;align-items:center;justify-content:center}
.genroot .gstep.done .gstep__n{background:var(--gold);color:#3a2a00}
.genroot .gstep__t{font-family:'Fraunces',serif;font-weight:500;font-size:1.3rem;color:var(--ink)}
.genroot .gstep__hint{margin-left:auto;font-size:.82rem;color:var(--muted-2)}
.genroot .opt-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.genroot .opt{border:1.5px solid var(--line);border-radius:var(--r);padding:14px 16px;cursor:pointer;background:var(--warm-white);transition:.22s var(--ease);display:flex;flex-direction:column;gap:4px;text-align:left;font-family:inherit}
.genroot .opt:hover{border-color:var(--gold-soft);transform:translateY(-2px);box-shadow:var(--shadow-sm)}
.genroot .opt.sel{border-color:var(--gold);background:linear-gradient(180deg,#fff,#fdf6e7);box-shadow:0 0 0 1px var(--gold) inset}
.genroot .opt .nm{font-weight:600;color:var(--navy);font-size:1rem}
.genroot .opt .nm .he{font-family:'Frank Ruhl Libre',serif;font-weight:500;font-size:1.15rem}
.genroot .opt .ds{font-size:.8rem;color:var(--muted-2)}

/* Chumash's "Choose a Sefer" step — the Five Books get a bigger, more
   ceremonial hero-card treatment than a generic .opt: a real, clearly-visible
   symbolic illustration (ChumashMotif in GenerateFlow.tsx) sitting in its own
   space ABOVE the Hebrew/English title — not a faded watermark behind it. */
.sefer-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));gap:16px}
.sefer-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px;
  border:1.5px solid var(--line);border-radius:18px;padding:20px 16px 18px;cursor:pointer;font-family:inherit;text-align:center;
  background:radial-gradient(120% 100% at 50% -10%, rgba(212,147,4,.08), transparent 60%), linear-gradient(180deg,#fff,var(--cream-2));
  transition:transform .28s var(--ease),border-color .28s var(--ease),box-shadow .28s var(--ease)}
.sefer-card:hover{transform:translateY(-4px);border-color:var(--gold-soft);box-shadow:0 22px 40px -22px rgba(20,12,4,.28)}
.sefer-card.sel{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold) inset,0 22px 40px -20px rgba(212,147,4,.4);
  background:radial-gradient(120% 100% at 50% -10%, rgba(212,147,4,.16), transparent 60%), linear-gradient(180deg,#fff,#fdf6e7)}
.sefer-card__motif{position:relative;width:100%;height:64px;display:flex;align-items:center;justify-content:center;
  color:var(--gold-deep);opacity:.92;pointer-events:none;transition:opacity .28s var(--ease),color .28s var(--ease),transform .28s var(--ease)}
.sefer-card__motif svg{width:100%;height:100%}
.sefer-card__motif img{width:auto;height:100%;max-width:100%;object-fit:contain}
.sefer-card:hover .sefer-card__motif{opacity:1;transform:translateY(-2px)}
.sefer-card.sel .sefer-card__motif{opacity:1;color:var(--gold)}
.sefer-card__body{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:5px;width:100%}
.sefer-card__he{font-family:'Frank Ruhl Libre',serif;font-weight:600;font-size:1.55rem;color:var(--gold-deep);line-height:1.15}
.sefer-card__en{font-family:'Fraunces',serif;font-weight:500;font-style:italic;font-size:1.08rem;color:var(--ink);letter-spacing:.01em}
.sefer-card__perek{margin-top:4px;font-size:.72rem;font-weight:600;letter-spacing:.03em;color:var(--muted-2);
  border:1px solid var(--line);border-radius:var(--pill);padding:.18rem .65rem;background:#fff}
.sefer-card.sel .sefer-card__perek{border-color:rgba(212,147,4,.4);color:var(--gold-deep)}
@media (max-width:560px){.sefer-card-grid{grid-template-columns:1fr 1fr}.sefer-card{min-height:168px}.sefer-card__motif{height:52px}}

/* .gchip/.gchips are shared pill-button primitives -- used inside the
   generator flow (.genroot) but also by My Class (assign homework's
   material-mode chips, the note/milestone toggle) and the Tools tab, none
   of which sit under .genroot. Kept unscoped so every one of those actually
   picks up real RebbisDesk styling instead of rendering as bare, unstyled
   buttons (which is what a rebbi was seeing on the assign-homework page). */
.gchips{display:flex;flex-wrap:wrap;gap:9px}
.gchip{border:1.5px solid var(--line);border-radius:var(--pill);padding:.5rem 1rem;font-size:.92rem;color:var(--navy);background:var(--warm-white);cursor:pointer;transition:.18s var(--ease);font-family:inherit}
.gchip:hover{border-color:var(--gold-soft);background:#fff}
.gchip.sel{border-color:var(--gold);background:var(--gold);color:#3a2a00;font-weight:600}

/* "Coming soon" — Rebbe/sefer not yet backed by a verified source
   (lib/ai/sources.ts). Visible but inert: no hover lift, no click. */
.genroot .opt.soon,.gchip.soon{cursor:not-allowed;opacity:.5;background:var(--soft);color:var(--muted-2)}
.genroot .opt.soon:hover{transform:none;box-shadow:none;border-color:var(--line)}
.gchip.soon:hover{border-color:var(--line);background:var(--soft)}
.genroot .soon-tag{font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted-2);background:#fff;border:1px solid var(--line);border-radius:var(--pill);padding:.15rem .5rem;margin-top:2px;display:inline-block;width:fit-content}
.gchip .soon-tag{margin-top:0;margin-inline-start:.5em}

/* ============ CHASSIDUS GENERATOR — a deliberately different flow ============
   Everything else in /create/[subject] shares one neutral look across every
   subject. Chassidus gets its own moment: a warm wash on the page itself,
   a candle in the kicker, gold-tinted chips for sefer/section picking, and
   -- the centerpiece -- a real portrait-framed "name card" per Rebbe (see
   lib/rebbeim.ts + the RebbeCard component in GenerateFlow.tsx). A Rebbe
   with no photo on file yet still gets the full gold-framed treatment,
   just with a monogram instead of a photo -- never a broken image, never
   a half-finished-looking card. */
.genroot--chassidus{background:radial-gradient(1100px 380px at 50% -140px, rgba(212,147,4,.11), transparent 62%), var(--cream)}
.genroot--chassidus .gkick{display:flex;align-items:center;gap:.4em}
.gkick__flame{font-size:1em;filter:drop-shadow(0 1px 1px rgba(212,147,4,.35))}

/* deeper chassidus levels (sefer, section, ...) — same chip shape as
   everywhere else, just warmed up to feel like part of this flow rather
   than a generic picker. */
.genroot .chassidus-step .gchip{border-color:rgba(212,147,4,.3);background:linear-gradient(180deg,#fff,var(--cream-2));font-family:'Frank Ruhl Libre','Fraunces',serif;font-size:.96rem}
.genroot .chassidus-step .gchip:hover{border-color:var(--gold)}
.genroot .chassidus-step .gchip.sel{background:linear-gradient(180deg,var(--gold-soft),var(--gold));border-color:var(--gold-deep);box-shadow:0 8px 20px -10px rgba(212,147,4,.55)}

/* the Rebbe step itself -- normal RebbisDesk colors, same plain white
   card + gold-accent treatment as every other .gstep in the generator
   (no separate dark panel). */
.genroot .gstep.rebbe-step{position:relative}

/* Each card is its own small "hero" -- a big glowing gold-framed portrait
   on top, Hebrew title + English name below -- loosely inspired by the app
   owner's own rough mockup (a large glowing portrait over a seforim list),
   scaled down to fit seven of these in one grid rather than one per screen. */
.rebbe-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:16px}

.rebbe-card{
  position:relative; display:flex; flex-direction:column; align-items:center; gap:12px; width:100%;
  padding:22px 14px 18px; text-align:center; cursor:pointer; font-family:inherit;
  border-radius:20px; border:1.5px solid var(--line);
  background:linear-gradient(180deg,#fff,var(--cream-2));
  transition:transform .3s var(--ease), border-color .3s var(--ease), background .3s var(--ease), box-shadow .3s var(--ease);
}
.rebbe-card:hover{transform:translateY(-4px); border-color:var(--gold-soft); box-shadow:var(--shadow-sm)}
.rebbe-card.sel{border-color:var(--gold); background:linear-gradient(180deg,#fff,#fdf6e7); box-shadow:0 0 0 1px var(--gold) inset}

.rebbe-card__portrait{position:relative; flex:none; width:104px; height:104px}
.rebbe-card__glow{position:absolute; inset:-26px; border-radius:50%; background:radial-gradient(circle, rgba(232,179,74,.5), rgba(232,179,74,0) 68%); filter:blur(12px); opacity:.55; transition:opacity .3s var(--ease)}
.rebbe-card:hover .rebbe-card__glow,.rebbe-card.sel .rebbe-card__glow{opacity:1}
.rebbe-card__ring{position:absolute; inset:-6px; border-radius:50%; border:1px solid rgba(232,179,74,.4); opacity:0; transition:opacity .3s var(--ease), transform .3s var(--ease); transform:scale(.92)}
.rebbe-card:hover .rebbe-card__ring,.rebbe-card.sel .rebbe-card__ring{opacity:1; transform:scale(1)}
.rebbe-card__portrait img{position:relative;z-index:1;width:100%;height:100%;border-radius:50%;object-fit:cover;object-position:top center;border:2.5px solid var(--gold-soft);box-shadow:0 0 0 1px rgba(0,0,0,.08),0 8px 18px rgba(14,29,61,.14);display:block}
.rebbe-card__mono{position:relative;z-index:1;width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Fraunces',serif;font-weight:600;font-size:2.1rem;color:#3a2a00;background:linear-gradient(160deg,var(--gold-soft),var(--gold));border:2.5px solid rgba(255,255,255,.6)}
/* "plate" variant — a real sefer title page standing in for a portrait
   (lib/rebbeim.ts) reads as a small framed book cover, not a circular
   crop that would slice into its own ornamental border. */
.rebbe-card__portrait--plate .rebbe-card__glow{border-radius:14px}
.rebbe-card__portrait--plate .rebbe-card__ring{border-radius:14px}
.rebbe-card__portrait--plate img{border-radius:8px;object-position:center}
.rebbe-card__portrait--plate .rebbe-card__mono{border-radius:8px}
.rebbe-card__names{display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0}
.rebbe-card__he{font-family:'Frank Ruhl Libre',serif;font-size:1rem;color:var(--gold-deep);line-height:1.25}
.rebbe-card__en{font-weight:600;color:var(--navy);font-size:.96rem;line-height:1.3}
.rebbe-card.sel .rebbe-card__en{color:var(--ink)}

@media (max-width:640px){
  .rebbe-grid{grid-template-columns:repeat(3,1fr);gap:10px}
  .rebbe-card{padding:16px 8px 14px}
  .rebbe-card__portrait{width:76px;height:76px}
}
@media (max-width:400px){
  .rebbe-grid{grid-template-columns:1fr 1fr}
}

/* "Coming soon" Rebbe card -- a real, canonical Rebbe (lib/rebbeim.ts's
   ALL_REBBEIM) with no real Library content uploaded yet. Shown, never
   hidden, so a rebbi can see the full lineage -- but dimmed, unclickable,
   and clearly labeled, never a fabricated or generatable source. */
.rebbe-card.locked{cursor:not-allowed;opacity:.55;filter:grayscale(.4)}
.rebbe-card.locked:hover{transform:none;box-shadow:none;border-color:var(--line)}
.rebbe-card__soon{margin-top:3px}

.genroot .row{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-end}
.genroot .field label{display:block;font-size:.8rem;color:var(--muted);margin-bottom:7px;font-weight:500}
.genroot .stepper{display:inline-flex;align-items:center;border:1.5px solid var(--line);border-radius:var(--pill);overflow:hidden;background:#fff}
.genroot .stepper button{border:0;background:none;width:38px;height:40px;font-size:1.2rem;color:var(--navy);cursor:pointer;transition:.15s;font-family:inherit}
.genroot .stepper button:hover{background:var(--soft)}
.genroot .stepper .val{width:54px;min-width:54px;text-align:center;font-weight:600;font-size:1rem;color:var(--navy);border:0;background:none;outline:none;font-family:inherit;padding:0;-moz-appearance:textfield}
.genroot .stepper .val::-webkit-outer-spin-button,.genroot .stepper .val::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.genroot .stepper .val:focus{background:var(--soft)}
.genroot .mini{width:64px;height:40px;border:1.5px solid var(--line);border-radius:12px;text-align:center;font-family:inherit;font-size:1rem;color:var(--navy);outline:none}
.genroot .mini:focus{border-color:var(--gold-soft)}
.genroot .field.grow{flex:1 1 100%;max-width:460px}
.genroot .textin{width:100%;height:46px;padding:0 16px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;font-size:1rem;color:var(--navy);background:#fff;outline:none;transition:.15s}
.genroot .textin::placeholder{color:var(--muted-2)}
.genroot .textin:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.genroot .tilde{color:var(--muted-2);padding-bottom:10px}

/* RebbisDesk-style search + dropdown (ChassidusSearchDropdown /
   ChassidusChapterDropdown in GenerateFlow.tsx) -- deliberately NOT a
   native <select>: a styled text input that opens a floating, scrollable
   panel of real options, matching the app's own type + color language
   rather than the OS's default picker chrome. */
.gdrop{position:relative;max-width:460px}
/* the "RebbisDesk Search Bar" -- the app's one official search control
   (see ChassidusSearchDropdown/ChassidusChapterDropdown). Always the real,
   typeable input on screen -- never a closed placeholder button someone
   has to click through first. */
.gdrop__label{font-size:.7rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:6px}
.gdrop__input{width:100%;height:46px;padding:0 16px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;font-size:1rem;color:var(--navy);background:#fff;outline:none;transition:.15s;text-align:left;cursor:text}
.gdrop__input::placeholder{color:var(--muted-2)}
.gdrop.open .gdrop__input,.gdrop__input:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.gdrop__panel{position:absolute;z-index:20;top:calc(100% + 8px);left:0;right:0;max-height:320px;overflow-y:auto;background:#fff;border:1.5px solid var(--gold-soft);border-radius:16px;box-shadow:0 24px 48px -20px rgba(14,29,61,.35);padding:8px}
.gdrop__list{max-height:260px;overflow-y:auto}
.gdrop__opt{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:.6rem .7rem;border:0;border-radius:10px;background:none;font-family:inherit;font-size:.94rem;color:var(--navy);cursor:pointer;transition:.15s}
.gdrop__opt:hover{background:var(--soft-2)}
.gdrop__opt.sel{background:var(--gold-glow);color:var(--gold-deep);font-weight:600}
.gdrop__opt.disabled{opacity:.4;cursor:not-allowed}
.gdrop__opt.disabled:hover{background:none}
.gdrop__box{flex:none;width:18px;height:18px;border-radius:5px;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:.78rem;color:var(--gold-deep)}
.gdrop__opt.sel .gdrop__box{border-color:var(--gold);background:var(--gold);color:#fff}
.gdrop__empty{padding:.7rem;color:var(--muted-2);font-size:.9rem}
.gdrop__hint{padding:.4rem .7rem 0;font-size:.8rem;color:var(--muted-2)}
.gdrop__chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.gdrop__chip{border:1.5px solid var(--gold);border-radius:var(--pill);padding:.4rem .8rem;font-size:.86rem;font-weight:600;color:var(--gold-deep);background:var(--gold-glow);cursor:pointer;font-family:inherit;transition:.15s}
.gdrop__chip:hover{background:rgba(212,147,4,.28)}
.genroot .gstep.rebbe-step .gdrop__input{color:var(--navy)}
.genroot .opt-note{display:flex;gap:10px;align-items:flex-start;background:var(--soft-2);border:1px solid rgba(0,36,105,.08);border-radius:var(--r);padding:12px 14px;font-size:.88rem;color:var(--navy);line-height:1.5}
.genroot .opt-note svg{flex:none;margin-top:2px;color:var(--gold-deep)}
.genroot .subhead{font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2);font-weight:600;margin:18px 0 9px}
.genroot .brief{position:sticky;top:92px;background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}
.genroot .brief__top{padding:18px 20px;background:linear-gradient(180deg,#fff,#fbf4e4);border-bottom:1px solid var(--line)}
.genroot .brief__top .t{font-family:'Fraunces',serif;font-weight:500;font-size:1.2rem;color:var(--ink)}
.genroot .brief__top .s{font-size:.82rem;color:var(--muted);margin-top:2px}
.genroot .brief__body{padding:8px 20px 4px}
.genroot .brief__row{display:flex;justify-content:space-between;gap:14px;padding:11px 0;border-bottom:1px solid var(--line);font-size:.92rem}
.genroot .brief__row:last-child{border-bottom:0}
.genroot .brief__row .k{color:var(--muted)}
.genroot .brief__row .v{color:var(--navy);font-weight:600;text-align:right}
.genroot .brief__row .v.empty{color:var(--muted-2);font-weight:400;font-style:italic}
.genroot .brief__foot{padding:16px 20px 20px}
.genroot .gen-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:.5rem;border:0;cursor:pointer;font-weight:600;font-size:1rem;padding:.95rem 1rem;border-radius:var(--pill);background:linear-gradient(180deg,var(--gold-soft),var(--gold));color:#3a2a00;box-shadow:0 10px 24px -10px rgba(212,147,4,.8);transition:.3s var(--ease);font-family:inherit}
.genroot .gen-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 16px 30px -12px rgba(212,147,4,.9)}
.genroot .gen-btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;filter:grayscale(.3)}
.genroot .assure{margin-top:14px;font-size:.78rem;color:var(--muted-2);line-height:1.5;text-align:center}
.genroot .assure b{color:var(--gold-deep)}
.genroot .pv{position:fixed;inset:0;z-index:100;background:rgba(8,18,40,.55);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;visibility:hidden;transition:.35s var(--ease)}
.genroot .pv.open{opacity:1;visibility:visible}
.genroot .pv__card{background:var(--cream);border-radius:var(--r-lg);max-width:880px;width:100%;max-height:90vh;overflow:auto;box-shadow:0 40px 90px -30px rgba(0,0,0,.6);transform:translateY(14px);transition:.35s var(--ease)}
.genroot .pv.open .pv__card{transform:none}
.genroot .pv__head{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(251,247,238,.9);backdrop-filter:blur(10px)}
.genroot .pv__head .t{font-family:'Fraunces',serif;font-size:1.25rem;color:var(--ink)}
.genroot .pv__x{border:1px solid var(--line);background:#fff;border-radius:50%;width:34px;height:34px;cursor:pointer;color:var(--muted);font-size:1.1rem}
.genroot .pv__body{padding:26px 24px}
.pv-load{display:flex;flex-direction:column;align-items:center;gap:18px;padding:60px 0;text-align:center}
.genroot .spin{width:44px;height:44px;border-radius:50%;border:3px solid var(--soft);border-top-color:var(--gold);animation:gspin 1s linear infinite}
@keyframes gspin{to{transform:rotate(360deg)}}
.pv-load .msg{color:var(--muted);font-size:.95rem}
.pv-load .msg b{color:var(--navy)}
.pv-result{display:grid;grid-template-columns:300px 1fr;gap:26px;align-items:start}
.pv-doc{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:24px 22px;min-height:300px}
.pv-doc__title{font-family:'Fraunces',serif;font-size:1.45rem;color:var(--navy);font-weight:600;margin-bottom:3px}
.pv-doc__sub{font-size:.82rem;color:var(--muted-2);margin-bottom:20px}
.pv-doc__lines{display:flex;flex-direction:column;gap:11px}
.pv-doc__lines span{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--soft-blue),#eef3fb)}
.pv-side h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.4rem;color:var(--ink);margin-bottom:6px}
.pv-side .lead{color:var(--muted);font-size:.95rem;margin-bottom:16px}
.pv-actions{display:flex;flex-direction:column;gap:10px;margin-bottom:18px}
.pv-act{display:flex;align-items:center;justify-content:center;gap:.6rem;border:1.5px solid var(--line);border-radius:var(--pill);padding:.7rem 1.1rem;font-weight:600;font-size:.92rem;color:var(--navy);background:#fff;cursor:pointer;transition:.2s;font-family:inherit}
.pv-act:hover{border-color:var(--gold-soft);box-shadow:var(--shadow-sm)}
.pv-act.primary{background:linear-gradient(180deg,var(--gold-soft),var(--gold));color:#3a2a00;border-color:transparent}
.genroot .guard{background:#fff8ea;border:1px solid rgba(212,147,4,.3);border-radius:var(--r);padding:14px 16px;font-size:.84rem;color:var(--ink);line-height:1.55}
.genroot .guard b{color:var(--gold-deep)}
@media (max-width:920px){
  .genroot .gwrap{grid-template-columns:1fr;padding-bottom:150px}
  .genroot .gnav__crumb{display:none}
  .genroot .brief{position:fixed;left:12px;right:12px;bottom:12px;top:auto;z-index:60}
  .genroot .brief__top,.genroot .brief__body{display:none}
  .pv-result{grid-template-columns:1fr}
}
/* Every .pv modal (drafts, class detail, add-talmid, batch grading, report
   cards, newsletters…) shares this chrome — on a phone the same fixed
   padding used at desktop size eats a large share of a ~375px screen before
   any real content, which is the single biggest source of "squished"
   modals. Tighten it uniformly here rather than per-modal. */
@media (max-width:640px){
  .genroot .pv{padding:0}
  .genroot .pv__card{max-height:100vh;height:100%;border-radius:0}
  .genroot .pv__head{padding:14px 16px}
  .genroot .pv__body{padding:16px}
}
 
/* ============ MARKETING / CONTENT PAGES ============ */
.page{min-height:100vh;display:flex;flex-direction:column;background:var(--cream)}
.pagebar{position:sticky;top:0;z-index:50;background:rgba(251,247,238,.82);backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid var(--line)}
.pagebar__in{display:flex;align-items:center;justify-content:space-between;height:68px}
.pagebar__brand img{height:30px;display:block}
.pagebar__nav{display:flex;align-items:center;gap:26px}
.pagebar__nav a{color:var(--muted);font-weight:500;font-size:.95rem;text-decoration:none;transition:color .15s}
.pagebar__nav a:hover{color:var(--navy)}
.pagebar__cta{font-size:.9rem!important;padding:.55rem 1.05rem!important}
.pmain{flex:1}
.phero{position:relative;padding:150px 0 6px;text-align:center;overflow:hidden}
.phero::before{content:"";position:absolute;inset:-30% 0 auto 0;height:420px;z-index:0;pointer-events:none;
  background:radial-gradient(60% 70% at 50% 0%,rgba(233,240,250,.85),transparent 72%),radial-gradient(36% 50% at 82% 8%,rgba(212,147,4,.07),transparent 70%)}
.phero > .wrap{position:relative;z-index:1}
.pbody--wide{max-width:1280px}
.phero__kick{font-size:.8rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:16px}
.phero h1{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2.2rem,4.6vw,3.5rem);line-height:1.06;letter-spacing:-.02em;color:var(--ink);max-width:780px;margin:0 auto}
.phero__lead{margin:22px auto 0;max-width:640px;color:var(--muted);font-size:1.14rem;line-height:1.62}
.pbody{padding:0 0 84px}
 
.prose{max-width:680px;margin:0 auto}
.prose p{color:var(--muted);font-size:1.07rem;line-height:1.75;margin:0 0 18px}
.prose h2{font-family:'Fraunces',serif;font-weight:500;font-size:1.6rem;color:var(--ink);margin:38px 0 14px;letter-spacing:-.01em}
 
.pcta{max-width:680px;margin:54px auto 0;text-align:center;background:linear-gradient(180deg,var(--warm-white),var(--cream-2));
  border:1px solid var(--line);border-radius:var(--r-lg);padding:40px 34px;box-shadow:var(--shadow-sm)}
.pcta h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.55rem;color:var(--ink);margin:0 0 10px}
.pcta p{color:var(--muted);font-size:1.02rem;line-height:1.6;margin:0 auto 22px;max-width:480px}
 
/* roadmap */
.road{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;max-width:1080px;margin:0 auto}
.road-col{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px 22px;box-shadow:var(--shadow-sm)}
.road-head{display:flex;align-items:baseline;gap:10px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.road-tag{font-family:'Fraunces',serif;font-size:1.25rem;color:var(--navy);font-weight:600}
.road-tag--now{color:var(--gold-deep)}
.road-sub{font-size:.82rem;color:var(--muted-2)}
.road-item{padding:13px 0;border-bottom:1px dashed var(--line)}
.road-item:last-child{border-bottom:0}
.road-item h4{font-size:1rem;color:var(--ink);font-weight:600;margin:0 0 4px}
.road-item p{font-size:.92rem;color:var(--muted);line-height:1.55;margin:0}
 
/* pricing */
.price-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;max-width:1080px;margin:0 auto;align-items:stretch}
.price-card{position:relative;display:flex;flex-direction:column;background:var(--warm-white);border:1px solid var(--line);
  border-radius:var(--r-lg);padding:30px 26px;box-shadow:var(--shadow-sm)}
.price-card.featured{border-color:var(--gold-soft);box-shadow:0 0 0 1px var(--gold-soft),var(--shadow);transform:translateY(-6px)}
.price-badge{position:absolute;top:-12px;left:50%;transform:translateX(-50%);background:var(--gold);color:#3a2a00;font-size:.72rem;
  font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.32rem .8rem;border-radius:999px;box-shadow:var(--shadow-sm)}
.price-name{font-size:.82rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-2)}
.price-amt{font-family:'Fraunces',serif;font-weight:600;font-size:2.1rem;color:var(--ink);margin:8px 0 4px;line-height:1.1}
.price-blurb{color:var(--muted);font-size:.96rem;line-height:1.5;margin:0 0 18px;min-height:42px}
.price-feats{list-style:none;margin:0 0 22px;padding:0;display:flex;flex-direction:column;gap:11px;flex:1}
.price-feats li{display:flex;gap:10px;align-items:flex-start;color:var(--ink);font-size:.95rem;line-height:1.45}
.price-feats svg{flex:none;margin-top:3px;color:var(--gold-deep)}
.price-card .btn{width:100%;justify-content:center}
.price-note{font-size:.82rem;color:var(--muted-2);line-height:1.5;margin:14px 0 0;text-align:center}
.price-foot{text-align:center;color:var(--muted-2);font-size:.88rem;margin:34px auto 0;max-width:560px}
 
/* contact */
.contact-grid{display:grid;grid-template-columns:1.3fr .9fr;gap:34px;max-width:960px;margin:0 auto;align-items:start}
.contact-form{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:30px 28px;box-shadow:var(--shadow-sm)}
.cf-row{margin-bottom:16px}
.cf-row label{display:block;font-size:.82rem;color:var(--muted);font-weight:500;margin-bottom:7px}
.contact-form .textin{width:100%;height:46px;padding:0 16px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;
  font-size:1rem;color:var(--navy);background:#fff;outline:none;transition:.15s}
.contact-form .cf-area{height:auto;padding:12px 16px;resize:vertical;line-height:1.5}
.contact-form .textin::placeholder{color:var(--muted-2)}
.contact-form .textin:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.contact-form .btn{width:100%;justify-content:center;margin-top:4px}
.cf-note{font-size:.85rem;color:var(--muted-2);text-align:center;margin:12px 0 0}
.contact-side{background:linear-gradient(180deg,var(--warm-white),var(--cream-2));border:1px solid var(--line);border-radius:var(--r-lg);padding:28px 26px}
.contact-side h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.3rem;color:var(--ink);margin:0 0 18px}
.contact-line{padding:13px 0;border-top:1px solid var(--line)}
.contact-line:first-of-type{border-top:0}
.cl-k{display:block;font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2);font-weight:600;margin-bottom:4px}
.cl-v{color:var(--navy);font-size:.98rem;text-decoration:none}
a.cl-v:hover{color:var(--gold-deep)}
 
@media (max-width:860px){
  .road,.price-grid{grid-template-columns:1fr}
  .price-card.featured{transform:none}
  .contact-grid{grid-template-columns:1fr}
}
 
/* ============ SHARED CONTENT SECTIONS (themed, consistent rhythm) ============ */
.block{max-width:1040px;margin:0 auto;padding:54px 0}
.block:first-child{padding-top:48px}
.block--tight{max-width:740px}
.section-eyebrow{font-size:.78rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);text-align:center;margin-bottom:14px}
.section-title{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(1.7rem,3vw,2.4rem);line-height:1.13;letter-spacing:-.02em;color:var(--ink);text-align:center;margin:0 auto;max-width:680px}
.section-lead{text-align:center;max-width:600px;margin:16px auto 0;color:var(--muted);font-size:1.05rem;line-height:1.62}
 
/* ornamental gold divider: line — diamond — line */
.ornament{display:flex;align-items:center;justify-content:center;gap:14px;margin:0 auto;max-width:260px}
.ornament::before,.ornament::after{content:"";height:1px;flex:1;background:linear-gradient(90deg,transparent,var(--gold-soft))}
.ornament::after{background:linear-gradient(90deg,var(--gold-soft),transparent)}
.ornament i{width:7px;height:7px;background:var(--gold);transform:rotate(45deg);border-radius:1px}
 
/* big serif statement / pull quote */
.statement{max-width:860px;margin:0 auto;text-align:center;padding:8px 20px}
.statement p{font-family:'Fraunces',serif;font-weight:400;font-size:clamp(1.5rem,3vw,2.1rem);line-height:1.34;color:var(--ink);letter-spacing:-.01em}
.statement .em{color:var(--gold-deep);font-style:italic}
.statement::before{content:"";display:block;width:46px;height:3px;border-radius:2px;background:var(--gold);margin:0 auto 26px}
 
/* compare: blank box vs structured path  (prefixed .vs to avoid the homepage .cmp grid) */
.vs-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;max-width:1000px;margin:38px auto 0}
.vs{border-radius:var(--r-lg);padding:30px 28px;border:1px solid var(--line);background:var(--warm-white);display:flex;flex-direction:column;min-height:320px;box-shadow:var(--shadow-sm)}
.vs__tag{font-size:.76rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-2);margin-bottom:14px}
.vs h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.35rem;color:var(--ink);margin:0 0 8px}
.vs > p{color:var(--muted);font-size:.97rem;line-height:1.6;margin:0 0 18px}
.vs--blank{background:repeating-linear-gradient(135deg,#fbf8f1,#fbf8f1 13px,#f5efe3 13px,#f5efe3 26px)}
.vs__prompt{margin-top:auto;background:#fff;border:1.5px dashed var(--line);border-radius:14px;padding:15px 16px;color:var(--muted-2);font-size:.95rem;display:flex;align-items:center;gap:7px}
.vs__cursor{width:2px;height:18px;background:var(--muted-2);animation:vsblink 1.1s step-end infinite}
@keyframes vsblink{50%{opacity:0}}
.vs--good{border-color:var(--gold-soft);box-shadow:0 0 0 1px var(--gold-soft),var(--shadow-sm)}
.vs__path{margin-top:auto;display:flex;flex-direction:column;gap:8px}
.vs__pill{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 14px;font-size:.95rem;color:var(--navy);font-weight:500}
.vs__pill .n{width:22px;height:22px;border-radius:50%;background:var(--gold);color:#3a2a00;font-size:.78rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
 
/* feature tiles */
.feat3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1040px;margin:38px auto 0}
.feat{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:28px 24px;box-shadow:var(--shadow-sm);transition:transform .25s var(--ease),box-shadow .25s}
.feat:hover{transform:translateY(-4px);box-shadow:var(--shadow)}
.feat__ico{width:48px;height:48px;border-radius:14px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;
  background:linear-gradient(180deg,var(--soft-blue-2),var(--soft-blue));color:var(--navy);border:1px solid rgba(0,36,105,.08)}
.feat__ico.gold{background:linear-gradient(180deg,#fbeecb,#f4dca0);color:var(--gold-deep);border-color:rgba(212,147,4,.2)}
.feat h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.22rem;color:var(--ink);margin:0 0 8px}
.feat p{color:var(--muted);font-size:.95rem;line-height:1.6;margin:0}
 
/* navy vision band */
.band{position:relative;overflow:hidden;border-radius:var(--r-lg);background:linear-gradient(135deg,#002469,#0a3187 70%,#123a8f);
  color:#fff;padding:54px 48px;max-width:1040px;margin:0 auto;box-shadow:var(--shadow-lg)}
.band::after{content:"";position:absolute;right:-80px;top:-80px;width:280px;height:280px;border-radius:50%;
  background:radial-gradient(circle,var(--gold-glow),transparent 70%)}
.band__eyebrow{font-size:.78rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-soft);margin-bottom:14px;position:relative}
.band h2{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(1.5rem,2.6vw,2.1rem);line-height:1.18;margin:0 0 16px;max-width:680px;position:relative}
.band p{color:rgba(255,255,255,.84);font-size:1.05rem;line-height:1.7;max-width:640px;margin:0;position:relative}
 
/* ============ ROADMAP AS A MAP ============ */
.rmap{position:relative;max-width:1040px;margin:14px auto 0;padding:10px 0 30px}
.rmap__line{position:absolute;left:50%;top:6px;bottom:64px;width:3px;transform:translateX(-50%);z-index:0;pointer-events:none;
  background:repeating-linear-gradient(to bottom,var(--gold-soft) 0 11px,transparent 11px 22px);opacity:.7;border-radius:3px}
.rmap__phase{position:relative;z-index:2;text-align:center;margin:6px auto 26px}
.rmap__phase .ptag{display:inline-flex;align-items:center;gap:10px;background:var(--warm-white);border:1px solid var(--line);
  border-radius:999px;padding:9px 20px;box-shadow:var(--shadow-sm);font-family:'Fraunces',serif;font-size:1.2rem;color:var(--navy)}
.rmap__phase .pdot{width:11px;height:11px;border-radius:50%;background:var(--gold)}
.rmap__phase .psub{display:block;margin-top:8px;font-size:.84rem;color:var(--muted-2)}
.rstops{position:relative;z-index:2;display:flex;flex-direction:column;gap:24px;margin-bottom:14px}
.rstop{width:calc(50% - 40px);background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:20px 22px;box-shadow:var(--shadow-sm);position:relative;transition:transform .25s var(--ease),box-shadow .25s}
.rstop:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.rstop--l{align-self:flex-start;text-align:right}
.rstop--r{align-self:flex-end;text-align:left}
.rstop h4{font-size:1.05rem;color:var(--ink);font-weight:600;margin:0 0 5px}
.rstop p{font-size:.92rem;color:var(--muted);line-height:1.55;margin:0}
.rstop__pin{position:absolute;top:24px;width:16px;height:16px;border-radius:50%;background:var(--gold);
  border:3px solid var(--cream);box-shadow:0 0 0 1.5px var(--gold-soft),0 4px 10px -2px rgba(212,147,4,.7)}
.rstop--l .rstop__pin{right:-48px}
.rstop--r .rstop__pin{left:-48px}
.rmap__start,.rmap__end{position:relative;z-index:2;text-align:center;margin:0 auto}
.rmap__start{margin-bottom:12px}
.rmap__here{display:inline-flex;align-items:center;gap:8px;background:var(--navy);color:#fff;font-size:.8rem;font-weight:600;
  letter-spacing:.04em;padding:.5rem 1rem;border-radius:999px;box-shadow:var(--shadow)}
.rmap__here .ping{width:9px;height:9px;border-radius:50%;background:var(--gold-soft);box-shadow:0 0 0 0 rgba(232,179,74,.7);animation:ping 1.6s ease-out infinite}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(232,179,74,.6)}100%{box-shadow:0 0 0 12px rgba(232,179,74,0)}}
.rmap__end{margin-top:22px}
.rmap__flag{display:inline-flex;flex-direction:column;align-items:center;gap:14px;background:linear-gradient(135deg,#002469,#0a3187);
  color:#fff;border-radius:var(--r-lg);padding:34px 40px;box-shadow:var(--shadow-lg);max-width:520px;position:relative;overflow:hidden}
.rmap__flag::after{content:"";position:absolute;right:-60px;bottom:-60px;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,var(--gold-glow),transparent 70%)}
.rmap__flag .ico{width:54px;height:54px;border-radius:50%;background:rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;color:var(--gold-soft);position:relative}
.rmap__flag h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;margin:0;position:relative}
.rmap__flag p{color:rgba(255,255,255,.8);font-size:1rem;line-height:1.6;margin:0;position:relative}
 
/* ============ FOUNDER — editorial ============ */
.fdr{display:grid;grid-template-columns:.92fr 1.08fr;gap:54px;align-items:center;max-width:1060px;margin:0 auto;padding:8px 0}
.fdr__photo{position:relative}
.fdr__frame{position:relative;border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow-lg);aspect-ratio:4/5;
  background:linear-gradient(160deg,var(--soft-blue),#dce8f7);border:1px solid var(--line)}
.fdr__frame img{width:100%;height:100%;object-fit:cover;display:block}
.fdr__ph{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--navy);opacity:.45;text-align:center;padding:24px}
.fdr__ph svg{width:64px;height:64px}
.fdr__glow{position:absolute;inset:auto -24px -24px auto;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,var(--gold-glow),transparent 70%);z-index:-1}
.fdr__chip{position:absolute;left:-14px;bottom:22px;background:var(--gold);color:#3a2a00;font-weight:700;border-radius:14px;
  padding:.6rem 1rem;font-size:.92rem;box-shadow:var(--shadow);z-index:2;display:flex;align-items:center;gap:8px}
.fdr__chip b{font-family:'Fraunces',serif;font-size:1.15rem}
.fdr__t .k{font-size:.78rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:14px}
.fdr__t h1{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2rem,3.4vw,2.7rem);line-height:1.1;color:var(--ink);margin:0 0 18px;letter-spacing:-.02em}
.fdr__t .em{color:var(--gold-deep)}
.fdr__t p{color:var(--muted);font-size:1.06rem;line-height:1.76;margin:0 0 15px}
.fdr__sign{font-family:'Fraunces',serif;font-style:italic;font-size:1.2rem;color:var(--ink);margin-top:6px}
.fdr-statement{max-width:880px;margin:0 auto;text-align:center;padding:60px 20px}
.fdr-statement .big{font-family:'Fraunces',serif;font-size:clamp(2.6rem,7vw,4.6rem);color:var(--navy);font-weight:500;line-height:1;letter-spacing:-.02em}
.fdr-statement .big .slash{color:var(--gold);font-style:italic}
.fdr-statement p{font-family:'Fraunces',serif;font-weight:400;font-size:clamp(1.3rem,2.4vw,1.75rem);line-height:1.4;color:var(--ink);margin:20px auto 0;max-width:640px}
 
/* ============ SIGNUP (waitlist / early access) ============ */
.signup{max-width:540px;margin:0 auto;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:34px 32px;box-shadow:var(--shadow)}
.signup .srow{margin-bottom:14px}
.signup label{display:block;font-size:.82rem;color:var(--muted);font-weight:500;margin-bottom:7px}
.signup .textin{width:100%;height:48px;padding:0 16px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;font-size:1rem;color:var(--navy);background:#fff;outline:none;transition:.15s}
.signup .textin:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.signup .btn{width:100%;justify-content:center;margin-top:6px;font-size:1rem;padding:.85rem}
.signup .fineprint{font-size:.84rem;color:var(--muted-2);text-align:center;margin:14px 0 0}
.ea-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1000px;margin:0 auto}
.ea-feat{text-align:center;padding:8px 16px}
.ea-feat__n{font-family:'Fraunces',serif;font-size:1.8rem;color:var(--gold-deep);font-weight:600;margin-bottom:8px}
.ea-feat h3{font-size:1.05rem;color:var(--ink);font-weight:600;margin:0 0 6px}
.ea-feat p{color:var(--muted);font-size:.94rem;line-height:1.55;margin:0}
.steps3{display:flex;justify-content:center;gap:14px;flex-wrap:wrap;max-width:840px;margin:0 auto}
.steps3 .st{flex:1;min-width:200px;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);padding:20px;text-align:center}
.steps3 .st .num{width:34px;height:34px;border-radius:50%;background:var(--navy);color:#fff;font-weight:600;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}
.steps3 .st h4{margin:0 0 5px;font-size:1rem;color:var(--ink)}
.steps3 .st p{margin:0;font-size:.9rem;color:var(--muted);line-height:1.5}
 
@media (max-width:900px){
  .vs-grid,.feat3,.ea-grid,.mf-chapter,.fdr{grid-template-columns:1fr}
  .mf-chapter.rev .mf-chapter__img{order:0}
  .mf-chapter__img{aspect-ratio:16/10;max-height:420px}
  .rstop{width:100%;text-align:left!important}
  .rstop--l,.rstop--r{align-self:stretch}
  .rstop__pin{left:-32px!important;right:auto!important}
  .rmap__line{left:14px;width:2px}
  .band,.mf-ded{padding:40px 26px}
  .fdr__chip{left:14px}
}
@media (max-width:560px){
  .mf-portrait{aspect-ratio:3/4}
}
/* pages with a custom hero (no .phero) still clear the fixed navbar */
.pmain > .pbody:first-child{padding-top:128px}
 
/* =========================================================================
   MACHON FAIGE — its own site, its own world, its own palette
   (everything scoped under .mfsite so nothing leaks into RebbisDesk)
   ========================================================================= */
.mfsite{
  --bg:#FAF4E8; --bg2:#F1E5CF; --panel:#FFFBF2;
  --ink:#332B22; --muted:#786c5b; --faint:#a99c86;
  --gold:#A9843A; --gold-soft:#CBA45A; --gold-deep:#8a6a2c;
  --deep:#241C14; --deep2:#33271b;
  --line:rgba(51,43,34,.12);
  --serif:'Fraunces',Georgia,'Times New Roman',serif;
  background:var(--bg);color:var(--ink);
  font-family:var(--serif);
  min-height:100vh;overflow-x:hidden;
}
.mfsite ::selection{background:rgba(169,132,58,.22);color:var(--deep)}
.mfsite .mfx{max-width:1080px;margin:0 auto;padding:0 28px}
.mfsite .mfx--narrow{max-width:720px}
 
/* top bar — minimal, own identity */
.mfsite-nav{position:absolute;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;justify-content:space-between;
  padding:26px 32px}
.mfsite-nav .wm{display:flex;align-items:center;gap:11px;letter-spacing:.22em;text-transform:uppercase;font-size:.72rem;color:var(--gold-deep);font-family:var(--serif)}
.mfsite-nav .wm img{height:26px;width:auto;opacity:.9}
.mfsite-nav .back{font-size:.78rem;letter-spacing:.08em;color:var(--muted);display:inline-flex;align-items:center;gap:7px;
  padding:.5rem .95rem;border:1px solid var(--line);border-radius:999px;transition:.2s;background:rgba(255,255,255,.4);font-family:'Inter',sans-serif}
.mfsite-nav .back:hover{color:var(--deep);border-color:var(--gold-soft);background:#fff}
 
/* HERO — candle with a full, uncut glow */
.mfsite-hero{position:relative;text-align:center;padding:150px 24px 70px}
.mfsite-hero::before{content:"";position:absolute;left:50%;top:70px;transform:translateX(-50%);width:900px;height:620px;max-width:120vw;
  z-index:0;pointer-events:none;background:radial-gradient(46% 52% at 50% 34%,rgba(203,164,90,.20),transparent 68%)}
.mfsite-hero > *{position:relative;z-index:1}
.mf-candle2{position:relative;width:64px;height:172px;margin:0 auto 14px}
.mf-candle2 .halo{position:absolute;left:50%;top:-30px;transform:translateX(-50%);width:300px;height:300px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle at 50% 42%,rgba(255,214,120,.55),rgba(233,180,90,.16) 40%,transparent 68%)}
.mf-candle2 .flame{position:absolute;left:50%;top:26px;transform:translateX(-50%);width:22px;height:50px;z-index:2;
  background:radial-gradient(ellipse at 50% 76%,#fffbe9 0%,#ffdd82 34%,#ef9f2c 70%,rgba(239,159,44,0) 100%);
  border-radius:50% 50% 48% 48%/64% 64% 40% 40%;box-shadow:0 -4px 30px 8px rgba(233,180,90,.55);
  transform-origin:50% 92%;animation:mfflame 3.2s ease-in-out infinite}
.mf-candle2 .core{position:absolute;left:50%;top:44px;transform:translateX(-50%);width:9px;height:22px;z-index:3;
  background:radial-gradient(ellipse at 50% 70%,#fff 0%,#ffe9b0 60%,rgba(255,233,176,0) 100%);border-radius:50%;opacity:.9}
.mf-candle2 .wick{position:absolute;left:50%;top:70px;transform:translateX(-50%);width:2px;height:9px;background:#2a2016;z-index:3;border-radius:1px}
.mf-candle2 .body{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:30px;height:92px;border-radius:5px 5px 3px 3px;z-index:1;
  background:linear-gradient(90deg,#dccaa6 0%,#fbf3df 42%,#fff 52%,#e7d6b2 100%);box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 12px 20px -10px rgba(51,43,34,.4)}
.mf-candle2 .drip{position:absolute;left:calc(50% - 15px);top:82px;width:6px;height:20px;background:linear-gradient(180deg,#fff,#e7d6b2);border-radius:0 0 4px 4px;z-index:2;opacity:.9}
@keyframes mfflame{0%,100%{transform:translateX(-50%) scale(1) rotate(-1.5deg);opacity:.96}50%{transform:translateX(-50%) scale(1.05,1.09) rotate(1.5deg);opacity:1}}
.mfsite-crest{width:150px;height:auto;margin:6px auto 22px;display:block;opacity:.92}
.mfsite-kick{font-family:'Inter',sans-serif;font-size:.76rem;letter-spacing:.26em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:16px}
.mfsite-name{font-family:var(--serif);font-weight:400;font-size:clamp(2.6rem,6.4vw,4.6rem);line-height:1.02;letter-spacing:-.015em;color:var(--ink);margin:0}
.mfsite-heb{font-family:'Frank Ruhl Libre',serif;direction:rtl;color:var(--gold-deep);font-size:clamp(1.3rem,2.4vw,1.7rem);margin:16px 0 0}
.mfsite-dates{font-family:'Inter',sans-serif;font-size:.8rem;letter-spacing:.18em;text-transform:uppercase;color:var(--faint);margin-top:16px}
.mfsite-lead{color:var(--muted);font-size:1.16rem;line-height:1.7;max-width:560px;margin:26px auto 0}
 
/* thin ornament */
.mf-orn{display:flex;align-items:center;justify-content:center;gap:16px;max-width:280px;margin:0 auto}
.mf-orn::before,.mf-orn::after{content:"";height:1px;flex:1;background:linear-gradient(90deg,transparent,var(--gold-soft))}
.mf-orn::after{background:linear-gradient(90deg,var(--gold-soft),transparent)}
.mf-orn i{width:7px;height:7px;background:var(--gold);transform:rotate(45deg);border-radius:1px;box-shadow:0 0 0 3px rgba(169,132,58,.12)}
 
/* full-bleed portrait */
.mfsite-portrait{position:relative;margin:58px auto 0;max-width:1140px;border-radius:8px;overflow:hidden;line-height:0;
  box-shadow:0 40px 90px -34px rgba(36,28,20,.55);aspect-ratio:16/8.5}
.mfsite-portrait img{width:100%;height:100%;object-fit:cover;object-position:center 30%;display:block;filter:saturate(1.02)}
.mfsite-portrait .cap{position:absolute;left:0;right:0;bottom:0;text-align:left;padding:70px 34px 24px;color:#fdf6e8;line-height:1.4;
  background:linear-gradient(180deg,transparent,rgba(30,22,14,.82))}
.mfsite-portrait .cap .nm{display:block;font-family:var(--serif);font-size:1.7rem;line-height:1.2}
.mfsite-portrait .cap .rl{display:block;font-family:'Inter',sans-serif;font-size:.9rem;letter-spacing:.02em;color:rgba(253,246,232,.82);margin-top:6px;line-height:1.4}
 
/* section rhythm */
.mfsite-sec{padding:74px 0}
.mfsite-sec--tight{padding:44px 0}
.mfsite-eyebrow{font-family:'Inter',sans-serif;font-size:.74rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:14px}
 
/* opening tribute with drop cap */
.mfsite-open{max-width:720px;margin:0 auto;text-align:center}
.mfsite-open h2{font-family:var(--serif);font-weight:400;font-size:clamp(1.8rem,3.4vw,2.6rem);line-height:1.15;color:var(--ink);margin:0 0 22px;letter-spacing:-.01em}
.mfsite-open p{font-family:var(--serif);font-weight:400;font-size:1.22rem;line-height:1.85;color:#4a4034;text-align:left}
.mfsite-open p .dropcap{float:left;font-size:3.4rem;line-height:.76;padding:8px 14px 2px 0;margin-top:4px;color:var(--gold);font-weight:500}
 
/* chapter (photo + text) */
.mfsite-chapter{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center;max-width:1080px;margin:0 auto;padding:64px 0}
.mfsite-chapter.rev .mfc-img{order:2}
.mfc-img{position:relative;border-radius:8px;overflow:hidden;line-height:0;box-shadow:0 34px 70px -32px rgba(36,28,20,.5);aspect-ratio:4/5}
.mfc-img::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(169,132,58,.25);border-radius:8px;pointer-events:none}
.mfc-img img{width:100%;height:100%;object-fit:cover;display:block}
.mfc-t h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.7rem,2.8vw,2.2rem);color:var(--ink);margin:0 0 18px;line-height:1.16}
.mfc-t p{font-family:var(--serif);font-weight:400;font-size:1.12rem;line-height:1.82;color:#4a4034;margin:0 0 16px}
 
/* grand pull quote */
.mfsite-quote{max-width:900px;margin:0 auto;text-align:center;padding:40px 24px}
.mfsite-quote p{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(1.7rem,3.4vw,2.5rem);line-height:1.4;color:var(--ink)}
.mfsite-quote .em{color:var(--gold-deep);font-style:italic}
 
/* legacy band (warm cream panel) */
.mfsite-legacy{background:linear-gradient(180deg,var(--panel),var(--bg2));border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.mfsite-legacy .in{max-width:900px;margin:0 auto;text-align:center;padding:76px 28px}
.mfsite-legacy h2{font-family:var(--serif);font-weight:400;font-size:clamp(1.9rem,3.4vw,2.6rem);color:var(--ink);margin:0 0 18px;line-height:1.14}
.mfsite-legacy p{font-family:var(--serif);font-size:1.16rem;line-height:1.8;color:#4a4034;max-width:640px;margin:0 auto}
.mfsite-legacy .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:44px;text-align:center}
.mfsite-legacy .cell{padding:0 8px}
.mfsite-legacy .cell .ico{width:46px;height:46px;margin:0 auto 14px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:var(--gold-deep);border:1px solid rgba(169,132,58,.35);background:rgba(255,255,255,.6)}
.mfsite-legacy .cell h4{font-family:var(--serif);font-weight:500;font-size:1.12rem;color:var(--ink);margin:0 0 6px}
.mfsite-legacy .cell p{font-family:'Inter',sans-serif;font-size:.95rem;line-height:1.6;color:var(--muted)}
 
/* dedication — deep warm panel */
.mfsite-ded{position:relative;overflow:hidden;background:radial-gradient(120% 120% at 50% 0%,#33271b,#1d160f);color:#f6ecd8;text-align:center}
.mfsite-ded::before{content:"";position:absolute;left:50%;top:-60px;transform:translateX(-50%);width:520px;height:420px;pointer-events:none;
  background:radial-gradient(circle at 50% 40%,rgba(203,164,90,.28),transparent 66%)}
.mfsite-ded .in{position:relative;max-width:640px;margin:0 auto;padding:88px 28px}
.mfsite-ded .mf-candle2{margin-bottom:20px}
.mfsite-ded .heb{font-family:'Frank Ruhl Libre',serif;direction:rtl;color:var(--gold-soft);font-size:clamp(1.5rem,3vw,2.1rem);margin:0 0 8px}
.mfsite-ded .en{font-family:'Inter',sans-serif;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(246,236,216,.55);margin-bottom:24px}
.mfsite-ded p{font-family:var(--serif);font-size:1.16rem;line-height:1.8;color:rgba(246,236,216,.9);margin:0 auto}
.mfsite-ded .nm{color:#fff}
 
/* MF footer */
.mfsite-foot{background:var(--deep);color:rgba(246,236,216,.7);text-align:center;padding:46px 28px}
.mfsite-foot img{height:40px;margin:0 auto 16px;opacity:.85}
.mfsite-foot .row{font-family:'Inter',sans-serif;font-size:.85rem;letter-spacing:.02em;display:flex;gap:8px;justify-content:center;align-items:center;flex-wrap:wrap}
.mfsite-foot a{color:var(--gold-soft)}
.mfsite-foot .sep{opacity:.4}
.mfsite-foot .fine{font-family:'Inter',sans-serif;font-size:.78rem;color:rgba(246,236,216,.4);margin-top:10px}
 
@media (max-width:860px){
  .mfsite-chapter{grid-template-columns:1fr;gap:34px;padding:44px 0}
  .mfsite-chapter.rev .mfc-img{order:0}
  .mfc-img{aspect-ratio:16/11;max-height:440px}
  .mfsite-legacy .grid{grid-template-columns:1fr;gap:30px}
  .mfsite-portrait{aspect-ratio:4/3}
  .mfsite-nav{padding:18px 20px}
}
 
/* ============ DESIGN CREDIT (SZM Design) ============ */
.foot-credit{margin-top:20px;padding-top:18px;border-top:1px solid rgba(255,255,255,.06);
  display:flex;align-items:center;justify-content:center;gap:11px;
  font-family:'Inter',sans-serif;font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;color:#6f7ea0}
.foot-credit img{height:36px;width:auto;opacity:.85}
.mfsite-foot .szm{display:inline-flex;flex-direction:column;align-items:center;gap:7px;margin-top:22px;
  font-family:'Inter',sans-serif;font-size:.66rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(246,236,216,.5)}
.mfsite-foot .szm img{height:44px;width:auto;opacity:.85}
 
/* ============ LIVE AI DRAFT (real generation) ============ */
.genroot .notesin{width:100%;max-width:560px;padding:12px 16px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;
  font-size:.98rem;color:var(--navy);background:#fff;outline:none;transition:.15s;resize:vertical;line-height:1.5}
.genroot .notesin::placeholder{color:var(--muted-2)}
.genroot .notesin:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
 
.genroot .gsel{width:100%;max-width:340px;padding:11px 14px;border:1.5px solid var(--line);border-radius:14px;font-family:inherit;
  font-size:.95rem;color:var(--navy);background:#fff;outline:none;transition:.15s;cursor:pointer}
.genroot .gsel:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.genroot .gsel__hint{max-width:480px;margin-top:8px;font-size:.82rem;color:var(--muted);line-height:1.5}
 
/* multi-talmid checklist ("Personalize for talmidim") */
.genroot .gtal{border:1.5px solid var(--line);border-radius:14px;background:var(--warm-white);padding:10px 12px;max-width:420px}
.genroot .gtal__all{display:flex;align-items:center;gap:9px;font-size:.92rem;font-weight:600;color:var(--navy);cursor:pointer;user-select:none;padding-bottom:9px;margin-bottom:9px;border-bottom:1px solid var(--line)}
.genroot .gtal__all input{position:absolute;opacity:0;width:0;height:0}
.genroot .gtal__list{max-height:190px;overflow-y:auto;display:flex;flex-direction:column;gap:7px}
.genroot .gtal__item{display:flex;align-items:center;gap:9px;font-size:.9rem;color:var(--ink);cursor:pointer;user-select:none}
.genroot .gtal__item input{position:absolute;opacity:0;width:0;height:0}
 
.genroot .pv__card--doc{max-width:1060px}
.pv-live{display:grid;grid-template-columns:1fr 290px;gap:24px;align-items:start}
.pv-live__side{position:sticky;top:74px}
.pv-live__side h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.35rem;color:var(--ink);margin-bottom:6px}
.pv-live__side .lead{color:var(--muted);font-size:.94rem;margin-bottom:14px}
.pv-tip{font-size:.85rem;color:var(--muted);background:var(--soft-blue-2);border:1px solid rgba(0,36,105,.08);
  border-radius:var(--r);padding:12px 14px;line-height:1.55;margin-bottom:14px}
.pv-err{max-width:520px;margin:30px auto;text-align:center}
.pv-err p{color:var(--muted);font-size:1rem;line-height:1.6;margin-bottom:18px}
 
/* the sheet — real worksheet typography */
.pv-sheet{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);
  padding:34px 36px;min-height:340px;max-height:64vh;overflow-y:auto;line-height:1.62;color:var(--ink);font-size:.98rem}
.pv-sheet h1{font-family:'Fraunces',serif;font-weight:600;font-size:1.55rem;color:var(--navy);
  margin:0 0 6px;padding-bottom:12px;border-bottom:2.5px solid var(--gold)}
.pv-sheet h2{font-family:'Fraunces',serif;font-weight:500;font-size:1.18rem;color:var(--navy);margin:22px 0 8px}
.pv-sheet h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.02rem;color:var(--navy);margin:16px 0 6px}
.pv-sheet p{margin:8px 0}
.pv-sheet ul,.pv-sheet ol{margin:8px 0;padding-inline-start:24px}
.pv-sheet li{margin:6px 0}
.pv-sheet hr{border:0;border-top:1px solid var(--line);margin:14px 0}
.pv-sheet blockquote{margin:12px 0;padding:10px 16px;border-inline-start:3px solid var(--gold);
  background:#fdf9ef;border-radius:0 10px 10px 0;color:var(--ink)}
.pv-sheet .he{font-family:'Frank Ruhl Libre',serif;font-size:1.22em;direction:rtl;text-align:right}
.pv-sheet .wline{display:inline-block;min-width:180px;border-bottom:1.5px solid var(--muted-2);height:1.1em;vertical-align:bottom}
.pv-sheet .wline--block{display:block;width:100%;height:1.5em;border-bottom:1.5px solid var(--muted-2);margin:12px 0}
.pv-sheet em{color:var(--muted)}
.pv-sheet code{background:var(--soft-blue-2);border-radius:6px;padding:1px 6px;font-size:.9em}
/* soft writing caret while streaming */
.pv-sheet.writing::after{content:"";display:inline-block;width:9px;height:1.15em;margin-left:3px;
  vertical-align:text-bottom;background:var(--gold);border-radius:2px;animation:rdcaret 1s step-end infinite}
@keyframes rdcaret{50%{opacity:0}}
 
@media (max-width:920px){
  .pv-live{grid-template-columns:1fr}
  .pv-live__side{position:static}
  .pv-sheet{max-height:52vh;padding:24px 20px}
}
 
/* batch preview (multiple talmidim generated in one run) */
.genroot .pv__card--batch{max-width:1180px}
.pv-batch{display:grid;grid-template-columns:230px 1fr;gap:0;align-items:start}
.pv-queue{border-inline-end:1px solid var(--line);padding-inline-end:16px;display:flex;flex-direction:column;gap:6px;max-height:70vh;overflow-y:auto}
.pv-queue__item{display:flex;align-items:center;gap:8px;text-align:left;border:1.5px solid transparent;border-radius:11px;padding:9px 10px;background:transparent;cursor:pointer;transition:.16s var(--ease);font-family:inherit;width:100%}
.pv-queue__item:hover{background:var(--soft-blue-2)}
.pv-queue__item.active{border-color:var(--gold-soft);background:#fff;box-shadow:var(--shadow)}
.pv-queue__dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--muted-2)}
.pv-queue__item.st-streaming .pv-queue__dot,.pv-queue__item.st-loading .pv-queue__dot{background:var(--gold);animation:pvpulse 1s infinite}
.pv-queue__item.st-ready .pv-queue__dot{background:#2e8b57}
.pv-queue__item.st-error .pv-queue__dot{background:#c0392b}
.pv-queue__name{flex:1;font-size:.88rem;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pv-queue__stat{font-size:.72rem;color:var(--muted-2);flex:none}
.pv-main{padding-inline-start:20px;min-width:0}
@keyframes pvpulse{0%,100%{opacity:1}50%{opacity:.35}}
@media (max-width:860px){
  .pv-batch{grid-template-columns:1fr}
  .pv-queue{border-inline-end:0;border-bottom:1px solid var(--line);padding-inline-end:0;padding-bottom:12px;flex-direction:row;flex-wrap:wrap;max-height:none}
  .pv-main{padding-inline-start:0;padding-top:16px}
}
 
/* ============ AUTH (Clerk) + LEAD FORMS ============ */
.authwrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;
  background:radial-gradient(60% 50% at 50% 0%,rgba(233,240,250,.9),transparent 70%),var(--cream);padding:40px 20px}
.authwrap__brand img{height:34px}
.authwrap__lead{font-family:'Fraunces',serif;font-size:1.25rem;color:var(--ink)}
.authwrap__fine{font-size:.9rem;color:var(--muted)}
.authwrap__fine a{color:var(--gold-deep);font-weight:600}
.nav__auth{display:flex;align-items:center;gap:14px}
.nav__signin{font-size:.92rem;font-weight:500;color:var(--muted);padding:.5rem .6rem;border-radius:var(--r-pill);transition:color .2s}
.nav__signin:hover{color:var(--navy)}
.lead-sent{text-align:center;padding:26px 10px}
.lead-sent__ico{width:54px;height:54px;border-radius:50%;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,var(--gold-soft),var(--gold));color:#3a2a00;box-shadow:var(--shadow-sm)}
.lead-sent h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.4rem;color:var(--ink);margin-bottom:6px}
.lead-sent p{color:var(--muted);font-size:.98rem;line-height:1.6;max-width:380px;margin:0 auto}
.lead-err{margin-top:12px;font-size:.88rem;color:#a03333;background:#fdf1f1;border:1px solid rgba(160,51,51,.25);
  border-radius:12px;padding:10px 14px;line-height:1.5}
.contact-form .srow{margin-bottom:16px}
.contact-form .srow label{display:block;font-size:.82rem;color:var(--muted);font-weight:500;margin-bottom:7px}
.contact-form form .btn{width:100%;justify-content:center;margin-top:4px}
 
/* ============ FINAL-REVIEW POLISH ============ */

/* dual-language chips: English · Hebrew */
.genroot .gchip .hb{font-family:'Frank Ruhl Libre',serif;color:var(--gold-deep);margin-inline-start:.5em;font-size:1.02em;font-weight:500}
.genroot .gchip.sel .hb{color:#5a4200}
.genroot .gdrop__opt .hb{font-family:'Frank Ruhl Libre',serif;color:var(--gold-deep);margin-inline-start:auto;padding-inline-start:.75em;font-size:1.05em;font-weight:500}
.genroot .gdrop__opt.sel .hb{color:#5a4200}
 
/* soft part of a subhead */
.genroot .subhead__soft{text-transform:none;letter-spacing:0;font-weight:400;color:var(--muted-2)}
 
/* pretty checkboxes */
.genroot .ckrow{display:flex;flex-wrap:wrap;gap:10px 22px;margin:12px 0 2px}
.genroot .ck{display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:.94rem;color:var(--ink);user-select:none}
.genroot .ck input{position:absolute;opacity:0;width:0;height:0}
.genroot .ck__box{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line);background:#fff;display:inline-flex;
  align-items:center;justify-content:center;transition:.15s;flex:none}
/* Talmidim-personalization checkboxes (.gtal__all/.gtal__item) reuse this
   same .ck__box visual but sit in their own label wrapper, not .ck -- the
   checked-state rule below used to only match ".ck input:checked", so
   those boxes never actually filled in on check even though the click was
   registering in state (site-wide bug: any checkbox using .ck__box outside
   a literal .ck label). Every current + future .ck__box wrapper is listed
   explicitly here so this can't silently regress again. */
.genroot .ck input:checked + .ck__box,
.genroot .gtal__all input:checked + .ck__box,
.genroot .gtal__item input:checked + .ck__box{background:linear-gradient(180deg,var(--gold-soft),var(--gold));border-color:var(--gold)}
.genroot .ck input:checked + .ck__box::after,
.genroot .gtal__all input:checked + .ck__box::after,
.genroot .gtal__item input:checked + .ck__box::after{content:"";width:10px;height:6px;border-left:2.4px solid #3a2a00;border-bottom:2.4px solid #3a2a00;
  transform:rotate(-45deg) translateY(-1px)}
.genroot .ck:hover .ck__box{border-color:var(--gold-soft)}
 
/* two-up detail rows keep the panel tidy */
.genroot .drow{display:grid;grid-template-columns:1fr 1fr;gap:8px 26px;align-items:start}
@media (max-width:720px){.genroot .drow{grid-template-columns:1fr}}
 
/* ten material cards fit comfortably */
.genroot .opt-grid--mats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
/* smart fields sit side-by-side on desktop */
.genroot .row .field.grow{flex:1 1 240px;max-width:340px}
 
/* ============ DETAILS PANEL v2 — clean label-left rows ============ */
.genroot .dlist{margin-top:4px}
.genroot .drow2{display:grid;grid-template-columns:168px 1fr;gap:10px 24px;padding:15px 0;border-top:1px solid var(--line);align-items:start}
.genroot .drow2:first-child{border-top:0;padding-top:6px}
.genroot .drow2__l{font-size:.76rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-2);font-weight:600;padding-top:9px;line-height:1.45}
.genroot .drow2__r .gchips{margin:0}
.genroot .drow2__r .ckrow{margin:10px 0 0}
.genroot .drow2__r .notesin{max-width:100%}
@media (max-width:680px){
  .genroot .drow2{grid-template-columns:1fr;gap:6px;padding:13px 0}
  .genroot .drow2__l{padding-top:0}
}
 
/* ============ REBBISDESK SUGGESTIONS (SuggestInput) ============ */
.genroot .sugg{position:relative;width:100%}
.genroot .sugg .textin{width:100%}
.genroot .sugg__pop{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:40;background:#fff;border:1px solid var(--line);
  border-radius:16px;box-shadow:var(--shadow-lg);overflow:hidden;padding:6px}
.genroot .sugg__hdr{display:flex;align-items:center;gap:7px;padding:8px 12px 6px;font-size:.7rem;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--gold-deep)}
.genroot .sugg__hdr svg{color:var(--gold)}
.genroot .sugg__item{display:block;width:100%;text-align:left;border:0;background:none;cursor:pointer;font-family:inherit;
  font-size:.95rem;color:var(--ink);padding:9px 12px;border-radius:10px;transition:background .12s}
.genroot .sugg__item:hover{background:var(--soft-blue-2);color:var(--navy)}
 
/* ============ MY DESK (saved drafts) ============ */
.desk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px;max-width:1040px;margin:0 auto}
.desk-card{position:relative;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);transition:transform .22s var(--ease),box-shadow .22s;overflow:hidden}
.desk-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.desk-card__main{display:block;width:100%;text-align:left;border:0;background:none;cursor:pointer;font-family:inherit;padding:22px 46px 20px 22px}
.desk-card__title{display:block;font-family:'Fraunces',serif;font-weight:500;font-size:1.12rem;color:var(--navy);line-height:1.3;margin-bottom:7px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.desk-card__meta{display:block;font-size:.86rem;color:var(--muted);margin-bottom:5px}
.desk-card__date{display:block;font-size:.78rem;color:var(--muted-2)}
.desk-card__del{position:absolute;top:14px;right:12px;width:32px;height:32px;border-radius:50%;border:1px solid transparent;background:none;
  color:var(--muted-2);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;opacity:0}
.desk-card:hover .desk-card__del{opacity:1}
.desk-card__del:hover{color:#a03333;background:#fdf1f1;border-color:rgba(160,51,51,.2)}
.desk-empty{max-width:480px;margin:20px auto;text-align:center;color:var(--muted);font-size:1.04rem;line-height:1.6}
.desk-empty p{margin-bottom:18px}
.pv-saved{font-size:.9rem;color:var(--gold-deep);font-weight:600;background:#fdf6e4;border:1px solid rgba(212,147,4,.28);
  border-radius:var(--r);padding:10px 14px;margin-bottom:12px}
.pv-saved a{color:var(--navy);text-decoration:underline}
/* footer waitlist states */
.foot-wait__done{display:inline-flex;align-items:center;gap:8px;background:rgba(232,179,74,.14);border:1px solid rgba(232,179,74,.4);
  color:var(--gold-soft);font-weight:600;font-size:.95rem;border-radius:999px;padding:.7rem 1.2rem;margin-top:4px}
.foot-wait__err{margin-top:9px;font-size:.84rem;color:#f0a1a1}
 
/* ============ ADMIN — the RebbisDesk office ============ */
.adm{min-height:100vh;background:var(--cream);color:var(--ink);font-family:'Inter',sans-serif}
.adm--center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;color:var(--muted);font-size:1.05rem}
.adm__bar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:26px;padding:0 22px;height:60px;
  background:linear-gradient(90deg,#002469,#0a3187);color:#fff;box-shadow:var(--shadow)}
.adm__brand{display:flex;align-items:center;gap:10px;font-weight:600;letter-spacing:.02em}
.adm__brand img{height:24px}
.adm__brand span{background:var(--gold);color:#3a2a00;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  padding:.2rem .55rem;border-radius:999px}
.adm__tabs{display:flex;gap:4px;flex:1}
.adm__tabs button{position:relative;background:none;border:0;color:#c6d2ea;font-family:inherit;font-size:.92rem;font-weight:500;
  padding:.55rem .95rem;border-radius:999px;cursor:pointer;transition:.15s}
.adm__tabs button:hover{color:#fff;background:rgba(255,255,255,.08)}
.adm__tabs button.on{color:#3a2a00;background:linear-gradient(180deg,var(--gold-soft),var(--gold));font-weight:600}
.adm__tabs button em{font-style:normal;background:#e0556b;color:#fff;font-size:.68rem;font-weight:700;border-radius:999px;
  padding:.08rem .42rem;margin-left:7px;vertical-align:1px}
.adm__exit{color:#c6d2ea;font-size:.88rem}
.adm__exit:hover{color:#fff}
.adm__flash{position:fixed;top:74px;left:50%;transform:translateX(-50%);z-index:60;background:var(--navy);color:#fff;
  font-size:.9rem;padding:.6rem 1.2rem;border-radius:999px;box-shadow:var(--shadow-lg)}
.adm__main{max-width:1000px;margin:0 auto;padding:34px 22px 80px}
.adm__main h1{font-family:'Fraunces',serif;font-weight:500;font-size:1.9rem;color:var(--ink);margin-bottom:22px}
/* General-purpose flex row helper (low specificity on purpose -- the
   scoped .genroot .row / .mfsite-foot .row etc. rules elsewhere always win
   over this one since they carry more specificity, so this only fills in
   as a sensible default wherever className="row" is used outside those
   scopes, e.g. Cheder's parent/kid pages). */
.row{display:flex;flex-wrap:wrap;gap:12px;align-items:center}

.adm-hint{color:var(--muted-2);font-size:.9rem;margin-top:16px}
.adm-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}
.adm-stat{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--shadow-sm)}
.adm-stat b{display:block;font-family:'Fraunces',serif;font-size:2.2rem;color:var(--navy);line-height:1}
.adm-stat span{display:block;margin-top:6px;font-size:.85rem;color:var(--muted)}
.adm-filters{display:flex;gap:8px;margin-bottom:16px}
.adm-filters button{background:#fff;border:1.5px solid var(--line);border-radius:999px;font-family:inherit;font-size:.85rem;
  padding:.4rem .95rem;color:var(--muted);cursor:pointer;text-transform:capitalize}
.adm-filters button.on{background:var(--navy);border-color:var(--navy);color:#fff}
.adm-list{display:flex;flex-direction:column;gap:8px}
.adm-row{display:grid;grid-template-columns:30px 180px 1fr auto auto auto;gap:14px;align-items:center;text-align:left;
  background:var(--warm-white);border:1px solid var(--line);border-radius:16px;padding:13px 16px;font-family:inherit;
  font-size:.92rem;color:var(--ink);cursor:pointer;transition:.15s;width:100%}
.adm-row:hover{border-color:var(--gold-soft);box-shadow:var(--shadow-sm)}
.adm-row--flat{cursor:default}
.adm-row.unread{border-left:4px solid var(--gold)}
.adm-row .who{font-weight:600;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-row .msg{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-row .st{font-size:.72rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted-2)}
.adm-row .st--new{color:var(--gold-deep)}
.adm-row .st--closed{color:#9aa5ba}
.adm-row .when{font-size:.8rem;color:var(--muted-2);white-space:nowrap}
.adm-mini{background:#fff;border:1.5px solid var(--line);border-radius:999px;font-family:inherit;font-size:.8rem;font-weight:600;
  color:var(--navy);padding:.35rem .85rem;cursor:pointer;white-space:nowrap}
.adm-mini:hover{border-color:var(--gold-soft)}
.adm-settings{display:flex;flex-direction:column;gap:12px;max-width:640px}
.adm-setting{display:flex;align-items:center;justify-content:space-between;gap:20px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 22px}
.adm-setting b{display:block;color:var(--ink);font-size:.98rem}
.adm-setting span{display:block;color:var(--muted);font-size:.85rem;margin-top:2px}
.adm-toggle{position:relative;width:52px;height:30px;border-radius:999px;border:0;cursor:pointer;background:#d8d2c2;transition:.2s;flex:none}
.adm-toggle i{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:.2s}
.adm-toggle.on{background:linear-gradient(180deg,var(--gold-soft),var(--gold))}
.adm-toggle.on i{left:25px}
.adm-settings__h{margin:22px 0 2px;font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted-2)}
.adm-settings__h:first-child{margin-top:0}
.adm-setting--num input.adm-numinput{width:84px;flex:none;background:#fff;border:1.5px solid var(--line);border-radius:10px;
  font-family:inherit;font-size:1rem;font-weight:600;color:var(--ink);padding:.4rem .6rem;text-align:center}
.adm-setting--num input.adm-numinput:focus{outline:none;border-color:var(--gold-soft)}
.adm-dev{display:flex;flex-direction:column;max-width:720px}
.adm-dev__log{display:flex;flex-direction:column;gap:14px;margin-bottom:16px}
.adm-dev__msg{border-radius:16px;padding:14px 18px;font-size:.95rem;line-height:1.6;white-space:pre-wrap}
.adm-dev__msg b{display:block;font-size:.78rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted-2);margin-bottom:4px}
.adm-dev__msg p{margin:0;color:var(--ink)}
.adm-dev__msg--user{background:var(--soft-blue-2);align-self:flex-end;max-width:85%}
.adm-dev__msg--assistant{background:var(--warm-white);border:1px solid var(--line)}
.adm-dev__pr{display:inline-block;margin-top:10px;font-weight:700;color:var(--gold);text-decoration:none}
.adm-dev__pr:hover{text-decoration:underline}
.adm-dev__steps{margin-top:10px;font-size:.82rem;color:var(--muted)}
.adm-dev__steps summary{cursor:pointer;color:var(--muted-2)}
.adm-dev__steps div{padding:3px 0 3px 14px}
.adm-dev__box{display:flex;gap:10px;align-items:flex-end}
.adm-dev__box textarea{flex:1;border:1.5px solid var(--line);border-radius:14px;padding:14px 16px;font-family:inherit;
  font-size:.95rem;color:var(--navy);background:#fff;outline:none;resize:vertical;line-height:1.55}
.adm-dev__box textarea:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.adm-drawerbg{position:fixed;inset:0;z-index:80;background:rgba(8,18,40,.5);backdrop-filter:blur(4px);display:flex;justify-content:flex-end}
.adm-drawer{width:min(560px,100%);height:100%;background:var(--cream);box-shadow:-20px 0 60px rgba(0,0,0,.3);
  padding:26px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}
.adm-drawer__head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.adm-drawer__head b{font-family:'Fraunces',serif;font-size:1.3rem;color:var(--navy);display:block}
.adm-drawer__head span{display:block;font-size:.85rem;color:var(--muted);margin-top:4px}
.adm-drawer__head button{border:1px solid var(--line);background:#fff;border-radius:50%;width:34px;height:34px;cursor:pointer;color:var(--muted)}
.adm-drawer__msg{background:#fff;border:1px solid var(--line);border-radius:16px;padding:16px 18px;font-size:.95rem;
  line-height:1.6;color:var(--ink);white-space:pre-wrap}
.adm-drawer__replies{display:flex;flex-direction:column;gap:8px;font-size:.88rem;color:var(--muted);background:var(--soft-blue-2);
  border-radius:14px;padding:12px 16px;line-height:1.55}
.adm-drawer__replies b{color:var(--navy)}
.adm-drawer__box{width:100%;border:1.5px solid var(--line);border-radius:14px;padding:14px 16px;font-family:inherit;font-size:.95rem;
  color:var(--navy);background:#fff;outline:none;resize:vertical;line-height:1.55}
.adm-drawer__box:focus{border-color:var(--gold-soft);box-shadow:0 0 0 4px rgba(212,147,4,.1)}
.adm-drawer__acts{display:flex;gap:12px;align-items:center}
@media (max-width:760px){
  .adm-row{grid-template-columns:26px 1fr auto;grid-auto-flow:dense}
  .adm-row .msg,.adm-row .when{display:none}
  .adm__tabs{overflow-x:auto}
}
 
/* ===================== MY DESK — sidebar app (.dz) ===================== */
.dz{--sbw:258px;display:grid;grid-template-columns:var(--sbw) minmax(0,1fr);width:100%;min-height:100vh;background:var(--cream);font-family:'Inter',system-ui,sans-serif;color:var(--ink)}
.dz--center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;min-height:100vh;text-align:center;padding:80px 20px;font-size:1.05rem;color:var(--muted)}
/* ===================== SITE-WIDE LOADER — spinning Shamash ===================== */
.rd-loader{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;min-height:160px;padding:44px 20px;text-align:center}
.rd-loader--full{min-height:100vh}
.rd-loader__spin{display:inline-block;animation:rdLoaderSpin 1.7s cubic-bezier(.62,.06,.36,1) infinite;filter:drop-shadow(0 6px 14px rgba(212,147,4,.22))}
.rd-loader__msg{margin:0;font-size:.98rem;color:var(--muted);letter-spacing:.01em;display:flex;align-items:baseline;gap:1px}
.rd-loader__dots{display:inline-flex;margin-left:2px}
.rd-loader__dots span{animation:rdLoaderDot 1.4s ease-in-out infinite;opacity:.25}
.rd-loader__dots span:nth-child(2){animation-delay:.18s}
.rd-loader__dots span:nth-child(3){animation-delay:.36s}
@keyframes rdLoaderSpin{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.12)}100%{transform:rotate(360deg) scale(1)}}
@keyframes rdLoaderDot{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
/* modal host must NOT reserve a blank screen under the app */
.genroot.dz-pvhost{min-height:0;background:transparent;display:block}
.dz__side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:18px;padding:22px 16px;background:var(--navy);color:#dbe4f5;box-shadow:inset -1px 0 0 rgba(255,255,255,.05)}
.dz__brand{display:block;padding:4px 8px 2px}
.dz__brand img{height:26px;filter:brightness(0) invert(1)}
.dz__new{width:100%;justify-content:center;font-size:.92rem !important;padding:11px 16px !important}
.dz__nav{display:flex;flex-direction:column;gap:3px;margin-top:4px}
.dz__nav button{display:flex;align-items:center;gap:11px;width:100%;text-align:left;border:0;background:none;cursor:pointer;font:inherit;font-size:.94rem;color:#b9c6e2;padding:10px 12px;border-radius:12px;transition:.16s}
.dz__nav button svg{flex:none;opacity:.85}
.dz__nav button:hover{background:rgba(255,255,255,.07);color:#fff}
.dz__nav button.on{background:rgba(212,147,4,.16);color:#fff;font-weight:600}
.dz__nav button.on svg{color:var(--gold-soft);opacity:1}
.dz__nav button em{margin-left:auto;background:var(--gold);color:#3a2a00;font-style:normal;font-weight:700;font-size:.72rem;min-width:19px;height:19px;display:grid;place-items:center;border-radius:999px;padding:0 5px}
.dz__nav button em.soft{background:rgba(255,255,255,.14);color:#dbe4f5}
.dz__nav button.on em.soft{background:rgba(255,255,255,.22);color:#fff}
.dz__bottom{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid rgba(255,255,255,.1)}
.dz__me{display:flex;align-items:center;gap:10px;min-width:0}
.dz__me img{width:34px;height:34px;border-radius:50%;object-fit:cover;flex:none;border:1.5px solid rgba(255,255,255,.3)}
.dz__me div{min-width:0}
.dz__me b{display:block;font-size:.88rem;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dz__me span{display:block;font-size:.75rem;color:#93a3c6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dz__out{display:flex;align-items:center;gap:9px;width:100%;border:0;background:rgba(255,255,255,.05);color:#b9c6e2;cursor:pointer;font:inherit;font-size:.86rem;padding:9px 12px;border-radius:11px;transition:.16s}
.dz__out:hover{background:rgba(255,90,90,.16);color:#ffd7d7}
/* main column fills all remaining width; inner keeps a comfortable measure */
.dz__main{min-width:0;padding:36px 44px 90px;position:relative;display:flex;flex-direction:column}
/* The 90px bottom padding above is deliberate breathing room for tabs that
   scroll (Dashboard, Library, ...) so content never butts against the
   window edge. The Assistant tab is different: it's a fixed-height chat
   panel (see the .dz__inner--full/.shm/.shm-log flex-fill chain), so
   that same 90px just reads as a dead gap between the input row and the
   bottom of the screen — a real chat app's input bar sits close to the
   edge, not floating 90px above it. Scope a smaller value to this tab only.
   height:100vh + overflow:hidden is the actual fix for the header/composer
   scrolling away with the rest of the page on a long chat: .dz (the outer
   grid) only sets min-height:100vh, which is a floor, not a ceiling, so
   without a real cap here .dz__main just grows to fit however tall the
   message log gets and the WHOLE PAGE scrolls once there's enough history
   -- taking the "pinned" header/composer with it. Capping this one
   ancestor at exactly 100vh is what makes the .dz__inner--full/.shm/
   .shm-log flex-fill chain below actually bounded, so only .shm-log
   itself scrolls (see its overflow-y:auto) and the header/composer never
   move again, no matter how long the conversation gets. Every other tab
   is untouched — this only applies where .dz__inner--full is present. */
.dz__main:has(> .dz__inner--full){padding-bottom:20px;height:100vh;overflow:hidden}
.dz__inner{max-width:1120px;margin:0 auto;width:100%}
/* Shamash/assistant tab is a chat UI, not article-width content — let it use
   the full main-column width instead of the 1120px measure the other tabs use.
   It also needs to FILL the available height (not just shrink to its content's
   natural height) so a short/empty chat doesn't cluster the whole panel at the
   top of a tall viewport with dead space below — see .shm/.shm-log below,
   which are the other links in this same flex-fill chain. */
.dz__inner--full{max-width:none;display:flex;flex-direction:column;flex:1;min-height:0}
/* My Class: a roster grid (now auto-fit, see .cls-grid) reads better filling
   the full main-column width than boxed into the 1120px article measure —
   on a wide screen that measure was leaving large equal-width empty gutters
   on both sides of the whole tab (heading, tools row and grid alike), not
   just inside the grid. Plain width change only — unlike --full above, this
   tab scrolls normally and doesn't want the flex-fill chat sizing. */
.dz__inner--wide{max-width:none}
.dz__flash{position:fixed;top:20px;right:24px;z-index:60;background:var(--navy);color:#fff;padding:11px 18px;border-radius:12px;font-size:.9rem;box-shadow:var(--shadow);animation:dzflash .3s ease}
@keyframes dzflash{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.dz-hi{font-family:'Fraunces',serif;font-weight:500;font-size:2.05rem;color:var(--navy);margin:0 0 4px;line-height:1.15}
/* The waving Shamash next to the dashboard greeting -- was a static 👋
   emoji, now the real mascot giving an actual wave (rotates from the
   bottom, like a hand waving from the wrist). */
.dz-hi__wave{vertical-align:-8px;margin-left:4px;transform-origin:50% 90%;animation:dzWave 1.8s ease-in-out 1;animation-delay:.3s}
@keyframes dzWave{
  0%,100%{transform:rotate(0deg)}
  15%{transform:rotate(14deg)}
  30%{transform:rotate(-8deg)}
  45%{transform:rotate(14deg)}
  60%{transform:rotate(-8deg)}
  75%{transform:rotate(6deg)}
}
.dz-sub{color:var(--muted);margin:0 0 26px;font-size:.98rem}
.dz-h2{font-family:'Fraunces',serif;font-weight:500;font-size:1.3rem;color:var(--navy);margin:36px 0 8px}
.dz-note2{color:var(--muted);font-size:.9rem;margin:0 0 16px}
/* stats */
.dz-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}
.dz-stat{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow-sm)}
.dz-stat i{font-size:1.15rem;font-style:normal}
.dz-stat b{display:block;font-family:'Fraunces',serif;font-size:1.75rem;color:var(--navy);line-height:1.1;margin:6px 0 2px}
.dz-stat span{font-size:.8rem;color:var(--muted)}
/* continue working */
.dz-cont{display:flex;align-items:center;justify-content:space-between;gap:18px;background:linear-gradient(120deg,#fff,#f6f0e2);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 22px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
.dz-cont>div{min-width:0}
.dz-cont .dz-k{display:block;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gold-deep);font-weight:700;margin-bottom:4px}
.dz-cont b{display:block;font-family:'Fraunces',serif;font-size:1.16rem;color:var(--navy)}
.dz-cont .m{display:block;font-size:.83rem;color:var(--muted);margin-top:3px}
.dz-cont .btn{flex:none}
/* create banner */
.dz-banner{display:flex;align-items:center;justify-content:space-between;gap:18px;background:linear-gradient(120deg,var(--navy),#0a3187);color:#eaf0fb;border-radius:var(--r-lg);padding:24px 28px;margin-bottom:6px;overflow:hidden;position:relative;box-shadow:var(--shadow-sm)}
.dz-banner b{display:block;font-family:'Fraunces',serif;font-size:1.28rem;color:#fff;margin-bottom:5px}
.dz-banner span{font-size:.9rem;color:#c3d0ea;max-width:52ch;display:block;line-height:1.5}
.dz-banner .btn{flex:none}
/* chips */
.dz-chips{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:6px}
.dz-chip{background:var(--warm-white);border:1px solid var(--line);border-radius:999px;padding:9px 18px;font-size:.9rem;font-weight:500;color:var(--navy);transition:.16s;box-shadow:var(--shadow-sm)}
.dz-chip:hover{border-color:var(--gold);background:#fff;transform:translateY(-1px)}
/* subject grid (each tile → /create/<slug>) */
.dz-subs{display:grid;grid-template-columns:repeat(auto-fit,minmax(184px,1fr));gap:14px}
.dz-subcard{display:flex;flex-direction:column;gap:3px;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);padding:18px 18px 16px;transition:.16s;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.dz-subcard::after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--gold);opacity:0;transition:.16s}
.dz-subcard i{font-size:1.7rem;font-style:normal;margin-bottom:8px}
.dz-subcard b{font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--navy)}
.dz-subcard span{font-size:.82rem;color:var(--muted);line-height:1.4}
.dz-subcard:hover{border-color:var(--gold);transform:translateY(-3px);box-shadow:var(--shadow)}
.dz-subcard:hover::after{opacity:1}
/* tools row */
.dz-tools{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 18px}
.dz-search{flex:1;min-width:220px;border:1px solid var(--line);border-radius:12px;padding:11px 15px;font:inherit;font-size:.92rem;background:var(--warm-white);color:var(--ink)}
.dz-tools select{border:1px solid var(--line);border-radius:12px;padding:11px 14px;font:inherit;font-size:.9rem;background:var(--warm-white);color:var(--ink);cursor:pointer}
.dz-search:focus,.dz-tools select:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
/* cards */
.dz-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(292px,1fr));gap:16px}
.dz-card{position:relative;display:flex;flex-direction:column;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);transition:.18s;box-shadow:var(--shadow-sm)}
.dz-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.dz-card__main{display:block;width:100%;text-align:left;border:0;background:none;cursor:pointer;font-family:inherit;padding:20px 44px 6px 20px;flex:1}
.dz-card__title{display:block;font-family:'Fraunces',serif;font-weight:500;font-size:1.06rem;color:var(--navy);line-height:1.3;margin-bottom:10px}
.dz-card__title i{font-style:normal}
.dz-card__chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.dz-card__chips em{font-style:normal;font-size:.72rem;font-weight:600;padding:3px 9px;border-radius:999px}
.dz-card__chips .c-sub{background:var(--soft-blue);color:var(--navy)}
.dz-card__chips .c-gr{background:#f0ead9;color:var(--gold-deep)}
.dz-card__chips .c-mat{background:#eef2f1;color:var(--muted)}
.dz-card__date{display:block;font-size:.8rem;color:var(--muted-2)}
.dz-card__fav{position:absolute;top:12px;right:12px;border:0;background:none;cursor:pointer;color:var(--muted-2);padding:5px;line-height:0;border-radius:8px;transition:.16s;z-index:2}
.dz-card__fav:hover{background:#f6f0e2}
.dz-card__foot{display:flex;align-items:center;gap:8px;padding:12px 16px 14px;border-top:1px solid var(--line);margin-top:6px}
.dz-card__open{border:0;background:var(--navy);color:#fff;font:inherit;font-size:.82rem;font-weight:600;padding:7px 15px;border-radius:999px;cursor:pointer;transition:.16s}
.dz-card__open:hover{background:#0a3187}
.dz-card__again{font-size:.82rem;font-weight:600;color:var(--gold-deep)}
.dz-card__again:hover{text-decoration:underline}
.dz-card__del{margin-left:auto;border:0;background:none;cursor:pointer;color:var(--muted-2);padding:6px;line-height:0;border-radius:8px;transition:.16s}
.dz-card__del:hover{background:#fbe9e9;color:#c0392b}
/* template cards */
.dz-card--tpl{padding:22px 22px 18px;display:flex;flex-direction:column;gap:2px;cursor:pointer}
.dz-tpl__ico{font-size:1.9rem;margin-bottom:8px}
.dz-card--tpl .dz-card__title{margin-bottom:8px}
.dz-tpl__desc{display:block;font-size:.86rem;color:var(--muted);line-height:1.5;margin:0 0 14px}
.dz-card--tpl .dz-card__chips{margin-bottom:14px}
.dz-tpl__go{font-size:.84rem;font-weight:600;color:var(--gold-deep);margin-top:auto}
.dz-card--tpl:hover .dz-tpl__go{text-decoration:underline}
/* empty + misc */
.dz-empty{text-align:center;padding:52px 20px;color:var(--muted);background:var(--warm-white);border:1px dashed var(--line);border-radius:var(--r-lg);display:flex;flex-direction:column;align-items:center;gap:14px}
.dz-empty p{margin:0;font-size:.98rem}

/* app/not-found.tsx — the 404 page. Reuses PageShell's chrome + spacing
   (.pmain > .pbody:first-child above already clears the fixed navbar since
   this page has no .phero) so it feels like part of the site, not an
   error the site fell out of. */
.notfound{display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:6px;max-width:440px;margin:0 auto;padding:10px 20px 40px}
.notfound__num{font-family:'Fraunces',serif;font-weight:500;font-size:clamp(2.4rem,6vw,3.4rem);
  color:var(--gold-deep);line-height:1;margin-top:14px}
.notfound h1{font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;color:var(--navy);margin:2px 0 0}
.notfound p{color:var(--muted);font-size:.98rem;line-height:1.6;margin:10px 0 4px}
.notfound__acts{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-top:10px}
.dz-seeall{margin-top:18px;border:0;background:none;color:var(--gold-deep);font:inherit;font-size:.92rem;font-weight:600;cursor:pointer}
.dz-seeall:hover{text-decoration:underline}
.dz-fine{font-size:.82rem;color:var(--muted-2);margin-top:16px}
/* settings */
.dz-set{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
.dz-set h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.14rem;color:var(--navy);margin:0 0 16px}
.dz-set__row2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:14px}
.dz-set__row2:last-child{margin-bottom:0}
.dz-set label{display:flex;flex-direction:column;gap:6px;font-size:.86rem;font-weight:600;color:var(--navy)}
.dz-set label small{font-weight:400;color:var(--muted-2);font-size:.78rem}
.dz-set input,.dz-set select{border:1px solid var(--line);border-radius:11px;padding:10px 13px;font:inherit;font-size:.92rem;font-weight:400;background:#fff;color:var(--ink)}
.dz-set input:disabled{background:#f4f1ea;color:var(--muted);cursor:not-allowed}
.dz-set input:focus,.dz-set select:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.dz-set__toggle{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:11px 0;border-top:1px solid var(--line)}
.dz-set__toggle:first-of-type{border-top:0}
.dz-set__toggle b{display:block;font-size:.92rem;color:var(--navy)}
.dz-set__toggle span{display:block;font-size:.82rem;color:var(--muted)}
.dz-toggle{flex:none;width:44px;height:25px;border-radius:999px;border:0;background:#cfd6e2;cursor:pointer;position:relative;transition:.2s;padding:0}
.dz-toggle i{position:absolute;top:3px;left:3px;width:19px;height:19px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.dz-toggle.on{background:var(--gold)}
.dz-toggle.on i{left:22px}
.dz-set__note{font-size:.88rem;color:var(--muted);margin:0 0 10px}
.dz-set__link{font-size:.9rem;font-weight:600;color:var(--gold-deep)}
.dz-set__link:hover{text-decoration:underline}
.dz-saverow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:6px}
.dz-save__hint{font-size:.82rem;color:var(--muted-2)}
@media (max-width:1000px){
  .dz-stats{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:900px){
  .dz-set__row2{grid-template-columns:1fr}
}
@media (max-width:760px){
  .dz{grid-template-columns:1fr}
  .dz__side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 14px}
  .dz__brand{flex:none}
  .dz__new{width:auto;order:3;margin-left:auto}
  .dz__nav{flex-direction:row;flex-wrap:wrap;order:4;width:100%;margin-top:0;gap:6px}
  .dz__nav button{width:auto}
  .dz__nav button em{margin-left:6px}
  .dz__bottom{order:2;margin-top:0;flex-direction:row;align-items:center;border-top:0;padding-top:0;gap:12px}
  .dz__out{width:auto}
  .dz__me span{display:none}
  .dz__main{padding:22px 18px 60px}
  .dz-cont,.dz-banner{flex-direction:column;align-items:flex-start}
}
/* navbar avatar */
.nav__ava{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;overflow:visible;background:var(--navy);color:#fff;font-weight:600;font-size:.95rem;border:2px solid transparent;transition:.16s;flex:none;position:relative}
.nav__ava:hover{border-color:var(--gold)}
.nav__ava img{width:100%;height:100%;object-fit:cover;border-radius:50%}
 
/* ===================== MY DESK — quick actions + avatar builder ===================== */
/* sidebar avatar wrapper (holds img / svg / initial) */
.dz__meav{width:38px;height:38px;border-radius:50%;overflow:visible;flex:none;display:block;border:1.5px solid rgba(255,255,255,.3);background:rgba(255,255,255,.08);position:relative}
.dz__meav img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
.dz__meav svg{width:100%;height:100%;display:block;border-radius:50%}
.dz__meinit{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-weight:700;font-size:.95rem;color:#fff}
/* smart quick actions */
.dz-qa{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}
.dz-qacard{position:relative;display:flex;flex-direction:column;gap:2px;padding:18px 18px 16px;border-radius:var(--r);color:#fff;overflow:hidden;min-height:150px;box-shadow:var(--shadow-sm);transition:.18s;isolation:isolate}
.dz-qacard::before{content:"";position:absolute;inset:0;background:linear-gradient(150deg,rgba(255,255,255,.16),rgba(255,255,255,0) 55%);z-index:-1}
.dz-qacard:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.dz-qacard i{font-size:1.6rem;font-style:normal;margin-bottom:6px}
.dz-qa__k{font-size:.7rem;letter-spacing:.07em;text-transform:uppercase;font-weight:700;opacity:.85}
.dz-qacard b{font-family:'Fraunces',serif;font-weight:500;font-size:1.32rem;line-height:1.15;margin:2px 0}
.dz-qa__s{font-size:.82rem;opacity:.85}
.dz-qa__go{margin-top:auto;padding-top:10px;font-size:.82rem;font-weight:600;opacity:.95}
.dz-qacard:hover .dz-qa__go{text-decoration:underline}
.dz-qa--navy{background:linear-gradient(150deg,#0a3187,#002469)}
.dz-qa--gold{background:linear-gradient(150deg,#e2a516,#c07d02);color:#3a2a00}
.dz-qa--gold .dz-qa__k{opacity:.7}
.dz-qa--plum{background:linear-gradient(150deg,#6d3350,#4a2038)}
.dz-qa--green{background:linear-gradient(150deg,#20785f,#12503c)}
/* avatar builder */
.dz-av{display:grid;grid-template-columns:200px 1fr;gap:26px;align-items:start}
.dz-av__preview{display:flex;flex-direction:column;align-items:center;gap:14px}
.dz-av__ring{width:128px;height:128px;border-radius:50%;overflow:hidden;background:var(--cream-2);border:3px solid var(--line);box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:center}
.dz-av__ring img{width:100%;height:100%;object-fit:cover}
.dz-av__ring svg{width:100%;height:100%}
.dz-av__init{font-family:'Fraunces',serif;font-size:3rem;color:var(--navy)}
.dz-av__switch{display:inline-flex;background:var(--cream-2);border:1px solid var(--line);border-radius:999px;padding:3px}
.dz-seg{border:0;background:none;cursor:pointer;font:inherit;font-size:.78rem;font-weight:600;color:var(--muted);padding:6px 12px;border-radius:999px;transition:.16s}
.dz-seg.on{background:#fff;color:var(--navy);box-shadow:var(--shadow-sm)}
.dz-av__builder{min-width:0}
.dz-av__hint{font-size:.86rem;color:var(--muted);margin:0 0 16px;line-height:1.5}
.dz-av__row{display:flex;align-items:center;gap:14px;padding:9px 0;border-top:1px solid var(--line)}
.dz-av__row:first-of-type{border-top:0}
.dz-av__row>label{flex:none;width:112px;font-size:.86rem;font-weight:600;color:var(--navy)}
.dz-sw{display:flex;gap:8px;flex-wrap:wrap}
.dz-sw__d{width:26px;height:26px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--line);cursor:pointer;transition:.14s;padding:0}
.dz-sw__d:hover{transform:scale(1.1)}
.dz-sw__d.on{box-shadow:0 0 0 2px var(--gold);transform:scale(1.08)}
.dz-chipset{display:flex;gap:8px;flex-wrap:wrap}
.dz-optchip{border:1px solid var(--line);background:var(--warm-white);cursor:pointer;font:inherit;font-size:.82rem;font-weight:500;color:var(--navy);padding:6px 13px;border-radius:999px;transition:.14s}
.dz-optchip:hover{border-color:var(--gold)}
.dz-optchip.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.dz-av__builder--photo .dz-set__link{display:inline-block;margin-top:4px}
@media (max-width:1000px){
  .dz-qa{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:760px){
  .dz-qa{grid-template-columns:1fr}
  .dz-av{grid-template-columns:1fr}
  .dz-av__preview{align-items:flex-start}
}
 
/* ===================== CUSTOM AUTH PAGES (.auth) ===================== */
.auth{min-height:100vh;display:grid;grid-template-columns:1fr 1fr;background:var(--cream)}
.auth--center{display:flex;align-items:center;justify-content:center}
.auth__panel{display:flex;flex-direction:column;justify-content:center;max-width:440px;width:100%;margin:0 auto;padding:48px 40px}
.auth__brand{display:block;margin-bottom:26px}
.auth__brand img{height:32px}
.auth__panel h1{font-family:'Fraunces',serif;font-weight:500;font-size:2rem;color:var(--navy);margin:0 0 8px;line-height:1.15}
.auth__lead{color:var(--muted);font-size:.98rem;margin:0 0 24px;line-height:1.5}
.auth__google{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;border:1px solid var(--line);background:#fff;border-radius:12px;padding:12px;font:inherit;font-size:.95rem;font-weight:600;color:var(--ink);cursor:pointer;transition:.16s}
.auth__google:hover{border-color:var(--muted-2);box-shadow:var(--shadow-sm)}
/* Points at the actual fix when a sign-in attempt fails specifically
   because the account has no password -- it was created via Google (see
   friendlySignInError in the sign-in page) -- instead of leaving that
   error sitting mutely under the password box. */
.auth__google--highlight{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-glow);animation:authgooglepulse 1.6s ease-in-out 2}
@keyframes authgooglepulse{0%,100%{box-shadow:0 0 0 3px var(--gold-glow)}50%{box-shadow:0 0 0 6px var(--gold-glow)}}
.auth__or{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted-2);font-size:.82rem}
.auth__or::before,.auth__or::after{content:"";flex:1;height:1px;background:var(--line)}
.auth__form{display:flex;flex-direction:column;gap:14px}
.auth__form label{display:flex;flex-direction:column;gap:6px;font-size:.85rem;font-weight:600;color:var(--navy)}
.auth__form input{border:1px solid var(--line);border-radius:12px;padding:12px 14px;font:inherit;font-size:.98rem;font-weight:400;background:#fff;color:var(--ink)}
.auth__form input:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.auth__submit{width:100%;justify-content:center;margin-top:4px;padding:13px !important}
.auth__err{background:#fbe9e9;color:#a3271b;border-radius:10px;padding:9px 12px;font-size:.86rem;margin:0}
.auth__err--google{background:#fdf6e7;color:#7a5a10;margin-top:10px}
.auth__fine{font-size:.9rem;color:var(--muted);margin-top:20px}
.auth__fine a{color:var(--gold-deep);font-weight:600}
.auth__dot{margin:0 8px;color:var(--line-2,#ccc)}
.auth__link{border:0;background:none;color:var(--gold-deep);font:inherit;font-size:.9rem;font-weight:600;cursor:pointer;padding:0}
.auth__link:hover{text-decoration:underline}
.auth__aside{background:linear-gradient(150deg,var(--navy),#04123a);display:flex;align-items:center;justify-content:center;padding:40px;position:relative;overflow:hidden}
.auth__aside::after{content:"";position:absolute;bottom:-30%;right:-20%;width:70%;height:70%;border-radius:50%;background:radial-gradient(circle,rgba(212,147,4,.28),transparent 70%)}
.auth__quote{text-align:center;position:relative;z-index:1}
.auth__quote p{font-family:'Fraunces',serif;font-size:1.9rem;color:#fff;line-height:1.3;margin:0 0 12px;max-width:16ch}
.auth__quote span{color:var(--gold-soft);font-size:.9rem;letter-spacing:.03em}
.auth__loading{display:flex;flex-direction:column;align-items:center;gap:16px;color:var(--muted)}
.auth__loading img{height:34px}
@media (max-width:820px){ .auth{grid-template-columns:1fr} .auth__aside{display:none} }
 
/* ===================== INBOX (rebbi) ===================== */
.dz-inbox{display:flex;flex-direction:column;gap:12px;max-width:720px}
.dz-msg{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);padding:18px 20px;box-shadow:var(--shadow-sm);position:relative}
.dz-msg.unread{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold-glow),var(--shadow-sm)}
.dz-msg__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.dz-msg__brand{display:inline-flex;align-items:center;gap:7px;font-size:.78rem;font-weight:700;color:var(--navy);letter-spacing:.02em}
.dz-msg__dot{width:8px;height:8px;border-radius:50%;background:var(--gold)}
.dz-msg.unread .dz-msg__dot{box-shadow:0 0 0 3px var(--gold-glow)}
.dz-msg__when{font-size:.78rem;color:var(--muted-2)}
.dz-msg__title{display:block;font-family:'Fraunces',serif;font-size:1.1rem;color:var(--navy);margin-bottom:4px}
.dz-msg__body{margin:0;font-size:.92rem;color:var(--muted);line-height:1.55;white-space:pre-wrap}
 
/* unread dots on avatars */
.dz__meav{position:relative}
.dz__medot{position:absolute;top:-6px;right:-6px;min-width:17px;height:17px;padding:0 4px;border-radius:999px;background:var(--gold);color:#3a2a00;font-size:.66rem;font-weight:800;font-style:normal;display:flex;align-items:center;justify-content:center;border:2px solid var(--navy)}
.nav__ava{position:relative}
.nav__ava-dot{position:absolute;top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--gold);color:#3a2a00;font-size:.64rem;font-weight:800;font-style:normal;display:flex;align-items:center;justify-content:center;border:2px solid var(--cream)}
 
/* photo upload */
.dz-upload{display:inline-block;margin-top:6px;border:1px solid var(--line);background:var(--warm-white);border-radius:11px;padding:10px 16px;font-size:.9rem;font-weight:600;color:var(--navy);cursor:pointer;transition:.16s}
.dz-upload:hover{border-color:var(--gold)}
.dz-upload input{display:none}
 
/* ===================== ADMIN additions ===================== */
.adm-lock{display:flex;flex-direction:column;align-items:center;gap:12px;background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);padding:38px 36px;box-shadow:var(--shadow);max-width:360px;width:100%}
.adm-lock img{height:30px;margin-bottom:2px}
.adm-lock h1{font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;color:var(--navy);margin:0}
.adm-lock p{color:var(--muted);font-size:.9rem;margin:0;text-align:center}
.adm-lock input{width:100%;border:1px solid var(--line);border-radius:11px;padding:12px 14px;font:inherit;font-size:1rem;text-align:center;letter-spacing:.05em}
.adm-lock input:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.adm-lock .btn{width:100%;justify-content:center}
.adm-lock__err{color:#c0392b;font-size:.84rem}
.adm-quick{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:6px 0 22px}
.adm-urow{cursor:pointer;grid-template-columns:34px 1.1fr 1.6fr auto auto !important}
.adm-urow .ava{width:30px;height:30px;border-radius:50%;overflow:hidden;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem}
.adm-urow .ava img{width:100%;height:100%;object-fit:cover}
.adm-urow:hover{border-color:var(--gold)}
.adm-uacts{display:flex;flex-direction:column;gap:10px}
.adm-uact{text-align:left;border:1px solid var(--line);background:var(--warm-white);border-radius:14px;padding:14px 16px;cursor:pointer;transition:.16s;font:inherit}
.adm-uact:hover{border-color:var(--gold);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.adm-uact b{display:block;color:var(--navy);font-size:.98rem;margin-bottom:2px}
.adm-uact span{display:block;color:var(--muted);font-size:.84rem}
.adm-compose{display:flex;flex-direction:column;gap:12px}
.adm-compose input,.adm-compose textarea{border:1px solid var(--line);border-radius:11px;padding:11px 14px;font:inherit;font-size:.95rem;background:#fff;color:var(--ink);resize:vertical}
.adm-compose input:focus,.adm-compose textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.adm-compose label{display:flex;flex-direction:column;gap:6px;font-size:.86rem;font-weight:600;color:var(--navy)}
.adm-compose label small{font-weight:400;color:var(--muted-2);font-size:.78rem}
 
/* 3D avatar kit compositor — layered pre-rendered PNG parts */
.rb3d{position:relative;border-radius:50%;overflow:hidden;flex:none}
.rb3d img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center bottom}
 
/* profile picture picker (photo / RebbisDesk icon) */
.dz-picks{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.dz-choice{display:inline-flex;align-items:center;gap:10px;border:1px solid var(--line);background:var(--warm-white);border-radius:11px;padding:9px 14px 9px 9px;font:inherit;font-size:.9rem;font-weight:600;color:var(--navy);cursor:pointer;transition:.16s}
.dz-choice svg{border-radius:50%}
.dz-choice:hover{border-color:var(--gold)}
.dz-choice.on{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold-glow)}
 
/* auth: richer aside + clean footer */
.auth__fine--row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.auth__fine--row .auth__link{margin:0}
.auth__hero{position:relative;z-index:1;max-width:400px;color:#eaf0fb}
.auth__logo{height:30px;filter:brightness(0) invert(1);opacity:.95;margin-bottom:22px}
.auth__quotebig{font-family:'Fraunces',serif;font-size:2rem;color:#fff;line-height:1.25;margin:0 0 26px}
.auth__points{list-style:none;margin:0 0 26px;padding:0;display:flex;flex-direction:column;gap:14px}
.auth__points li{display:flex;align-items:flex-start;gap:12px;font-size:.98rem;color:#cdd8ee;line-height:1.45}
.auth__points li span{font-size:1.15rem;flex:none;line-height:1.2}
.auth__aside-foot{color:var(--gold-soft);font-size:.85rem;letter-spacing:.03em}
 
/* admin overview columns */
.adm-cols{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:18px}
.adm-col__h{font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--navy);margin:0 0 10px}
@media (max-width:820px){ .adm-cols{grid-template-columns:1fr} }
 
/* desk: storage-off warning */
.dz-warn{background:#fdf3e0;border:1px solid #e9c98a;color:#7a5a12;border-radius:12px;padding:13px 16px;font-size:.9rem;line-height:1.5;margin:0 0 20px}
.dz-warn b{color:#5c4409}
 
/* admin: customer-service drawer + guides */
.adm-cs{display:flex;flex-direction:column;gap:16px}
.adm-pro{background:rgba(212,147,4,.14);border:1px solid var(--gold);color:var(--gold-deep);border-radius:10px;padding:8px 12px;font-size:.85rem;font-weight:600}
.adm-cs__block{border-top:1px solid var(--line);padding-top:12px}
.adm-cs__block:first-of-type{border-top:0;padding-top:0}
.adm-cs__block h4{margin:0 0 8px;font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2)}
.adm-cs__row{display:flex;gap:8px;align-items:center}
.adm-cs__row input{width:74px;border:1px solid var(--line);border-radius:9px;padding:8px 10px;font:inherit;font-size:.95rem}
.adm-cs__chips{display:flex;gap:8px;flex-wrap:wrap}
.adm-cs__hint{font-size:.8rem;color:var(--muted-2);margin:6px 0 0}
.adm-mini--danger{color:#c0392b;border-color:#e6b3ab}
.adm-tag{font-style:normal;color:var(--gold-deep);font-weight:700;font-size:.78rem}
.adm-drawer--wide{max-width:820px}
.adm-draftpre{white-space:pre-wrap;word-break:break-word;background:#fbf7ef;border:1px solid var(--line);border-radius:12px;padding:16px;max-height:56vh;overflow:auto;font-family:Georgia,serif;font-size:.9rem;color:var(--ink);line-height:1.5}
.adm-guides{max-width:760px}
.adm-guide{background:var(--warm-white);border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin-bottom:12px}
.adm-guide h3{margin:0 0 6px;font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--navy)}
.adm-guide p{margin:0;font-size:.92rem;color:var(--muted);line-height:1.55}
.adm-guide code{background:#eef2f7;padding:1px 6px;border-radius:5px;font-size:.85em;color:var(--navy)}
.adm-guide--warn{background:#fdf3e0;border-color:#e9c98a}
.adm-guide--warn h3{color:#7a5a12}


/* admin: universal search + analytics + notes */
.adm-search{position:relative;max-width:640px;margin:14px auto 0;display:flex;align-items:center;gap:10px;background:#0d2352;border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:9px 14px}
.adm-search svg{color:#8ea3c8;flex:none}
.adm-search input{flex:1;border:0;background:none;color:#fff;font:inherit;font-size:.95rem;outline:none}
.adm-search input::placeholder{color:#7f8db0}
.adm-search__x{border:0;background:none;color:#8ea3c8;cursor:pointer;font-size:.9rem}
.adm-sresults{position:absolute;top:calc(100% + 6px);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lg);z-index:40;overflow:hidden;max-height:60vh;overflow-y:auto}
.adm-sitem{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);background:#fff;cursor:pointer;font:inherit;padding:9px 14px}
.adm-sitem:hover{background:#f6f8fc}
.adm-sitem .ava{width:26px;height:26px;border-radius:50%;overflow:hidden;flex:none;display:flex}
.adm-sitem .ava img{width:100%;height:100%;object-fit:cover}
.adm-sitem .who{font-weight:600;color:var(--navy);white-space:nowrap}
.adm-sitem .msg{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.adm-sitem .k{flex:none}
.adm-stats--6{grid-template-columns:repeat(6,1fr)}
.adm-bars{display:flex;flex-direction:column;gap:9px}
.adm-bar{display:grid;grid-template-columns:120px 1fr 32px;align-items:center;gap:10px}
.adm-bar__l{font-size:.85rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-bar__t{background:rgba(14,29,61,.08);border-radius:999px;height:12px;overflow:hidden}
.adm-bar__t i{display:block;height:100%;background:linear-gradient(90deg,var(--gold-soft),var(--gold));border-radius:999px}
.adm-bar__n{font-size:.82rem;color:var(--muted);text-align:right}
.adm-pro--danger{background:rgba(192,57,43,.14);border-color:#c0392b;color:#e88}
.adm-notes{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.adm-note{background:#f6f8fc;border:1px solid var(--line);border-radius:9px;padding:8px 11px;font-size:.86rem;color:var(--ink)}
.adm-note span{display:block;font-size:.72rem;color:var(--muted-2);margin-bottom:2px}
@media (max-width:900px){ .adm-stats--6{grid-template-columns:repeat(3,1fr)} }
 
/* desk: plan banner */
.dz-plan{display:flex;align-items:center;justify-content:space-between;gap:16px;border-radius:var(--r-lg);padding:16px 22px;margin:0 0 22px;box-shadow:var(--shadow-sm);flex-wrap:wrap}
.dz-plan--free{background:linear-gradient(120deg,#fff,#f2f6fc);border:1px solid var(--line)}
.dz-plan--pro,.dz-plan--school{background:linear-gradient(120deg,var(--navy),#0a3187);border:1px solid var(--navy)}
.dz-plan__k{display:block;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--gold-deep);margin-bottom:3px}
.dz-plan--pro .dz-plan__k,.dz-plan--school .dz-plan__k{color:var(--gold-soft)}
.dz-plan b{font-family:'Fraunces',serif;font-size:1.12rem;color:var(--navy)}
.dz-plan--pro b,.dz-plan--school b{color:#fff}
.dz-plan__acts{display:flex;gap:8px;flex-wrap:wrap}
.dz-plan__top,.dz-plan__mng{border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.08);color:#fff;font:inherit;font-size:.85rem;font-weight:600;padding:8px 14px;border-radius:999px;cursor:pointer;transition:.16s}
.dz-plan__top:hover,.dz-plan__mng:hover{background:rgba(255,255,255,.18)}
.pv-act--lock{border-color:var(--gold)!important;color:var(--gold-deep)!important;font-weight:600}
/* pricing: monthly/yearly toggle */
.price-toggle{display:inline-flex;gap:4px;background:var(--cream-2);border:1px solid var(--line);border-radius:999px;padding:4px;margin:0 auto 26px;justify-content:center}
.price-toggle{display:flex;width:max-content;margin-left:auto;margin-right:auto}
.price-toggle button{border:0;background:none;cursor:pointer;font:inherit;font-size:.9rem;font-weight:600;color:var(--muted);padding:8px 18px;border-radius:999px;transition:.16s;display:inline-flex;align-items:center;gap:7px}
.price-toggle button.on{background:#fff;color:var(--navy);box-shadow:var(--shadow-sm)}
.price-toggle button em{font-style:normal;font-size:.72rem;background:var(--gold);color:#3a2a00;padding:2px 7px;border-radius:999px;font-weight:700}
 
/* ---- Free-tier locks & upsells ---- */
.genroot .opt--lock{opacity:.72;border-style:dashed}
.genroot .opt--lock:hover{opacity:1;border-color:var(--gold)}
.genroot .opt__pro{display:inline-block;margin-left:6px;font-size:.66rem;font-weight:700;color:var(--gold-deep);background:#fdf6e4;border:1px solid rgba(212,147,4,.35);border-radius:999px;padding:1px 7px;vertical-align:middle}
.gpro-note{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0 22px;background:#fdf6e4;border:1px solid rgba(212,147,4,.3);border-radius:var(--r);padding:12px 14px;font-size:.9rem;color:var(--navy);line-height:1.5}
.gpro-note b{color:var(--gold-deep)}
.gpro-note .btn{margin-left:auto}
.gpro-note--subject{margin-top:18px}
.gpro{background:linear-gradient(160deg,#fff,#fdf6e7);border:1.5px solid var(--gold-soft,rgba(212,147,4,.4));border-radius:var(--r);padding:30px 28px;text-align:center;box-shadow:var(--shadow-sm);margin-top:6px}
.gpro__badge{display:inline-block;font-size:.74rem;font-weight:700;letter-spacing:.03em;color:var(--gold-deep);background:#fdf3d8;border:1px solid rgba(212,147,4,.4);border-radius:999px;padding:4px 12px;margin-bottom:14px}
.gpro h2{font-family:'Fraunces',serif;font-weight:500;color:var(--navy);font-size:1.5rem;margin:0 0 8px}
.gpro p{color:var(--muted);max-width:46ch;margin:0 auto 8px;line-height:1.55}
.gpro__acts{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:18px 0 6px}
.gpro__fine{font-size:.8rem;color:var(--muted-2)}
.pv-saved--off{background:#f2f6fc;border-color:var(--line);color:var(--muted)}
.pv-saved--off a{color:var(--gold-deep)}
/* Pro tag on desk cards */
.dz-pro-tag{position:absolute;top:10px;right:10px;z-index:2;font-size:.66rem;font-weight:700;letter-spacing:.02em;color:var(--gold-deep);background:#fdf6e4;border:1px solid rgba(212,147,4,.4);border-radius:999px;padding:2px 8px}
.dz-qacard .dz-pro-tag{color:#3a2a00;background:rgba(255,255,255,.9);border-color:rgba(255,255,255,.5)}
.dz-subcard--pro i,.dz-subcard--pro b,.dz-subcard--pro span{opacity:.9}
.dz-subcard--soon{cursor:default;opacity:.55;filter:grayscale(.3)}
.dz-subcard--soon:hover{border-color:var(--line);transform:none;box-shadow:var(--shadow-sm)}
.dz-subcard--soon:hover::after{opacity:0}
 
/* ---- Locked seforim on the shelf (Pro subjects) ---- */
.sefer--locked .sefer__spine{filter:saturate(.55) brightness(.82)}
.sefer--locked .sefer__spine::after{content:"";position:absolute;inset:0;z-index:6;pointer-events:none;background:linear-gradient(180deg,rgba(8,16,34,.22),rgba(8,16,34,.34))}
.sefer__lock{position:absolute;bottom:7px;left:50%;transform:translateX(-50%);z-index:7;font-size:.82rem;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.55))}
.sefer--locked:hover .sefer__spine{filter:saturate(.8) brightness(.92)}
 
/* =========================================================================
   MACHON FAIGE v2 — a memorial site of its own (.mfw namespace)
   Deep ink · antique gold · cream. Everything scoped under .mfw.
   ========================================================================= */
.mfw{
  --mbg:#F7F0E1; --mbg2:#EFE4CC; --mpanel:#FFFBF0;
  --mink:#2A2318; --mmut:#6E6250; --mfaint:#A3937A;
  --mgold:#B08A3E; --mgold2:#D3B26A; --mgoldD:#8A6A2C;
  --mdeep:#1C1610; --mdeep2:#2A2115;
  --mline:rgba(42,35,24,.14);
  --mserif:'Fraunces',Georgia,'Times New Roman',serif;
  background:var(--mbg); color:var(--mink); font-family:var(--mserif);
  min-height:100vh; -webkit-font-smoothing:antialiased;
}
.mfw-wrap{max-width:1060px;margin:0 auto;padding:0 26px}
 
/* ---- header ---- */
.mfw-nav{position:sticky;top:0;z-index:50;background:rgba(28,22,16,.92);backdrop-filter:blur(10px);border-bottom:1px solid rgba(211,178,106,.22)}
.mfw-nav__in{max-width:1160px;margin:0 auto;padding:14px 26px;display:flex;align-items:center;justify-content:space-between;gap:18px}
.mfw-nav__brand{display:flex;align-items:center;gap:11px;color:#F3E9D2;font-size:1.02rem;letter-spacing:.04em}
.mfw-nav__brand img{height:30px;width:auto;display:block}
.mfw-nav__brand b{font-weight:600;color:var(--mgold2)}
.mfw-nav__links{display:flex;align-items:center;gap:22px}
.mfw-nav__links a{color:#CBBFA4;text-decoration:none;font-size:.86rem;letter-spacing:.09em;text-transform:uppercase;transition:.18s}
.mfw-nav__links a:hover{color:var(--mgold2)}
.mfw-nav__back{border:1px solid rgba(211,178,106,.4);border-radius:999px;padding:7px 14px;color:var(--mgold2)!important}
 
/* ---- hero ---- */
.mfw-hero{position:relative;background:
  radial-gradient(1100px 520px at 78% -10%, rgba(211,178,106,.13), transparent 60%),
  radial-gradient(900px 460px at 12% 110%, rgba(211,178,106,.07), transparent 55%),
  linear-gradient(175deg,var(--mdeep),var(--mdeep2) 130%);
  color:#F3E9D2;overflow:hidden}
.mfw-hero__vign{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 180px rgba(0,0,0,.55)}
.mfw-hero__in{position:relative;max-width:1160px;margin:0 auto;padding:74px 26px 84px;display:grid;grid-template-columns:430px 1fr;gap:64px;align-items:center}
.mfw-portrait{position:relative;margin:0;padding:16px;background:linear-gradient(160deg,rgba(211,178,106,.16),rgba(211,178,106,.05));border:1px solid rgba(211,178,106,.4);border-radius:6px}
.mfw-portrait img{display:block;width:100%;aspect-ratio:4/5;object-fit:cover;object-position:62% 22%;border-radius:3px;filter:sepia(.14) saturate(.92) contrast(1.02)}
.mfw-portrait .corner{position:absolute;width:26px;height:26px;border-color:var(--mgold2);border-style:solid;border-width:0}
.mfw-portrait .tl{top:7px;left:7px;border-top-width:2px;border-left-width:2px}
.mfw-portrait .tr{top:7px;right:7px;border-top-width:2px;border-right-width:2px}
.mfw-portrait .bl{bottom:7px;left:7px;border-bottom-width:2px;border-left-width:2px}
.mfw-portrait .br{bottom:7px;right:7px;border-bottom-width:2px;border-right-width:2px}
.mfw-portrait figcaption{padding:14px 6px 2px;text-align:center}
.mfw-portrait figcaption b{display:block;font-size:1.04rem;font-weight:600;color:var(--mgold2);letter-spacing:.02em}
.mfw-portrait figcaption span{display:block;margin-top:4px;font-size:.8rem;color:#B4A88D;letter-spacing:.05em}
.mfw-hero__t{max-width:600px}
.mfw-kicker{font-size:.8rem;letter-spacing:.34em;text-transform:uppercase;color:var(--mgold2);margin:18px 0 14px}
.mfw-name{font-family:var(--mserif);font-weight:500;font-size:clamp(2.6rem,5vw,4rem);line-height:1.04;margin:0;color:#FAF3E0}
.mfw-name span{display:block;color:var(--mgold2)}
.mfw-heb{margin-top:14px;font-size:1.35rem;color:#E8DCC0;direction:rtl;text-align:left}
.mfw-roles{margin-top:10px;font-size:.9rem;letter-spacing:.14em;text-transform:uppercase;color:#B4A88D}
.mfw-roles i{font-style:normal;color:var(--mgold);padding:0 7px}
.mfw-hero__lead{margin:26px 0 0;font-size:1.12rem;line-height:1.75;color:#DDD2B6}
.mfw-hero__quote{margin:26px 0 0;padding:20px 24px;border-inline-start:2px solid var(--mgold);background:rgba(211,178,106,.07);border-radius:0 6px 6px 0}
.mfw-hero__quote p{margin:0;font-size:1.05rem;line-height:1.7;color:#EFE5C9;font-style:italic}
.mfw-hero__quote em{color:var(--mgold2);font-style:italic}
.mfw-hero__crumbs{margin-top:26px;font-size:.88rem;color:#9C8F74;letter-spacing:.06em;display:flex;align-items:flex-end;gap:10px}
.mfw-hero__crumbs i{font-style:normal;color:var(--mgold);padding:0 9px}
 
/* ---- candle ---- */
.mfw-candle{position:relative;width:22px;height:74px;margin:0 auto}
.mfw-candle--tiny{width:13px;height:40px;margin:0 2px 0 0;transform:scale(.52);transform-origin:left bottom;flex:none}
.mfw-candle .body{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:10px;height:44px;border-radius:3px;background:linear-gradient(180deg,#F6EDD8,#E4D5B2)}
.mfw-candle .wick{position:absolute;bottom:43px;left:50%;transform:translateX(-50%);width:2px;height:6px;background:#5c4a2c}
.mfw-candle .flame{position:absolute;bottom:47px;left:50%;transform:translateX(-50%);width:12px;height:22px;border-radius:50% 50% 50% 50%/62% 62% 38% 38%;background:radial-gradient(circle at 50% 78%,#fff7dd 0%,#F4C24A 45%,#D3742A 85%,transparent 100%);animation:mfwFlick 2.3s ease-in-out infinite}
.mfw-candle .core{position:absolute;bottom:48px;left:50%;transform:translateX(-50%);width:5px;height:11px;border-radius:50%;background:#FFF6D8;opacity:.95;animation:mfwFlick 2.3s ease-in-out infinite reverse}
.mfw-candle .halo{position:absolute;bottom:36px;left:50%;transform:translateX(-50%);width:56px;height:56px;border-radius:50%;background:radial-gradient(circle,rgba(244,194,74,.34),transparent 68%);animation:mfwHalo 2.3s ease-in-out infinite}
@keyframes mfwFlick{0%,100%{transform:translateX(-50%) scale(1) rotate(-1.6deg)}30%{transform:translateX(-52%) scale(1.06,1.12) rotate(1.8deg)}60%{transform:translateX(-48%) scale(.96,.94) rotate(-2.4deg)}}
@keyframes mfwHalo{0%,100%{opacity:.75;transform:translateX(-50%) scale(1)}50%{opacity:1;transform:translateX(-50%) scale(1.12)}}
 
/* ---- shared section furniture ---- */
.mfw-sec{padding:84px 0}
.mfw-sec--panel{background:linear-gradient(180deg,var(--mbg2),var(--mbg));border-top:1px solid var(--mline);border-bottom:1px solid var(--mline)}
.mfw-eyebrow{text-align:center;font-size:.78rem;letter-spacing:.34em;text-transform:uppercase;color:var(--mgoldD);margin-bottom:16px}
.mfw-h2{text-align:center;font-family:var(--mserif);font-weight:500;font-size:clamp(1.7rem,3.4vw,2.4rem);color:var(--mink);margin:0 0 18px;line-height:1.2}
.mfw-orn{display:flex;align-items:center;justify-content:center;gap:14px;margin:6px auto 34px;max-width:320px}
.mfw-orn .l,.mfw-orn .r{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--mgold));}
.mfw-orn .r{background:linear-gradient(90deg,var(--mgold),transparent)}
.mfw-orn .d{color:var(--mgold);font-size:.6rem}
.mfw-prose{max-width:640px;margin:0 auto;font-size:1.1rem;line-height:1.85;color:#4A4130}
.mfw-prose p{margin:0 0 20px}
.mfw-prose em{color:var(--mgoldD)}
.mfw-dropcap{float:left;font-family:var(--mserif);font-size:3.4rem;line-height:.86;padding:6px 10px 0 0;color:var(--mgold)}
 
/* ---- thresholds ---- */
.mfw-thresholds{display:grid;grid-template-columns:1fr 60px 1fr;align-items:stretch;gap:0;max-width:940px;margin:0 auto}
.mfw-threshold{padding:10px 8px}
.mfw-threshold .num{font-size:.76rem;letter-spacing:.3em;text-transform:uppercase;color:var(--mgoldD);margin-bottom:12px}
.mfw-threshold h3{font-family:var(--mserif);font-weight:500;font-size:1.45rem;margin:0 0 12px;color:var(--mink)}
.mfw-threshold p{margin:0;font-size:1.02rem;line-height:1.8;color:#4A4130}
.mfw-threshold__div{display:flex;flex-direction:column;align-items:center;gap:10px;padding:6px 0}
.mfw-threshold__div span{flex:1;width:1px;background:linear-gradient(180deg,transparent,var(--mgold),transparent)}
.mfw-threshold__div b{color:var(--mgold);font-size:.6rem}
 
/* ---- photo interlude ---- */
.mfw-inter{padding:10px 0 84px}
.mfw-inter__fig{margin:0 auto;max-width:520px;padding:14px;background:var(--mpanel);border:1px solid var(--mline);border-radius:6px;box-shadow:0 24px 60px -30px rgba(42,35,24,.4);transform:rotate(-.6deg)}
.mfw-inter__fig img{display:block;width:100%;border-radius:3px;filter:sepia(.1) saturate(.95)}
.mfw-inter__fig figcaption{padding:14px 8px 4px;text-align:center;font-size:.92rem;font-style:italic;color:var(--mmut)}
 
/* ---- legacy ---- */
.mfw-legacy{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;max-width:940px;margin:0 auto}
.mfw-legacy .cell{background:var(--mpanel);border:1px solid var(--mline);border-radius:8px;padding:28px 24px;text-align:center;box-shadow:0 18px 44px -28px rgba(42,35,24,.35)}
.mfw-legacy .ico{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;border:1px solid rgba(176,138,62,.45);color:var(--mgoldD);margin-bottom:14px;background:rgba(211,178,106,.08)}
.mfw-legacy h4{font-family:var(--mserif);font-weight:600;font-size:1.08rem;margin:0 0 8px;color:var(--mink)}
.mfw-legacy p{margin:0;font-size:.94rem;line-height:1.65;color:var(--mmut)}

/* ---- mission icon row — same cell treatment as .mfw-legacy, own class so
   the two sections can evolve independently ---- */
.mfw-icongrid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;max-width:940px;margin:40px auto 0}
.mfw-icongrid .cell{background:var(--mpanel);border:1px solid var(--mline);border-radius:8px;padding:28px 24px;text-align:center;box-shadow:0 18px 44px -28px rgba(42,35,24,.35)}
.mfw-icongrid .ico{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;border:1px solid rgba(176,138,62,.45);color:var(--mgoldD);margin-bottom:14px;background:rgba(211,178,106,.08)}
.mfw-icongrid h4{font-family:var(--mserif);font-weight:600;font-size:1.08rem;margin:0 0 8px;color:var(--mink)}
.mfw-icongrid p{margin:0;font-size:.94rem;line-height:1.65;color:var(--mmut)}
 
/* ---- project cards — one per shipped Machon Faige project, see PROJECTS
   in app/machon-faige/page.tsx. Stacks cleanly whether there's 1 or 10. ---- */
.mfw-projects{display:flex;flex-direction:column;gap:22px}
.mfw-project{display:grid;grid-template-columns:1fr auto;gap:26px;align-items:center;max-width:940px;margin:0 auto;background:linear-gradient(150deg,var(--mdeep),var(--mdeep2));border:1px solid rgba(211,178,106,.32);border-radius:10px;padding:34px 38px;color:#EFE5C9}
.mfw-project__t .k{font-size:.74rem;letter-spacing:.3em;text-transform:uppercase;color:var(--mgold2);margin-bottom:8px}
.mfw-project__t h3{font-family:var(--mserif);font-weight:500;font-size:1.7rem;margin:0 0 10px;color:#FAF3E0}
.mfw-project__t p{margin:0 0 18px;font-size:.99rem;line-height:1.7;color:#CBBFA4;max-width:52ch}
.mfw-btn{display:inline-block;background:linear-gradient(120deg,var(--mgold2),var(--mgold));color:#241C0E;text-decoration:none;font-weight:600;font-size:.94rem;padding:11px 22px;border-radius:999px;transition:.18s}
.mfw-btn:hover{transform:translateY(-1px);filter:brightness(1.05)}
.mfw-project__logo img{height:76px;width:auto;filter:brightness(0) invert(1);opacity:.88}

/* ---- "coming soon" project tile — same grid slot, deliberately quieter
   (dashed border, no logo/CTA) so the section never reads as a dead end
   even while there's only one shipped project. ---- */
.mfw-project--soon{background:transparent;border-style:dashed;border-color:rgba(211,178,106,.4);
  grid-template-columns:1fr;text-align:center;padding:30px 38px}
.mfw-project--soon .k{color:var(--mmut)}
.mfw-project--soon h3{color:#D8CCA9;font-size:1.35rem}
.mfw-project--soon p{color:var(--mmut);max-width:56ch;margin:0 auto}
 
/* ---- dedication ---- */
.mfw-ded{background:
  radial-gradient(760px 340px at 50% 0%, rgba(211,178,106,.12), transparent 60%),
  linear-gradient(180deg,var(--mdeep),#15100b);color:#E8DCC0;text-align:center;padding:90px 0 84px}
.mfw-ded .heb{margin-top:26px;font-size:clamp(1.25rem,3vw,1.75rem);color:var(--mgold2);direction:rtl}
.mfw-ded .en{margin-top:8px;font-size:.86rem;letter-spacing:.24em;text-transform:uppercase;color:#9C8F74}
.mfw-ded p{max-width:560px;margin:22px auto 0;font-size:1.05rem;line-height:1.8;color:#CBBFA4;padding:0 26px}
.mfw-ded p b{color:var(--mgold2);font-weight:600}
.mfw-ded__date{margin-top:26px;font-size:1rem;color:#9C8F74;direction:rtl}
 
/* ---- footer ---- */
.mfw-foot{background:#15100b;color:#8F8368;text-align:center;padding:44px 26px 50px;border-top:1px solid rgba(211,178,106,.16)}
.mfw-foot img{display:block;height:44px;width:auto;opacity:.9;margin:0 auto 14px}
.mfw-foot .row{display:flex;justify-content:center;gap:10px;font-size:.88rem;color:#9C8F74;letter-spacing:.05em}
.mfw-foot .sep{color:var(--mgoldD)}
.mfw-foot__back{display:inline-block;margin-top:16px;color:var(--mgold2);text-decoration:none;font-size:.88rem;letter-spacing:.05em}
.mfw-foot__back:hover{text-decoration:underline}
 
/* ---- responsive ---- */
@media (max-width:960px){
  .mfw-hero__in{grid-template-columns:1fr;gap:44px;padding:54px 26px 64px}
  .mfw-portrait{max-width:420px;margin:0 auto}
  .mfw-hero__t{max-width:none;text-align:center}
  .mfw-heb{text-align:center}
  .mfw-hero__crumbs{justify-content:center}
  .mfw-hero__quote{text-align:left}
  .mfw-thresholds{grid-template-columns:1fr;gap:8px}
  .mfw-threshold__div{flex-direction:row;padding:10px 0}
  .mfw-threshold__div span{height:1px;width:auto;flex:1;background:linear-gradient(90deg,transparent,var(--mgold),transparent)}
  .mfw-legacy{grid-template-columns:1fr}
  .mfw-project{grid-template-columns:1fr;text-align:center;padding:30px 26px}
  .mfw-project__t p{max-width:none}
  .mfw-project__logo{display:none}
  .mfw-nav__links a:not(.mfw-nav__back){display:none}
}
 
/* ==========================================================================
   My Class — roster, student detail, mastery levels, assessment history,
   RebbisDesk Scanner, report cards. Reuses dz-/pv- primitives wherever the
   pattern matches exactly; cls- is only for roster/student-specific UI.
   ========================================================================== */
 
.cls-flash{background:var(--navy)}
 
.cls-archtoggle{border:1px solid var(--line);background:var(--warm-white);color:var(--muted);
  font:inherit;font-size:.86rem;font-weight:600;padding:11px 16px;border-radius:12px;cursor:pointer;transition:.16s;white-space:nowrap}
.cls-archtoggle:hover{border-color:var(--gold-soft);color:var(--navy)}
.cls-archtoggle.on{background:var(--navy);border-color:var(--navy);color:#fff}
 
/* ---- My Class, redesigned from scratch (no reused mc-hero/cls-card
   chrome): an identity bar with inline serif KPI numerals, an underline
   class-switcher, underline sub-tabs, and a divided list roster (a left
   tone-stripe + right-aligned mastery numeral) instead of a card grid with
   ring avatars. Everything sits inside proper white/shadowed panels (like
   the rest of My Desk's dz-stat/dz-card/dz-plan cards) rather than floating
   directly on the cream page background — that's what read as unfinished
   when this was flat underlines with no card chrome around them. ---- */
.rdc-toppanel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);padding:22px 24px 0;margin:16px 0 20px;overflow:hidden}
.rdc-top{padding-bottom:16px}
.rdc-top__row{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap}
.rdc-top__id{display:flex;flex-direction:column}
.rdc-top__eyebrow{display:block;font-size:.72rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:8px}
.rdc-top__h{font-family:'Fraunces',serif;font-weight:500;font-size:1.85rem;color:var(--navy);margin:0;line-height:1.1;letter-spacing:-.01em}
.rdc-top__hrow{display:flex;align-items:center;gap:10px}
.rdc-top__gear{flex:none;width:30px;height:30px;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--muted);
  display:flex;align-items:center;justify-content:center;cursor:pointer;transition:.15s}
.rdc-top__gear:hover{border-color:var(--gold-soft);color:var(--gold-deep);background:var(--cream-2)}
.rdc-top__kpis{display:flex;align-items:center;gap:22px;flex:none;padding-bottom:2px}
.rdc-kpi{display:flex;flex-direction:column;align-items:flex-end;min-width:56px}
.rdc-kpi b{font-family:'Fraunces',serif;font-weight:500;font-size:1.7rem;color:var(--navy);line-height:1}
.rdc-kpi span{font-size:.66rem;color:var(--muted-2);margin-top:4px;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}
.rdc-kpi__div{width:1px;height:30px;background:var(--line)}

/* Class switcher — plain underline tabs instead of dark pill chips, sitting
   on the same card as the identity bar above it (a hairline divides them) */
.rdc-switch{display:flex;flex-wrap:wrap;align-items:center;gap:2px;border-top:1px solid var(--line);margin-left:-14px}
.rdc-switch__item{border:0;border-bottom:2.5px solid transparent;background:none;font:inherit;font-size:.88rem;font-weight:600;
  color:var(--muted);padding:11px 14px 9px;cursor:pointer;transition:.16s;margin-bottom:-1px;white-space:nowrap}
.rdc-switch__item:hover{color:var(--navy)}
.rdc-switch__item.sel{color:var(--navy);border-bottom-color:var(--gold)}
.rdc-switch__add{border:0;background:none;font:inherit;font-size:.86rem;font-weight:600;color:var(--gold-deep);
  padding:11px 6px 9px;cursor:pointer;white-space:nowrap}
.rdc-switch__add:hover{text-decoration:underline}

/* Roster sub-nav — small underline tabs, distinct scale from the class
   switcher, closing out the bottom of the same panel */
.rdc-tabs{display:flex;flex-wrap:wrap;gap:18px;margin-top:2px;border-top:1px solid var(--line)}
.rdc-tabs__btn{border:0;border-bottom:2px solid transparent;background:none;font:inherit;font-size:.82rem;font-weight:600;
  letter-spacing:.02em;color:var(--muted-2);padding:12px 0 10px;cursor:pointer;transition:.16s}
.rdc-tabs__btn:hover{color:var(--navy)}
.rdc-tabs__btn.sel{color:var(--navy);border-bottom-color:var(--gold)}

/* First-run onboarding card (no classes yet) — full content-width like
   .dz-empty/.rdc-listpanel (not a small box floating alone in a sea of
   empty page), a rounded-badge icon matching the motif used for Shamash/
   Tools/Conference-Prep, and a couple of feature chips so the card reads
   as a deliberate hero rather than a near-empty placeholder. */
.rdc-onboard{display:flex;align-items:center;gap:28px;flex-wrap:wrap;padding:40px 36px;margin-top:20px;
  background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}
.rdc-onboard__mark{flex:none;width:60px;height:60px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  font-size:1.6rem;color:var(--gold-deep);background:radial-gradient(circle at 30% 25%,#fff3da,var(--gold-soft) 130%);
  box-shadow:inset 0 0 0 1px var(--gold-soft)}
.rdc-onboard__body{flex:1 1 340px;min-width:0}
.rdc-onboard h2{font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;color:var(--ink);margin-bottom:8px}
.rdc-onboard p{color:var(--muted);margin-bottom:18px;line-height:1.6;max-width:560px}
.rdc-onboard__chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:22px}
.rdc-onboard__chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--cream-2);
  color:var(--navy);font-size:.78rem;font-weight:600;padding:6px 13px;border-radius:999px}

/* Roster list — inside its own card, same as the top panel; a divided list,
   not a card grid, with a tone-stripe replacing the ring avatar and mastery
   shown as a right-aligned serif numeral instead of a badge. */
.rdc-listpanel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);padding:18px 22px 6px;overflow:hidden}
.rdc-roster__bar{display:flex;align-items:center;justify-content:space-between;margin:0 2px 8px}
.rdc-roster__count{font-size:.8rem;font-weight:600;color:var(--muted-2);letter-spacing:.02em;text-transform:uppercase}
.rdc-list{display:flex;flex-direction:column}
.rdc-stu{display:flex;align-items:center;gap:14px;text-align:left;background:none;border:0;border-top:1px solid var(--line);
  padding:13px 6px;cursor:pointer;font-family:inherit;transition:background .14s;position:relative}
.rdc-stu:hover{background:var(--cream-2)}
.rdc-stu__stripe{flex:none;width:4px;align-self:stretch;border-radius:3px;background:var(--line)}
.rdc-stu__stripe--good{background:#2c8a4f}
.rdc-stu__stripe--mid{background:var(--gold)}
.rdc-stu__stripe--low{background:#c0392b}
.rdc-stu__stripe--none{background:var(--line)}
.rdc-stu__avatar{flex:none;width:42px;height:42px;border-radius:50%;border:1.5px solid var(--line);background:#fff;
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.rdc-stu__id{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.rdc-stu__id b{font-family:'Fraunces',serif;font-weight:500;font-size:1.04rem;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rdc-stu__sub{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.78rem;color:var(--muted-2)}
.rdc-stu__tier{font-weight:700;color:var(--gold-deep)}
.rdc-stu__mastery{flex:none;display:flex;flex-direction:column;align-items:flex-end;min-width:52px}
.rdc-stu__mastery b{font-family:'Fraunces',serif;font-size:1.15rem;line-height:1;font-weight:600}
.rdc-stu__mastery span{font-size:.62rem;color:var(--muted-2);text-transform:uppercase;letter-spacing:.04em;margin-top:2px}
.rdc-stu__mastery--good b{color:#1f7a3d}
.rdc-stu__mastery--mid b{color:var(--gold-deep)}
.rdc-stu__mastery--low b{color:#c0392b}
.rdc-stu__mastery--none b{color:var(--muted-2)}
.rdc-stu__chev{flex:none;font-size:1.2rem;color:var(--line);transition:.18s;line-height:1}
.rdc-stu:hover .rdc-stu__chev{color:var(--gold);transform:translateX(2px)}

/* Also used, independently of the redesign above, by the parent portal's
   "your children" list (app/myclass/parent/page.tsx) — that page isn't
   part of this pass, so it keeps its original simple card look. */
.cls-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.cls-card{display:flex;align-items:center;gap:13px;text-align:left;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;cursor:pointer;
  font-family:inherit;transition:.18s;box-shadow:var(--shadow-sm);text-decoration:none;color:inherit}
.cls-card:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--gold-soft)}
.cls-card__mascot{flex:none}
.cls-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.cls-card__body b{font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--ink)}
.cls-card__meta{font-size:.8rem;color:var(--muted-2)}

/* Add-talmid modal */
.rdc-addcard{max-width:420px}
.cls-formbody{display:flex;flex-direction:column;gap:16px}
.cls-formbody label{display:flex;flex-direction:column;gap:6px;font-size:.86rem;font-weight:600;color:var(--navy)}
.cls-formbody label small{font-weight:400;color:var(--muted-2);font-size:.78rem}
.cls-formbody input,.cls-formbody select,.cls-formbody textarea{border:1px solid var(--line);border-radius:11px;
  padding:10px 13px;font:inherit;font-size:.92rem;font-weight:400;background:#fff;color:var(--ink);resize:vertical}
.cls-formbody input:focus,.cls-formbody select:focus,.cls-formbody textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
 
/* Student detail modal */
.genroot .pv__card.rdc-detail{max-width:1080px;position:relative}
.cls-loading{padding:40px 0;text-align:center;color:var(--muted)}
.cls-main{display:flex;flex-direction:column;gap:22px;min-width:0}
.cls-side{position:sticky;top:0;display:flex;flex-direction:column;gap:10px}
.cls-side h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.1rem;color:var(--ink);margin-bottom:2px}

.cls-section h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.08rem;color:var(--navy);margin-bottom:10px}
.cls-empty2{color:var(--muted-2);font-size:.88rem}

/* Class settings popup (button next to the class name -- see
   .rdc-top__gear): its own narrower card size, not the 880px default
   every other .pv__card gets -- a two-field form + a delete zone doesn't
   need that much width, and centering a ~500px block inside an 880px
   card just left a huge dead patch of blank space to its right. */
.genroot .pv__card--settings{max-width:560px}
.rdc-settings{display:flex;flex-direction:column;gap:22px}
.rdc-settings .cls-section{background:var(--warm-white);border:1px solid var(--line);border-radius:16px;padding:18px 20px}
.cls-section--danger{border-color:rgba(192,57,43,.25)!important;background:#fdf6f6!important}
.cls-section--danger h3{color:#c0392b}
.cls-section--danger .cls-empty2{margin-bottom:12px}

.cls-row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.cls-row>label{flex:1 1 140px;min-width:0}
.cls-row--between{justify-content:space-between;align-items:center}
.rdc-gradepill{border:1px solid var(--line);color:var(--navy);font-size:.8rem;font-weight:600;padding:4px 12px;border-radius:999px}
.cls-linkbtn{border:0;background:none;color:var(--gold-deep);font:inherit;font-size:.86rem;font-weight:600;cursor:pointer}
.cls-linkbtn:hover{text-decoration:underline}
.cls-notes{margin-top:10px;font-size:.9rem;color:var(--muted);line-height:1.55;background:var(--warm-white);
  border:1px solid var(--line);border-radius:12px;padding:12px 14px}

/* Student detail header — TeacherStack-style profile bar: avatar, name +
   grade/tier chips, a "⋮" kebab menu (see .rdc-menu*) for the actions that
   used to be a whole side rail. Below it, a real icon+label tab bar (see
   .rdc-pftabs) drives which pane renders — no more one long scrolling
   column. Close floats over the top-right corner (see .rdc-detail__close). */
.rdc-pf{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding-bottom:16px;margin:6px 0 16px;border-bottom:2px solid var(--ink)}
.rdc-pf__avatar{position:relative;border:0;background:none;padding:0;border-radius:50%;cursor:pointer;line-height:0;flex:none;
  border:1.5px solid var(--line);border-radius:50%}
.rdc-pf__avatar:hover .rdc-pf__pencil,.rdc-pf__avatar:focus-visible .rdc-pf__pencil{opacity:1}
.rdc-pf__pencil{position:absolute;right:-2px;bottom:-2px;width:22px;height:22px;border-radius:50%;background:var(--gold-deep);color:#fff;
  font-size:.72rem;display:flex;align-items:center;justify-content:center;opacity:.85;transition:opacity .15s var(--ease);border:2px solid #fff}
.rdc-pf__id{display:flex;flex-direction:column;gap:6px;font-family:'Fraunces',serif;font-weight:500;font-size:1.35rem;color:var(--ink)}
.rdc-pf__meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-family:'Inter',sans-serif}
.rdc-pf__picker{margin-top:2px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--warm-white)}
.rdc-pf__pickerlabel{display:block;font-size:.86rem;font-weight:600;color:var(--navy);margin-bottom:8px}
.rdc-stu__tier--archived{color:var(--muted-2);border-color:var(--line)}

.rdc-detail__close{position:absolute;top:14px;right:14px;z-index:2}

/* Kebab (⋮) actions menu, replacing the old side-rail buttons. A simple
   absolute-positioned dropdown plus an invisible full-screen backdrop for
   click-outside-to-close — same convention as .pv's own backdrop click. */
.rdc-menu__wrap{position:relative;margin-left:auto}
.rdc-menu__trigger{border:1px solid var(--line);background:var(--warm-white);color:var(--navy);width:36px;height:36px;border-radius:50%;
  font-size:1.15rem;line-height:1;cursor:pointer;transition:.16s;display:flex;align-items:center;justify-content:center}
.rdc-menu__trigger:hover{background:var(--cream-2);border-color:var(--gold-soft)}
.rdc-menu__backdrop{position:fixed;inset:0;z-index:5}
.rdc-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:6;min-width:210px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column;gap:1px}
.rdc-menu button{border:0;background:none;text-align:left;padding:9px 12px;border-radius:9px;font:inherit;font-size:.86rem;
  font-weight:600;color:var(--ink);cursor:pointer;transition:background .12s}
.rdc-menu button:hover{background:var(--cream-2)}
.rdc-menu__danger{color:#c0392b!important}

/* Profile tab bar — icon+label pills, filled-gold when selected, matching
   the TeacherStack reference (icon above/beside label, selected = filled). */
.rdc-pftabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:18px}
.rdc-pftabs__btn{display:flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--warm-white);color:var(--muted);
  font:inherit;font-size:.84rem;font-weight:600;padding:8px 15px;border-radius:var(--r-pill);cursor:pointer;transition:.16s}
.rdc-pftabs__btn:hover{border-color:var(--gold-soft);color:var(--navy)}
.rdc-pftabs__btn.sel{background:linear-gradient(135deg,var(--gold),var(--gold-deep));border-color:transparent;color:#fff;
  box-shadow:0 3px 10px -4px rgba(180,130,10,.5)}
.rdc-pftabs__ic{font-size:.95rem;line-height:1}

/* A transient panel (edit form / access-code reveal) rendered above the
   active tab's content, independent of which tab is selected. */
.rdc-panel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);
  padding:18px 20px;margin-bottom:18px}

.rdc-tabpane{display:flex;flex-direction:column;gap:20px}

/* Overview stat cards — card language matching the rest of My Desk
   (dz-stat etc.), four-up, the number itself carrying the tone color. */
.rdc-statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.rdc-statgrid--slim{grid-template-columns:repeat(auto-fit,minmax(100px,1fr));max-width:320px}
.rdc-statcard{display:flex;flex-direction:column;gap:4px;background:var(--warm-white);border:1px solid var(--line);
  border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:13px 15px}
.rdc-statcard__label{font-size:.7rem;font-weight:700;color:var(--muted-2);text-transform:uppercase;letter-spacing:.04em}
.rdc-statcard__value{font-family:'Fraunces',serif;font-size:1.65rem;font-weight:500;color:var(--navy);line-height:1.15}
.rdc-statcard__value--good{color:#1f7a3d}
.rdc-statcard__value--mid{color:var(--gold-deep)}
.rdc-statcard__value--low{color:#c0392b}
.rdc-statcard__value--none{color:var(--muted-2)}

/* Conference Prep — promoted from a side-rail toggle to an always-visible
   quick-action card on Overview, in the same rounded-badge icon language
   used for Shamash/Tools elsewhere this pass. */
.rdc-quick{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);
  padding:18px 20px;display:flex;flex-direction:column;gap:12px}
.rdc-quick__head{display:flex;gap:12px;align-items:flex-start}
.rdc-quick__badge{flex:none;width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  font-size:1.1rem;background:radial-gradient(circle at 30% 25%,#fff3da,var(--gold-soft) 130%);box-shadow:inset 0 0 0 1px var(--gold-soft)}
.rdc-quick__head h3{margin:0 0 3px;font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--ink)}
.rdc-quick__head p{margin:0;font-size:.85rem;color:var(--muted);line-height:1.5}
.rdc-quick textarea{width:100%;resize:vertical;font:inherit;font-size:.88rem;line-height:1.55;border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;background:#fff}

/* Recent-activity timeline (Overview) — date-tagged entries on a
   connecting vertical line, echoing the TeacherStack reference. */
.rdc-timeline{position:relative;display:flex;flex-direction:column;gap:16px;padding-left:20px}
.rdc-timeline::before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:2px;background:var(--line)}
.rdc-timeline__row{position:relative}
.rdc-timeline__dot{position:absolute;left:-20px;top:5px;width:11px;height:11px;border-radius:50%;background:var(--navy);
  box-shadow:0 0 0 3px var(--warm-white)}
.rdc-timeline__row--milestone .rdc-timeline__dot{background:var(--gold-deep)}
.rdc-timeline__head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:3px}
.rdc-timeline__body p{margin:0;font-size:.87rem;color:var(--muted);line-height:1.5}

/* Mastery tab — per-subject breakdown bars, tone-colored fill. */
.rdc-mastery{display:flex;flex-direction:column;gap:12px}
.rdc-mastery__row{display:grid;grid-template-columns:140px 1fr 48px;align-items:center;gap:12px}
.rdc-mastery__row--total{padding-bottom:12px;margin-bottom:2px;border-bottom:1px solid var(--line)}
.rdc-mastery__row--total .rdc-mastery__name{font-weight:700;color:var(--ink)}
.rdc-mastery__name{font-size:.86rem;font-weight:600;color:var(--muted)}
.rdc-mastery__bar{height:9px;border-radius:999px;background:var(--cream-2);overflow:hidden}
.rdc-mastery__fill{display:block;height:100%;border-radius:999px;transition:width .3s var(--ease)}
.rdc-mastery__fill--good{background:linear-gradient(90deg,#2a9d5c,#1f7a3d)}
.rdc-mastery__fill--mid{background:linear-gradient(90deg,var(--gold-soft),var(--gold-deep))}
.rdc-mastery__fill--low{background:linear-gradient(90deg,#e2776a,#c0392b)}
.rdc-mastery__pct{font-size:.86rem;font-weight:700;text-align:right}
.rdc-mastery__pct--good{color:#1f7a3d}
.rdc-mastery__pct--mid{color:var(--gold-deep)}
.rdc-mastery__pct--low{color:#c0392b}
@media (max-width:560px){.rdc-mastery__row{grid-template-columns:96px 1fr 40px;gap:8px}}

/* Homework section header row + empty state */
.cls-addbtn{border:1px dashed var(--gold-soft);background:transparent;color:var(--gold-deep);font:inherit;font-size:.8rem;font-weight:600;
  border-radius:999px;padding:6px 14px;cursor:pointer}
.cls-addbtn:hover{background:var(--soft-blue-2);border-style:solid}
.cls-emptybox{border:1.5px dashed var(--line);border-radius:12px;padding:16px;text-align:center;color:var(--muted-2);font-size:.86rem;background:var(--warm-white);margin-top:2px}

/* "Assign homework" — opens its own page/tab (see
   app/myclass/homework/assign/[id]/page.tsx) instead of an inline form, so
   it's a real filled pill rather than the plain dashed .cls-addbtn look.
   Sits centered BELOW the homework list (see .cls-hwassign-row), not
   above it, so the list itself reads first. */
.cls-hwassign-row{display:flex;justify-content:center;margin-top:14px}
.cls-hwassign{display:inline-flex;align-items:center;gap:6px;border:0;background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;
  font:inherit;font-size:.82rem;font-weight:700;padding:8px 16px;border-radius:999px;cursor:pointer;text-decoration:none;
  box-shadow:0 3px 10px -4px rgba(180,130,10,.55);transition:transform .15s var(--ease),box-shadow .15s var(--ease)}
.cls-hwassign:hover{transform:translateY(-1px);box-shadow:0 5px 14px -4px rgba(180,130,10,.65)}
.cls-hwassign__icon{font-size:.9rem;line-height:1}

/* Homework review page (app/myclass/homework/review/[studentId]/[id]) --
   the talmid's filled-in worksheet rendered read-only. Reuses .pv-sheet's
   real-worksheet typography. Locking pointer-events on the WHOLE sheet
   (as a first pass) also blocked dragging/using its own scrollbar, since
   that's a pointer interaction too -- lock only the actual fillable
   controls instead (inputs/checkboxes/canvas/buttons), leaving the
   scrollable container itself fully interactive. */
.cls-hwreview__sheet input,
.cls-hwreview__sheet textarea,
.cls-hwreview__sheet button,
.cls-hwreview__sheet canvas{pointer-events:none}

/* "Review" link on a homework row (see .mc-hw__row) — opens the review
   page above in a new tab, same convention as .cls-hwassign. Also used
   from the "assign homework" page, so it stays in the shared .mc- namespace. */
.mc-hw__review{border:1px solid var(--gold-soft);background:transparent;color:var(--gold-deep);
  font:inherit;font-size:.78rem;font-weight:600;padding:5px 12px;border-radius:999px;cursor:pointer;text-decoration:none;white-space:nowrap}
.mc-hw__review:hover{background:var(--soft-blue-2);border-style:solid}

/* Class newsletter, nested inside a talmid's Parent view (see
   ClassTab.tsx's showParentView branch) instead of its own top-level My
   Class sub-tab -- it's parent-facing, so it lives with the rest of the
   parent-facing content. NewsletterTab's own two-column layout was built
   for a full-width tab; force it to stack in this narrower nested spot. */
/* Reuses .pv-live/.pv-actions, which are built for a wide 1fr+290px
   layout -- squeezed into this modal's narrow cls-main column, a rigid
   single-column stack (title/lead above a tall textarea, then four
   full-width buttons stacked underneath) read as badly cramped. Put the
   title/actions first (order:-1, so they read before the writing area
   instead of after it) and let the actions wrap into a compact row
   instead of a tall vertical stack. */
.cls-section--newsletter .pv-live{grid-template-columns:1fr;gap:14px}
.cls-section--newsletter .pv-live__side{position:static;order:-1}
.cls-section--newsletter .pv-live__side h3{margin-bottom:2px}
.cls-section--newsletter .pv-live__side .lead{margin-bottom:10px}
.cls-section--newsletter .pv-actions{flex-direction:row;flex-wrap:wrap;margin-bottom:12px}
.cls-section--newsletter .pv-act{flex:1 1 auto;white-space:nowrap;padding:.6rem .9rem;font-size:.86rem}
.cls-section--newsletter .pv-sheet,
.cls-section--newsletter .cls-newsletter-edit{max-height:34vh}

/* Persona survey — editing (inside cls-formbody) */
.cls-persona-edit{border:1px solid var(--line);border-radius:12px;background:var(--warm-white);overflow:hidden}
.cls-persona-edit summary{list-style:none;cursor:pointer;padding:12px 14px;font-size:.86rem;font-weight:600;color:var(--navy);
  display:flex;flex-direction:column;gap:4px}
.cls-persona-edit summary::-webkit-details-marker{display:none}
.cls-persona-edit summary::after{content:"Click to expand";align-self:flex-start;font-size:.76rem;font-weight:400;color:var(--gold-deep)}
.cls-persona-edit[open] summary::after{content:"Click to collapse"}
.cls-persona-edit summary small{font-weight:400;color:var(--muted-2);font-size:.78rem;line-height:1.5}
.cls-persona-edit__body{padding:6px 14px 16px;border-top:1px solid var(--line)}
.cls-persona-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:4px 14px 16px;border-top:1px solid var(--line)}
.cls-persona-grid label{display:flex;flex-direction:column;gap:6px;font-size:.82rem;font-weight:600;color:var(--navy);margin-top:12px}
.cls-persona-grid textarea{border:1px solid var(--line);border-radius:11px;padding:9px 12px;font:inherit;font-size:.86rem;
  font-weight:400;background:#fff;color:var(--ink);resize:vertical}
.cls-persona-grid textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
@media (max-width:640px){.cls-persona-grid{grid-template-columns:1fr}}

/* Persona survey — link out to its own page (replaces the old inline accordion) */
.cls-persona-link{border:1px solid var(--line);border-radius:12px;background:var(--warm-white);padding:12px 14px}
.cls-persona-link b{display:block;font-size:.86rem;font-weight:700;color:var(--navy);margin-bottom:4px}
.cls-persona-link .cls-empty2{margin:0 0 10px}

/* Persona survey — read-only display */
.cls-persona{margin-top:10px;border:1px solid var(--line);border-radius:12px;background:var(--warm-white);overflow:hidden}
.cls-persona summary{list-style:none;cursor:pointer;padding:11px 14px;font-size:.86rem;font-weight:600;color:var(--navy);
  display:flex;align-items:center;gap:10px}
.cls-persona summary::-webkit-details-marker{display:none}
.cls-persona__count{font-weight:400;color:var(--muted-2);font-size:.78rem}
.cls-persona__list{padding:2px 14px 14px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:10px}
.cls-persona__item b{display:block;font-size:.78rem;font-weight:700;color:var(--gold-deep);margin-bottom:2px}
.cls-persona__item p{margin:0;font-size:.88rem;color:var(--muted);line-height:1.5}

/* Mastery bars */
.cls-levels{display:flex;flex-direction:column;gap:12px}
.cls-level{display:grid;grid-template-columns:120px 1fr 96px;gap:12px;align-items:center}
.cls-level--overall{grid-template-columns:1fr 64px}
.cls-level__label{font-size:.86rem;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cls-level__bar{display:block;height:9px;border-radius:999px;background:#eceff4;overflow:hidden}
.cls-level__fill{display:block;height:100%;border-radius:999px;transition:width .3s var(--ease)}
.cls-level__fill--good{background:linear-gradient(90deg,#3fa863,#1f7a3d)}
.cls-level__fill--mid{background:linear-gradient(90deg,var(--gold-soft),var(--gold-deep))}
.cls-level__fill--low{background:linear-gradient(90deg,#e08585,#c0392b)}
.cls-level__word{font-size:.78rem;font-weight:700;text-align:right;white-space:nowrap}
.cls-level__word--good{color:#1f7a3d}
.cls-level__word--mid{color:var(--gold-deep)}
.cls-level__word--low{color:#c0392b}
 
/* Assessment history / report list */
.cls-history{display:flex;flex-direction:column;gap:8px}
.cls-hist{background:var(--warm-white);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.cls-hist summary{list-style:none;display:flex;align-items:center;gap:12px;padding:12px 14px;cursor:pointer;font-size:.88rem}
.cls-hist summary::-webkit-details-marker{display:none}
.cls-hist__title{font-weight:600;color:var(--ink);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cls-hist__meta{color:var(--muted-2);font-size:.78rem;white-space:nowrap}
.cls-hist__pct{flex:none;font-weight:700;font-size:.82rem;padding:4px 10px;border-radius:999px}
.cls-hist__pct--good{background:#e9f6ed;color:#1f7a3d}
.cls-hist__pct--mid{background:#fdf3e0;color:var(--gold-deep)}
.cls-hist__pct--low{background:#fbe9e9;color:#c0392b}
.cls-hist__body{padding:0 14px 14px;font-size:.86rem;color:var(--muted);line-height:1.6;border-top:1px solid var(--line)}
.cls-hist__body p{margin:10px 0 6px}
/* class-newsletter bodies (rendered markdown, see /myclass/parent's "Class
   updates") can carry headings/lists -- assessment summaries never do, so
   these rules are dormant there and only kick in for a newsletter's body */
.cls-hist__body h1,.cls-hist__body h2,.cls-hist__body h3{font-family:'Fraunces',serif;color:var(--navy);margin:12px 0 6px}
.cls-hist__body h1{font-size:1.12rem}
.cls-hist__body h2{font-size:1.02rem}
.cls-hist__body h3{font-size:.92rem}
.cls-hist__body ul,.cls-hist__body ol{margin:8px 0;padding-inline-start:22px}
.cls-hist__body li{margin:4px 0}
.cls-breakdown{margin:6px 0;padding-inline-start:20px}
.cls-breakdown li{margin:4px 0}
.cls-tag{margin:8px 0 0;font-size:.84rem;padding:8px 12px;border-radius:10px}
.cls-tag--good{background:#e9f6ed;color:#1f7a3d}
.cls-tag--low{background:#fdf3e0;color:var(--gold-deep)}
.cls-hist__del{display:block;margin:12px 0 0;border:0;background:none;padding:0;font:inherit;font-size:.82rem;color:#b23b3b;cursor:pointer;opacity:.75}
.cls-hist__del:hover{opacity:1;text-decoration:underline}
.cls-hist__del:disabled{opacity:.5;cursor:default;text-decoration:none}

.cls-reportrow{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;text-align:left;
  border:1px solid var(--line);background:var(--warm-white);border-radius:12px;padding:11px 14px;cursor:pointer;
  font:inherit;font-size:.88rem;font-weight:600;color:var(--ink);transition:.16s}
.cls-reportrow:hover{border-color:var(--gold-soft);background:#fff}
.cls-reportrow .cls-hist__meta{font-weight:400}

/* RebbisDesk Cheder — parent portal (see CHEDER-PLAN.md). Reuses the
   .cls-* mastery/history treatment above so it reads as the same product,
   just read-only; these classes cover the bits unique to the parent side:
   the talmid picker grid, empty states, and the small student-page header. */
.cheder-empty{max-width:440px;margin:24px auto;padding:28px 24px;text-align:center;
  border:1px solid var(--line);border-radius:var(--r);background:var(--warm-white)}
.cheder-empty p{margin:0 0 6px;color:var(--muted);line-height:1.6}
.cheder-empty p:last-child{margin-bottom:0}
.cheder-empty .adm-hint{margin-top:6px}

.cheder-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.cheder-card{position:relative;display:flex;flex-direction:column;gap:6px;
  border:1.5px solid var(--line);border-radius:16px;padding:18px 16px;text-decoration:none;
  background:linear-gradient(180deg,#fff,var(--cream-2));
  transition:transform .22s var(--ease),border-color .22s var(--ease),box-shadow .22s var(--ease)}
.cheder-card:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:0 18px 32px -20px rgba(20,12,4,.26)}
.cheder-card__name{font-family:'Fraunces',serif;font-weight:500;font-size:1.12rem;color:var(--navy)}
.cheder-card__grade{font-size:.8rem;color:var(--muted-2)}
.cheder-card__cta{margin-top:8px;font-size:.82rem;font-weight:700;color:var(--gold-deep)}

.cheder-header{margin-bottom:18px}
.cheder-header h2{font-family:'Fraunces',serif;font-weight:500;color:var(--navy)}

.err{color:#c0392b;font-size:.86rem;line-height:1.5}

/* RebbisDesk Cheder — kid access (Phase 2, see CHEDER-PLAN.md). Bigger
   type, bigger tap targets, simpler layout than the adult-facing pages —
   this is meant to be usable by a young talmid on their own. */
.kid-page{max-width:520px;margin:0 auto}
.kid-hero{text-align:center;padding:12px 0}
.kid-hero p{color:var(--muted);font-size:1rem;margin-bottom:16px}
.kid-code-input{display:block;width:100%;max-width:320px;margin:0 auto 16px;text-align:center;
  font-family:'Fraunces',serif;font-size:1.6rem;letter-spacing:.18em;text-transform:uppercase;
  padding:.7rem .5rem;border:2px solid var(--line);border-radius:14px;background:#fff;color:var(--navy)}
.kid-code-input:focus{outline:none;border-color:var(--gold-soft);box-shadow:0 0 0 3px rgba(212,147,4,.14)}
.kid-greet{text-align:center;padding:6px 0 18px;border-bottom:1px solid var(--line);margin-bottom:18px}
.kid-code-reveal{text-align:center;background:var(--warm-white);border:1.5px dashed var(--gold-soft);
  border-radius:14px;padding:16px;margin-top:10px}
.kid-code-reveal__code{font-family:'Fraunces',serif;font-size:1.8rem;letter-spacing:.2em;color:var(--gold-deep);font-weight:600}

/* Notes & milestones */
.cls-logform{display:flex;flex-direction:column;gap:10px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;margin-bottom:12px}
.cls-logkind{display:flex;gap:8px;flex-wrap:wrap}

/* Direct one-family message, in the Parent-access sidebar */
.cls-msgtitle{margin-top:16px !important}
.cls-msgform{display:flex;flex-direction:column;gap:8px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r);padding:12px 14px}
.cls-msgform textarea{border:1px solid var(--line);border-radius:11px;padding:9px 12px;
  font:inherit;font-size:.86rem;font-weight:400;background:#fff;color:var(--ink);resize:vertical;width:100%}
.cls-msghistory{max-height:220px;overflow-y:auto}

/* Assign-homework: optional attached material (draft / PDF) */
.cls-hwmat{display:flex;flex-direction:column;gap:10px;border-top:1px dashed var(--line);padding-top:14px}
.cls-logform input,.cls-logform textarea{border:1px solid var(--line);border-radius:11px;padding:9px 12px;
  font:inherit;font-size:.88rem;font-weight:400;background:#fff;color:var(--ink);resize:vertical;width:100%}
.cls-logrow{background:var(--warm-white);border:1px solid var(--line);border-radius:12px;padding:11px 14px}
.cls-logrow__head{display:flex;align-items:center;gap:9px}
.cls-logrow__head b{font-size:.88rem;color:var(--ink)}
.cls-logrow p{margin:6px 0 0;font-size:.86rem;color:var(--muted);line-height:1.55}
.cls-logtag{flex:none;font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:999px}
.cls-logtag--note{background:var(--soft-blue);color:var(--navy)}
.cls-logtag--milestone{background:#fdf3e0;color:var(--gold-deep)}
.cls-logrow__x{margin-inline-start:auto;border:0;background:none;color:var(--muted-2);cursor:pointer;
  font-size:.8rem;line-height:1;padding:4px;border-radius:50%}
.cls-logrow__x:hover{background:#fbe9e9;color:#c0392b}
 
.pv-act.cls-danger{color:#c0392b;border-color:rgba(192,57,43,.3)}
.pv-act.cls-danger:hover{border-color:#c0392b;background:#fdf1f1}
 
/* Scanner */
.cls-scan{margin-top:6px;display:flex;flex-direction:column;gap:14px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r);padding:16px}
.cls-scan h4{font-family:'Fraunces',serif;font-weight:500;font-size:1rem;color:var(--navy)}
.cls-scan__hint{font-size:.82rem;color:var(--muted);line-height:1.5;margin-top:-8px}
.cls-scan label{display:flex;flex-direction:column;gap:6px;font-size:.84rem;font-weight:600;color:var(--navy)}
.cls-scan label small{font-weight:400;color:var(--muted-2);font-size:.76rem}
.cls-scan input:not([type="file"]),.cls-scan select,.cls-scan textarea{
  border:1px solid var(--line);border-radius:11px;padding:9px 12px;font:inherit;font-size:.88rem;
  font-weight:400;background:#fff;color:var(--ink);resize:vertical}
.cls-scan .cls-row{gap:10px}
.cls-scan .cls-row label{flex:1 1 130px;min-width:0}
/* .cls-scan is a flex column (default align-items:stretch), so any .btn
   inside it stretches to full width -- but .btn itself never sets
   justify-content, so its label/icon sat left-aligned instead of centered
   (flagged on the assign-homework page's "Assign homework" button). */
.cls-scan .btn{justify-content:center}
 
/* Custom date picker — replaces bare <input type="date"> wherever its
   unstyled OS calendar dropdown reads as off-brand (see DatePicker.tsx). */
.rd-dp{position:relative}
.rd-dp__trigger{display:flex;align-items:center;gap:8px;width:100%;text-align:left;
  border:1px solid var(--line);border-radius:11px;padding:9px 12px;font:inherit;font-size:.88rem;
  background:#fff;color:var(--ink);cursor:pointer}
.rd-dp__trigger:hover{border-color:var(--gold-soft)}
.rd-dp__trigger svg{flex:none;color:var(--muted-2)}
.rd-dp__placeholder{color:var(--muted-2)}
.rd-dp__panel{position:absolute;z-index:40;top:calc(100% + 6px);left:0;width:266px;
  background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px -14px rgba(0,20,60,.28);padding:14px}
.rd-dp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-family:'Fraunces',serif;color:var(--navy);font-size:.92rem}
.rd-dp__nav{border:0;background:var(--soft);color:var(--navy);width:26px;height:26px;border-radius:50%;font-size:1rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.rd-dp__nav:hover{background:var(--gold-soft)}
.rd-dp__weekdays{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:.7rem;color:var(--muted-2);font-weight:600;margin-bottom:4px}
.rd-dp__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.rd-dp__cell{aspect-ratio:1;border:0;border-radius:50%;background:none;font:inherit;font-size:.84rem;color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center}
.rd-dp__cell:hover:not(:disabled){background:var(--soft-blue-2)}
.rd-dp__cell.today{color:var(--gold-deep);font-weight:700}
.rd-dp__cell.sel{background:var(--gold);color:#3a2a00;font-weight:700}
.rd-dp__cell:disabled{color:var(--muted-2);opacity:.4;cursor:not-allowed}
.rd-dp__cell--blank{cursor:default}
.rd-dp__foot{display:flex;justify-content:space-between;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.rd-dp__link{border:0;background:none;color:var(--gold-deep);font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;padding:2px}
.rd-dp__link:hover{text-decoration:underline}
/* DateTimePicker.tsx's time row -- three Selects (hour/minute/AM-PM)
   under the calendar grid, same family, slightly wider panel to fit them
   without crowding. */
.rd-dp__panel--dt{width:290px}
.rd-dp__time{display:flex;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.rd-dp__time .rd-sel__trigger{padding:7px 8px;font-size:.82rem}

/* Custom color picker — replaces bare <input type="color">, whose picker
   dialog is a full native OS window and can't be restyled at all (see
   ColorPicker.tsx). Same circular-swatch trigger language as the fixed
   .brdc-swatch dots it sits next to, just with a dashed ring so it reads
   as "pick your own" rather than one more preset. */
.rd-cp{position:relative}
.rd-cp__trigger{width:26px;height:26px;border-radius:50%;border:2px dashed var(--line);cursor:pointer;
  flex:none;padding:0}
.rd-cp__trigger:hover{border-color:var(--gold-soft)}
.rd-cp__panel{position:absolute;z-index:40;top:calc(100% + 6px);left:0;width:220px;
  background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px -14px rgba(0,20,60,.28);padding:14px}
.rd-cp__sv{position:relative;width:100%;height:130px;border-radius:10px;overflow:hidden;cursor:crosshair;touch-action:none}
.rd-cp__sv-white{position:absolute;inset:0;background:linear-gradient(to right,#fff,rgba(255,255,255,0))}
.rd-cp__sv-black{position:absolute;inset:0;background:linear-gradient(to top,#000,rgba(0,0,0,0))}
.rd-cp__sv-thumb{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;
  box-shadow:0 0 0 1px rgba(0,0,0,.35),0 2px 6px rgba(0,0,0,.4);transform:translate(-50%,-50%);pointer-events:none}
.rd-cp__hue{width:100%;margin-top:10px;-webkit-appearance:none;appearance:none;height:12px;border-radius:999px;
  background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00);cursor:pointer}
.rd-cp__hue::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;
  background:#fff;border:2px solid var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.4);cursor:pointer}
.rd-cp__hue::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid var(--ink);cursor:pointer}
.rd-cp__hexrow{display:flex;align-items:center;gap:8px;margin-top:10px}
.rd-cp__swatch{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);flex:none}
.rd-cp__hex{flex:1;min-width:0;font:inherit;font-size:.86rem;border:1px solid var(--line);border-radius:8px;
  padding:6px 9px;background:#fff;color:var(--ink);text-transform:lowercase}
.rd-cp__hex:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}

/* Custom dropdown select — replaces bare <select>, whose open options
   list is OS-chrome and can't be restyled (see Select.tsx; flagged on the
   "Create a class" Grade field looking like a plain unstyled browser
   dropdown). Same trigger look as .rd-dp so the two read as one family. */
.rd-sel{position:relative}
.rd-sel__trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;text-align:left;
  border:1px solid var(--line);border-radius:11px;padding:9px 12px;font:inherit;font-size:.88rem;
  background:#fff;color:var(--ink);cursor:pointer;transition:border-color .15s}
.rd-sel__trigger:hover{border-color:var(--gold-soft)}
.rd-sel__placeholder{color:var(--muted-2)}
.rd-sel__chev{flex:none;color:var(--muted-2);transition:transform .18s var(--ease)}
.rd-sel__chev.open{transform:rotate(180deg)}
.rd-sel__menu{position:absolute;z-index:40;top:calc(100% + 6px);left:0;right:0;max-height:260px;overflow-y:auto;
  background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px -14px rgba(0,20,60,.28);padding:6px}
.rd-sel__opt{display:block;width:100%;text-align:left;border:0;background:none;color:var(--ink);font:inherit;font-size:.86rem;
  padding:8px 10px;border-radius:9px;cursor:pointer}
.rd-sel__opt:hover{background:var(--soft-blue-2)}
.rd-sel__opt.sel{background:var(--gold);color:#3a2a00;font-weight:700}

.cls-upload{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;align-self:flex-start;
  border:1.5px dashed var(--line);background:#fff;border-radius:11px;padding:10px 16px;font-size:.86rem;
  font-weight:600;color:var(--navy);cursor:pointer;transition:.16s var(--ease);font-family:inherit}
.cls-upload:hover{border-color:var(--gold-soft);border-style:solid;background:var(--soft-blue-2)}
.cls-upload input{display:none}
.cls-upload--key{font-size:.8rem;color:var(--muted);border-color:var(--line);padding:8px 14px}
.cls-upload--key:hover{color:var(--navy)}
 
.cls-thumbs{display:flex;flex-wrap:wrap;gap:8px}
.cls-thumb{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);
  border-radius:999px;padding:5px 6px 5px 12px;font-size:.78rem;color:var(--ink)}
.cls-thumb button{border:0;background:#eceff4;color:var(--muted);width:18px;height:18px;border-radius:50%;
  cursor:pointer;line-height:1;font-size:.7rem;display:flex;align-items:center;justify-content:center}
.cls-thumb button:hover{background:#fbe9e9;color:#c0392b}
.cls-thumb--key{background:var(--soft-blue);border-color:rgba(0,36,105,.12)}
 
.cls-scanresult{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.cls-scanresult b{display:block;font-family:'Fraunces',serif;font-size:1.08rem;color:var(--navy);margin-bottom:6px}
.cls-scanresult p{font-size:.86rem;color:var(--muted);line-height:1.55}
 
/* Scanner — editable review draft (score/breakdown/summary/strengths/
   weaknesses can all be changed before "Save to gradebook" ever writes
   an assessment). Reuses .cls-scan's field styling. */
.cls-scandraft{display:flex;flex-direction:column;gap:14px}
.cls-breakdown,.cls-taglist{display:flex;flex-direction:column;gap:7px;background:#fff;
  border:1px solid var(--line);border-radius:11px;padding:10px 12px}
.cls-breakdown>small,.cls-taglist>small{font-weight:700;color:var(--muted-2);font-size:.72rem;
  text-transform:uppercase;letter-spacing:.04em}
.cls-breakdown__row{display:flex;align-items:center;gap:6px}
.cls-breakdown__row input{border:1px solid var(--line);border-radius:8px;padding:6px 8px;
  font:inherit;font-size:.82rem;font-weight:400;background:var(--warm-white);color:var(--ink)}
.cls-bd-label{flex:2 1 90px;min-width:0}
.cls-bd-num{flex:0 0 52px;width:52px;text-align:center}
.cls-bd-slash{color:var(--muted-2);font-size:.8rem}
.cls-bd-note{flex:2 1 90px;min-width:0}
.cls-bd-del{border:0;background:#eceff4;color:var(--muted);width:20px;height:20px;border-radius:50%;
  flex:0 0 20px;cursor:pointer;line-height:1;font-size:.7rem;display:flex;align-items:center;justify-content:center}
.cls-bd-del:hover{background:#fbe9e9;color:#c0392b}
.cls-bd-add{align-self:flex-start;border:1px dashed var(--line);background:transparent;color:var(--navy);
  font-size:.78rem;font-weight:600;border-radius:8px;padding:5px 10px;cursor:pointer;font-family:inherit}
.cls-bd-add:hover{border-color:var(--gold-soft);background:var(--soft-blue-2)}
.cls-taglist__row{display:flex;align-items:center;gap:6px}
.cls-taglist__row input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:8px;
  padding:6px 8px;font:inherit;font-size:.82rem;font-weight:400;background:var(--warm-white);color:var(--ink)}
.cls-taglist__row button{border:0;background:#eceff4;color:var(--muted);width:20px;height:20px;border-radius:50%;
  flex:0 0 20px;cursor:pointer;line-height:1;font-size:.7rem;display:flex;align-items:center;justify-content:center}
.cls-taglist__row button:hover{background:#fbe9e9;color:#c0392b}
 
@media (max-width: 860px){
  .cls-side{position:static}
  .cls-level{grid-template-columns:100px 1fr 84px}
}
 
/* ==========================================================================
   Shamash — redesigned from scratch (no reused .asst chrome). Ledger
   language throughout: a light rail (not a dark navy panel) with a
   left-accent-bar thread list, and a chat *log* rather than two-sided
   bubbles — assistant turns read like entries with a small byline, only
   the teacher's own messages get a filled, right-aligned pill. The
   composer is a raised card, not an inline row.
   ========================================================================== */

.shm-lockup{display:flex;align-items:center;gap:10px}

.shm{display:grid;grid-template-columns:260px 1fr;gap:0;align-items:stretch;flex:1;min-height:0;
  border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);overflow:hidden;background:#fff}

/* ---- rail ---- */
.shm-side{height:100%;display:flex;flex-direction:column;gap:4px;
  background:var(--cream-2);border-right:1px solid var(--line);padding:18px 14px;overflow:hidden}
.shm-side__new{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
  border:1.5px solid var(--ink);background:#fff;color:var(--ink);font:inherit;font-weight:700;font-size:.86rem;
  padding:10px 12px;border-radius:10px;cursor:pointer;transition:.16s;margin-bottom:14px}
.shm-side__new span{font-size:1rem;line-height:1}
.shm-side__new:hover{background:var(--ink);color:#fff}
.shm-side__hint{font-size:.82rem;color:var(--muted-2);padding:6px 2px;line-height:1.5}
.shm-side__label{font-size:.68rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted-2);margin:0 2px 6px}
.shm-side__list{flex:1;min-height:0;display:flex;flex-direction:column;gap:1px;overflow-y:auto}

.shm-item{display:flex;align-items:center;gap:2px;border-left:2.5px solid transparent;transition:.14s;border-radius:0 8px 8px 0}
.shm-item:hover{background:rgba(14,29,61,.05)}
.shm-item.on{background:rgba(14,29,61,.07);border-left-color:var(--gold)}
.shm-item__main{flex:1;min-width:0;text-align:left;border:0;background:none;cursor:pointer;
  font:inherit;padding:9px 8px;display:flex;align-items:center;gap:9px}
.shm-item__dot{flex:none;width:6px;height:6px;border-radius:50%;background:var(--line)}
.shm-item.on .shm-item__dot{background:var(--gold-deep)}
.shm-item__text{min-width:0;display:flex;flex-direction:column;gap:2px}
.shm-item__main .t{font-size:.85rem;font-weight:600;color:var(--ink);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.shm-item__main .w{font-size:.72rem;color:var(--muted-2)}
.shm-item__edit,.shm-item__del{flex:none;border:0;background:none;color:var(--muted-2);cursor:pointer;padding:6px;
  border-radius:8px;line-height:0;transition:.14s;opacity:0}
.shm-item:hover .shm-item__edit,.shm-item:hover .shm-item__del{opacity:1}
.shm-item__edit:hover{background:rgba(14,29,61,.09);color:var(--navy)}
.shm-item__del{margin-right:4px}
.shm-item__del:hover{background:#fbe4e4;color:#c0392b}
.shm-item__rename{flex:1;min-width:0;font:inherit;font-size:.85rem;font-weight:600;color:var(--ink);
  background:#fff;border:1px solid var(--gold-soft);border-radius:8px;padding:8px 9px;margin:2px}
.shm-item__rename:focus{outline:0;border-color:var(--gold)}

/* ---- main column ---- */
.shm-main{display:flex;flex-direction:column;min-width:0;min-height:0;background:#fff}
.shm-head{display:flex;align-items:center;gap:14px;padding:16px 24px;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,#fff,var(--warm-white))}
.shm-head__icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;
  border-radius:12px;box-shadow:inset 0 0 0 1px var(--gold-soft);
  background:radial-gradient(circle at 30% 25%,#fff3da,var(--gold-soft) 130%)}
.shm-head__t{min-width:0}
.shm-head__h{font-family:'Fraunces',serif;font-weight:500;font-size:1.3rem;color:var(--navy);margin:0}
.shm-head__sub{font-size:.8rem;color:var(--muted-2);margin:1px 0 0;line-height:1.4}

.shm-log{display:flex;flex-direction:column;gap:20px;overflow-y:auto;
  flex:1;min-height:280px;padding:24px}
.shm-log:has(> .shm-welcome:only-child){justify-content:center}

.shm-welcome{display:flex;flex-direction:column;align-items:center;gap:14px;
  padding:20px 10px;color:var(--muted);font-size:.94rem;line-height:1.6;
  max-width:520px;margin:0 auto;text-align:center}
.shm-welcome__badge{display:flex;align-items:center;justify-content:center;flex:none;
  width:76px;height:76px;border-radius:50%;margin-bottom:2px;
  background:radial-gradient(circle at 35% 30%,#fff3da,var(--gold-soft) 130%);
  box-shadow:0 0 0 3px #fff,0 0 0 5px var(--gold-soft),var(--shadow-sm)}
.shm-welcome__mascot{filter:drop-shadow(0 4px 10px rgba(212,147,4,.22))}
.shm-welcome__title{font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;color:var(--ink);margin:0}
.shm-welcome__sub{margin:0;max-width:420px}
.shm-welcome b{color:var(--navy)}
.shm-starters{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;width:100%;margin-top:10px;
  background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.shm-starters__item{display:flex;align-items:center;gap:10px;text-align:left;
  border:0;background:#fff;color:var(--ink);
  font:inherit;font-size:.85rem;font-weight:600;padding:13px 14px;
  cursor:pointer;transition:.16s}
.shm-starters__item i{font-style:normal;font-size:1rem}
.shm-starters__item:hover{background:var(--cream-2);color:var(--navy)}
@media (max-width:560px){.shm-starters{grid-template-columns:1fr}}

/* Log entries — assistant turns are flush-left, byline + text, no bubble;
   user turns are a right-aligned filled pill. Genuinely different rhythm
   from a two-sided bubble chat. */
.shm-line{display:flex;flex-direction:column;gap:6px}
.shm-line--user{align-items:flex-end}
.shm-line--assistant{align-items:flex-start}
.shm-line__row{display:flex;align-items:flex-start;gap:10px;min-width:0;max-width:82%}
.shm-line--user .shm-line__row{max-width:74%}
.shm-line__avatar{flex:none;width:26px;height:26px;border-radius:8px;
  box-shadow:inset 0 0 0 1px var(--gold-soft);
  background:radial-gradient(circle at 30% 25%,#fff3da,var(--gold-soft) 130%);
  display:flex;align-items:center;justify-content:center;margin-top:2px}
.shm-line__text{font-size:.94rem;line-height:1.6;min-width:0}
.shm-line__text p{margin:0}
.shm-line__text p + p{margin-top:8px}
.shm-line__text ul,.shm-line__text ol{margin:6px 0;padding-inline-start:20px}
.shm-line__text ul + p,.shm-line__text ol + p,.shm-line__text p + ul,.shm-line__text p + ol{margin-top:8px}
.shm-line__text li{margin:3px 0}
.shm-line__text strong{font-weight:700}
.shm-line__text code{background:var(--soft-blue-2);border-radius:6px;padding:1px 6px;font-size:.9em}
.shm-line__text blockquote{margin:8px 0;padding:6px 12px;border-inline-start:3px solid var(--gold)}
.shm-line__text hr{border:0;border-top:1px solid var(--line);margin:8px 0}
.shm-line--assistant .shm-line__text{color:var(--ink)}
.shm-line--user .shm-line__text{background:var(--ink);color:#fff;border-radius:16px 16px 4px 16px;padding:10px 15px}
.shm-line--user .shm-line__text code{background:rgba(255,255,255,.16)}
.shm-line__text--typing{display:flex;gap:4px;align-items:center;padding:8px 0}
.shm-line__text--typing span{width:6px;height:6px;border-radius:50%;background:var(--muted-2);
  animation:shmTyping 1.1s infinite ease-in-out}
.shm-line__text--typing span:nth-child(2){animation-delay:.15s}
.shm-line__text--typing span:nth-child(3){animation-delay:.3s}
@keyframes shmTyping{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

.shm-chips{display:flex;flex-wrap:wrap;gap:6px;margin-left:36px}
.shm-chip{font-size:.72rem;font-weight:600;color:var(--gold-deep);border:1px solid rgba(212,147,4,.3);
  background:var(--warm-white);padding:4px 11px;border-radius:999px}

/* A destructive action Shamash staged (delete_student) but hasn't performed
   -- see PendingAction in lib/db.ts. Nothing happens until Confirm is
   clicked here; same danger styling as the rest of the app's delete
   controls (.cls-danger). */
.shm-pending{max-width:420px;border-left:3px solid #c0392b;background:#fdf6f6;
  border-radius:0 10px 10px 0;padding:12px 14px;font-size:.86rem;line-height:1.5;margin-left:36px}
.shm-pending p{margin:0 0 10px}
.shm-pending__acts{display:flex;gap:8px;flex-wrap:wrap}

/* Composer — a flush footer bar (border-top, no floating margin) holding
   the actual raised/bordered input pill, same two-layer structure as the
   rest of the app's chrome (header bar above, footer bar below, content
   sits inside both without its own separate "floating card" look). */
.shm-composer{flex:none;padding:14px 24px 16px;border-top:1px solid var(--line);
  background:linear-gradient(0deg,#fff,var(--warm-white))}
.shm-composer__field{display:flex;gap:10px;align-items:flex-end;border:1.5px solid var(--line);
  background:#fff;border-radius:16px;box-shadow:var(--shadow-sm);padding:10px 10px 10px 18px;transition:.16s}
.shm-composer__field:focus-within{border-color:var(--gold-soft);box-shadow:0 0 0 3px var(--gold-glow)}
.shm-composer__input{flex:1;border:0;background:none;resize:none;font:inherit;font-size:.92rem;
  color:var(--ink);max-height:140px;overflow-y:auto;padding:6px 0}
.shm-composer__input:focus{outline:0}
.shm-composer__input:disabled{opacity:.6}
.shm-composer__send{flex:none;border:0;cursor:pointer;font:inherit;font-weight:700;font-size:.86rem;
  color:#3a2a00;background:linear-gradient(180deg,var(--gold-soft),var(--gold));padding:.6rem 1.2rem;
  border-radius:11px;height:38px;transition:.16s;box-shadow:0 6px 16px -8px rgba(212,147,4,.55)}
.shm-composer__send:hover:not(:disabled){transform:translateY(-1px)}
.shm-composer__send:disabled{opacity:.4;cursor:default;box-shadow:none}
.shm-guard{font-size:.76rem;color:var(--muted-2);margin:9px 2px 0;text-align:center}

@media (max-width:860px){
  .shm{grid-template-columns:1fr}
  .shm-side{display:none}
}
 
/* ============ Voice input (mic) — chat + notes dictation ============
   components/VoiceButton.tsx. Icon-only round button; sits beside the
   Assistant's send button and floats inside the Generate flow's notes box. */
.voice-mic{flex:none;width:38px;height:38px;border-radius:50%;border:1px solid var(--line);
  background:#fff;color:var(--navy);display:inline-flex;align-items:center;justify-content:center;
  cursor:pointer;transition:.16s;padding:0}
.voice-mic:hover{border-color:var(--gold-soft);color:var(--gold-deep)}
.voice-mic:disabled{opacity:.5;cursor:default}
.voice-mic.on{background:#c0392b;border-color:#c0392b;color:#fff;animation:voiceMicPulse 1.4s ease-in-out infinite}
.voice-mic.busy{color:var(--gold-deep);cursor:wait}
.voice-mic__spin{animation:voiceMicSpin .9s linear infinite}
@keyframes voiceMicPulse{0%,100%{box-shadow:0 0 0 0 rgba(192,57,43,.35)}50%{box-shadow:0 0 0 7px rgba(192,57,43,0)}}
@keyframes voiceMicSpin{to{transform:rotate(360deg)}}
 
.notesin-wrap{position:relative;width:100%;max-width:560px}
.notesin-wrap .notesin{max-width:100%;padding-right:52px}
.notesin-wrap__mic{position:absolute;right:8px;bottom:8px}

/* ==========================================================================
   Weekly AI class insight — Dashboard card. ins- is only for this widget.
   ========================================================================== */
 
.ins{background:linear-gradient(120deg,#fff,#f6f0e2);border:1px solid var(--line);
  border-radius:var(--r-lg);padding:20px 22px;margin-bottom:22px;box-shadow:var(--shadow-sm)}
.ins--upsell{background:var(--warm-white)}
 
.ins__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px;flex-wrap:wrap}
.ins__k{font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;color:var(--gold-deep);font-weight:700}
.ins__when{font-size:.78rem;color:var(--muted-2)}
 
.ins__body{font-size:.92rem;color:var(--ink);line-height:1.6}
.ins__body p{margin:0 0 8px}
.ins__body p:last-child{margin-bottom:0}
 
.ins__hint{font-size:.88rem;color:var(--muted);line-height:1.55;margin:0 0 12px}
.ins__flash{font-size:.84rem;color:#c0392b;margin:0 0 10px}
 
.ins__regen{margin-top:12px;border:1px solid var(--line);background:#fff;color:var(--navy);
  font:inherit;font-size:.84rem;font-weight:600;padding:8px 15px;border-radius:999px;cursor:pointer;transition:.16s}
.ins__regen:hover{border-color:var(--gold-soft);transform:translateY(-1px)}
.ins__regen:disabled{opacity:.6;cursor:default;transform:none}
 
/* Class newsletter — editable textarea, styled like .pv-sheet so it reads
   as "the document" even while it's still an input. */
.cls-newsletter-edit{
  background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);
  padding:32px 40px;min-height:52vh;width:100%;resize:vertical;
  font-family:inherit;font-size:.95rem;line-height:1.65;color:var(--ink);
}
.cls-newsletter-edit:focus{outline:none;border-color:var(--gold-soft);box-shadow:var(--shadow),0 0 0 3px rgba(212,147,4,.12)}
@media (max-width:820px){
  .cls-newsletter-edit{padding:20px;min-height:40vh}
}
/* ============ "Coming soon" — Chassidus Rebbe/sefer picks without a
   verified source yet (see components/GenerateFlow.tsx's comingSoon()). ============ */
.opt.soon,.gchip.soon{opacity:.5;cursor:not-allowed;background:var(--cream-2)}
.opt.soon:hover,.gchip.soon:hover{transform:none;border-color:var(--line)}
.soon-tag{display:inline-block;margin-left:8px;font-size:.68rem;font-weight:700;letter-spacing:.02em;
  color:var(--muted-2);background:#eee9dd;padding:2px 8px;border-radius:999px;vertical-align:middle}

/* ============ Library (app/library/page.tsx) — dedicated, admin-gated
   source-text tree editor. Shares the same lock screen (.adm-lock) and
   flash toast (.adm__flash) as /admin, but is its own standalone app. ============ */
.lib{min-height:100vh;background:var(--cream);color:var(--ink);font-family:'Inter',sans-serif}
.lib--center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.lib__bar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:18px;padding:0 22px;height:60px;
  background:linear-gradient(90deg,#002469,#0a3187);color:#fff;box-shadow:var(--shadow)}
.lib__brand{display:flex;align-items:center;gap:10px;font-weight:600;letter-spacing:.02em;flex:none}
.lib__brand img{height:24px}
.lib__brand span{background:var(--gold);color:#3a2a00;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  padding:.2rem .55rem;border-radius:999px}
.lib__tag{flex:1;margin:0;font-size:.82rem;color:#a9bce0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib__bar-r{display:flex;align-items:center;gap:16px;flex:none}
.lib__exit{background:none;border:0;color:#c6d2ea;font-size:.88rem;font-family:inherit;cursor:pointer}
.lib__exit:hover{color:#fff}

.lib__body{display:grid;grid-template-columns:360px 1fr;min-height:calc(100vh - 60px);align-items:start}
.lib__tree{border-right:1px solid var(--line);padding:22px 18px;max-height:calc(100vh - 60px);overflow:auto;position:sticky;top:60px}
.lib__tree-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.lib__tree-head h2{margin:0;font-family:'Fraunces',serif;font-weight:500;font-size:1.15rem;color:var(--navy)}
.lib-linkbtn{border:0;background:none;color:var(--gold-deep);font:inherit;font-size:.84rem;font-weight:600;cursor:pointer;white-space:nowrap}
.lib-linkbtn:hover{text-decoration:underline}

.lib-branch{display:flex;flex-direction:column}
.lib-branch .lib-branch{margin-left:16px;padding-left:10px;border-left:1px dashed var(--line)}
.lib-node__row{display:flex;align-items:center;gap:4px;border-radius:9px;padding:2px;cursor:grab;
  box-shadow:inset 0 2px 0 0 transparent,inset 0 -2px 0 0 transparent}
.lib-node__row:hover{background:var(--warm-white)}
.lib-node__row.sel{background:rgba(212,147,4,.14)}
.lib-node__row.dragging{opacity:.4}
.lib-node__row.drop-before{box-shadow:inset 0 2px 0 0 var(--gold),inset 0 -2px 0 0 transparent}
.lib-node__row.drop-after{box-shadow:inset 0 -2px 0 0 var(--gold),inset 0 2px 0 0 transparent}
.lib-node__row.drop-inside{background:rgba(212,147,4,.18);outline:1.5px dashed var(--gold)}
.lib-rootdrop{margin-top:6px;padding:10px;border-radius:9px;border:1.5px dashed var(--line);
  text-align:center;font-size:.78rem;color:var(--muted-2)}
.lib-rootdrop.active{border-color:var(--gold);background:rgba(212,147,4,.1);color:var(--navy)}
.lib-node__caret{flex:none;width:20px;height:26px;border:0;background:none;color:var(--muted-2);cursor:pointer;font-size:.75rem}
.lib-node__caret.empty{cursor:default;color:var(--line)}
.lib-node__name{flex:1;min-width:0;display:flex;align-items:center;gap:8px;border:0;background:none;text-align:left;
  font:inherit;font-size:.9rem;color:var(--ink);padding:5px 2px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-node__dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--line)}
.lib-node__dot.on{background:#1f7a3d}
.lib-node__acts{flex:none;display:flex;gap:2px;opacity:0;transition:.12s}
.lib-node__row:hover .lib-node__acts{opacity:1}
.lib-node__acts button{width:22px;height:22px;border-radius:6px;border:0;background:none;color:var(--muted-2);cursor:pointer;font-size:.85rem}
.lib-node__acts button:hover{background:#fff;color:var(--navy)}
.lib-node__acts button.danger:hover{color:#c0392b}

.lib-addrow{display:flex;align-items:center;gap:6px;margin:4px 0 8px 24px}
.lib-addrow--root{margin:0 0 14px}
.lib-addrow input{flex:1;min-width:0;border:1px solid var(--line);border-radius:9px;padding:7px 10px;font:inherit;font-size:.86rem;background:#fff}
.lib-addrow input:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}

.lib-import{margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.lib-import__panel{margin-top:10px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fbfaf7;display:flex;flex-direction:column;gap:10px}
.lib-import__panel .adm-hint{margin:0;font-size:.82rem;line-height:1.5}
.lib-import__row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lib-import__row label{display:flex;align-items:center;gap:6px;font-size:.84rem;font-weight:600;color:var(--navy)}
.lib-import__row select{border:1px solid var(--line);border-radius:8px;padding:5px 8px;font:inherit;background:#fff}
.lib-import__result{font-size:.84rem;color:var(--navy)}
.lib-import__result > p{margin:0 0 8px}
.lib-import__list{list-style:none;margin:0;padding:0;max-height:260px;overflow:auto;display:flex;flex-direction:column;gap:6px}
.lib-import__list li{padding:6px 8px;border-radius:8px;background:#fff;border:1px solid var(--line)}
.lib-import__list li.updated{border-color:#bfe3c9}
.lib-import__list li.no-body-text,.lib-import__list li.no-node{border-color:#f0cf9a}
.lib-import__list li.bulk-error{border-color:#e3a2a2;background:#fdf4f4}
.lib-import__list ul{list-style:disc;margin:4px 0 0 18px;padding:0;color:var(--muted-2);font-size:.8rem}

.lib-bulk{margin:0 0 18px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fbfaf7;display:flex;flex-direction:column;gap:8px}
.lib-bulk .adm-hint{margin:0;font-size:.82rem;line-height:1.5}

.lib__editor{padding:34px 40px 80px;max-width:820px}
.lib-empty{color:var(--muted);max-width:480px}
.lib-empty h2{font-family:'Fraunces',serif;font-weight:500;font-size:1.4rem;color:var(--navy);margin-bottom:8px}
.lib-crumb{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:.84rem;color:var(--muted-2);margin-bottom:16px}
.lib-crumb button{border:0;background:none;color:var(--muted-2);font:inherit;font-size:.84rem;cursor:pointer}
.lib-crumb button:hover{color:var(--gold-deep);text-decoration:underline}
.lib-crumb b{color:var(--navy)}
.lib-crumb i{font-style:normal;margin:0 2px;color:var(--line)}

.lib-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.lib-nameinput{flex:1;min-width:200px;border:0;border-bottom:2px solid var(--line);background:none;padding:6px 2px;
  font-family:'Fraunces',serif;font-weight:500;font-size:1.5rem;color:var(--navy)}
.lib-nameinput:focus{outline:none;border-color:var(--gold)}
.lib-badge{flex:none;font-size:.8rem;font-weight:700;padding:6px 14px;border-radius:999px;background:#fdf3e0;color:var(--gold-deep)}
.lib-badge.on{background:#e9f6ed;color:#1f7a3d}

.lib-grid{display:flex;flex-direction:column;gap:20px}
.lib-grid label{display:flex;flex-direction:column;gap:6px;font-size:.88rem;font-weight:600;color:var(--navy)}
.lib-grid label small{font-weight:400;color:var(--muted-2);font-size:.79rem;line-height:1.5}
.lib-grid input,.lib-grid textarea{border:1px solid var(--line);border-radius:12px;padding:12px 15px;font:inherit;font-size:.92rem;
  font-weight:400;background:#fff;color:var(--ink);resize:vertical}
.lib-grid input:focus,.lib-grid textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.lib-pdf{border-top:1px solid var(--line);padding-top:18px}
.lib-pdf__label{font-size:.88rem;font-weight:600;color:var(--navy);margin-bottom:8px}
.lib-pdf__label small{font-weight:400;color:var(--muted-2);font-size:.79rem}
.lib-pdf__file{display:flex;align-items:center;gap:14px}
.lib-pdf__file a{font-size:.9rem;font-weight:600;color:var(--gold-deep)}
.lib-pdf__file a:hover{text-decoration:underline}
.lib-row{display:flex;align-items:center;gap:14px;padding-top:6px}

@media (max-width:900px){
  .lib__body{grid-template-columns:1fr}
  .lib__tree{position:static;max-height:none;border-right:0;border-bottom:1px solid var(--line)}
  .lib__editor{padding:24px 18px 60px}
}

/* ---- /dummy-rashi -- a prop for video: a generic-looking AI chat UI.
   No real model behind it, nothing it says is a real source -- see the
   comment atop app/dummy-rashi/page.tsx. Styled like a plain, modern chat
   app (not tied to the rest of the site's look) so it reads as "some AI
   tool" on camera rather than as part of RebbisDesk itself. ---- */
.aic{position:fixed;inset:0;display:flex;flex-direction:column;background:#fafafa;color:#1a1a1a;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif}
.aic__header{flex:none;display:flex;align-items:center;gap:10px;padding:14px 20px;border-bottom:1px solid #e8e8e8;background:#fff}
.aic__logo{width:28px;height:28px;border-radius:8px;background:#1a1a1a;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.9rem}
.aic__title{font-weight:600;font-size:.98rem;letter-spacing:-.01em}
.aic__log{flex:1;overflow-y:auto}
.aic__inner{max-width:720px;margin:0 auto;padding:24px 20px 12px;display:flex;flex-direction:column;gap:22px}
.aic__row{display:flex;gap:14px;align-items:flex-start}
.aic__avatar{flex:none;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:.72rem;font-weight:700;background:#eee;color:#555}
.aic__row--ai .aic__avatar{background:#1a1a1a;color:#fff}
.aic__row--user .aic__avatar{background:#e6efff;color:#2452b8;font-size:.62rem}
.aic__bubble{flex:1;padding-top:3px;font-size:1rem;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.aic__row--ai .aic__bubble span{font-family:'Frank Ruhl Libre',Georgia,serif}
.aic__dots{display:inline-flex;gap:4px;padding:4px 0}
.aic__dots i{width:6px;height:6px;border-radius:50%;background:#bbb;display:inline-block;animation:aicBounce 1.1s infinite ease-in-out both}
.aic__dots i:nth-child(2){animation-delay:.15s}
.aic__dots i:nth-child(3){animation-delay:.3s}
@keyframes aicBounce{0%,80%,100%{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}
.aic__inputbar{flex:none;padding:14px 20px 20px;background:linear-gradient(180deg,rgba(250,250,250,0),#fafafa 30%)}
.aic__inputwrap{max-width:720px;margin:0 auto;display:flex;align-items:flex-end;gap:8px;
  background:#fff;border:1px solid #e0e0e0;border-radius:22px;padding:8px 8px 8px 18px;box-shadow:0 6px 20px -12px rgba(0,0,0,.15)}
.aic__input{flex:1;border:0;outline:none;resize:none;font:inherit;font-size:1rem;line-height:1.4;max-height:160px;padding:6px 0;background:transparent}
.aic__send{flex:none;width:34px;height:34px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:opacity .15s,transform .15s}
.aic__send:disabled{opacity:.3;cursor:default}
.aic__send:not(:disabled):hover{transform:scale(1.06)}

/* ==================================================================
   My Class 2.0 — class creation, roster wizard, mascot picker,
   tier cards, homework, and kid/parent portal chrome.
   Reuses existing .pv, .cls-, .gchip, .ck primitives everywhere it can;
   only genuinely new shapes get their own rules here.
   ================================================================== */

/* ---- add-student wizard: cards for the tier choice, kept close to the
   app's core form look (no dark chrome) so it reads as part of the new My
   Class system. No step-progress bar -- three flat, unlabeled segments
   didn't actually communicate progress, just added clutter above the
   real content (flagged directly). */
.rdc-wiz{display:flex;flex-direction:column;gap:18px}
.rdc-wiz__title{font-family:'Fraunces',serif;font-weight:500;font-size:1.15rem;margin:0;color:var(--ink)}
.rdc-wiz__hint{color:var(--muted);font-size:.86rem;line-height:1.55;margin:0}
.rdc-wiz__nav{display:flex;justify-content:space-between;gap:10px;margin-top:6px}

/* ---- tier choice cards ---- */
.rdc-tiers{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:640px){.rdc-tiers{grid-template-columns:1fr}}
.rdc-tier{text-align:left;border:1.5px solid var(--line);border-radius:16px;padding:18px;background:var(--warm-white);
  cursor:pointer;transition:border-color .15s,box-shadow .15s;display:flex;flex-direction:column;gap:8px}
.rdc-tier:hover{border-color:var(--gold-soft)}
.rdc-tier.sel{border-color:var(--gold);box-shadow:0 0 0 3px rgba(212,175,55,.18)}
.rdc-tier__name{font-weight:700;font-size:1rem}
.rdc-tier__price{font-size:.78rem;color:var(--muted)}
.rdc-tier__list{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-direction:column;gap:5px;font-size:.85rem;color:var(--ink)}
.rdc-tier__list li{display:flex;gap:7px;align-items:flex-start}
.rdc-tier__list li::before{content:"✓";color:var(--gold-deep);font-weight:700;flex:none}

/* ---- persona survey (PersonaFields.tsx) — shared by the add-talmid
   wizard's persona step, the standalone /myclass/persona/edit/:id page,
   and the public /myclass/persona/:token parent-fill page. Choice fields
   (see lib/persona.ts) span the full width as a row of tappable chips;
   text fields sit two-up. Card-language wrapper (.pf-panel) so the survey
   reads as one grouped, intentional page instead of loose label/textarea
   pairs floating on the bare page background. */
.mc-wiz__hint{color:var(--muted);font-size:.86rem;line-height:1.55;margin:-6px 0 4px}
.pf-panel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:26px 28px}
.pf-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 22px}
@media (max-width:640px){.pf-grid{grid-template-columns:1fr}.pf-panel{padding:20px}}
.pf-field{display:flex;flex-direction:column;gap:8px;min-width:0}
.pf-field--full{grid-column:1 / -1}
.pf-field__label{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:700;color:var(--navy);line-height:1.4}
.pf-field__label small{font-weight:400;color:var(--muted-2);font-size:.76rem}
.pf-field__req{font-size:.62rem;font-weight:700;color:#c0392b;background:#fdf1f1;border:1px solid rgba(192,57,43,.25);
  padding:1px 8px;border-radius:999px;text-transform:uppercase;letter-spacing:.03em}
.pf-field__remove{border:0;background:none;color:var(--muted-2);cursor:pointer;font-size:.75rem;margin-left:auto;padding:2px}
.pf-field__remove:hover{color:#c0392b}
.pf-field textarea{font:inherit;font-size:.88rem;font-weight:400;border:1px solid var(--line);border-radius:11px;
  padding:9px 12px;background:#fff;color:var(--ink);resize:vertical}
.pf-field textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.pf-field--missing textarea{border-color:rgba(192,57,43,.45)}
.pf-choices{display:flex;flex-wrap:wrap;gap:8px}
.pf-choice{border:1px solid var(--line);background:#fff;color:var(--muted);font:inherit;font-size:.82rem;font-weight:600;
  padding:8px 14px;border-radius:999px;cursor:pointer;transition:.15s}
.pf-choice:hover{border-color:var(--gold-soft);color:var(--navy)}
.pf-choice.sel{background:linear-gradient(135deg,var(--gold),var(--gold-deep));border-color:transparent;color:#fff}
.pf-field--missing .pf-choices{padding:4px;margin:-4px;border-radius:12px;outline:1.5px dashed rgba(192,57,43,.4)}

/* "Send to a parent instead" — a clearly secondary escape hatch, so it
   sits BELOW the survey (not above it, competing with the real questions
   for attention) wherever it appears. */
.pf-delegate{display:flex;flex-direction:column;gap:8px;border:1.5px dashed var(--line);border-radius:var(--r);
  padding:16px 18px;margin-top:18px;background:var(--cream-2)}
.pf-delegate__title{font-family:'Fraunces',serif;font-weight:500;font-size:.98rem;color:var(--ink);margin:0}
.pf-delegate p{margin:0;font-size:.85rem;color:var(--muted);line-height:1.5}
.pf-delegate .row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ---- mascot picker: a grid of ready-made mini-Shamash expressions
   (public/avatars/*.png) -- a sticker pick, not a character builder ---- */
.mascot-picker{display:flex;gap:22px;align-items:flex-start;flex-wrap:wrap}
.mascot-picker__preview{flex:none;width:150px;height:150px;border-radius:20px;background:radial-gradient(circle at 50% 40%,#fffdf5,#f3ecd8);
  display:flex;align-items:center;justify-content:center;border:1.5px solid var(--line)}
.mascot-picker__controls{flex:1;min-width:220px;display:flex;flex-direction:column;gap:12px}
.mascot-picker__row{display:flex;flex-direction:column;gap:6px}
.mascot-picker__row>span{font-size:.78rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
/* "sel" gets the same gold-ring treatment as a selected class pill / chip elsewhere in the app */
.mascot-picker__presets{display:flex;flex-wrap:wrap;gap:8px}
.mascot-picker__preset{width:56px;height:56px;border-radius:50%;border:2px solid transparent;padding:0;cursor:pointer;
  background:radial-gradient(circle at 50% 40%,#fffdf5,#f3ecd8);box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);
  display:flex;align-items:center;justify-content:center;overflow:hidden;transition:border-color .15s}
.mascot-picker__preset img{width:52px;height:52px;border-radius:50%;object-fit:cover;display:block}
.mascot-picker__preset:hover{border-color:var(--gold-soft)}
.mascot-picker__preset.sel{border-color:var(--navy);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--navy)}

/* ---- homework list -- shared with the kid portal, parent portal, and
   the "assign homework" page (app/myclass/kid, /parent/[id],
   /homework/assign/[id]), not just My Class, so the class name stays as-is
   here rather than moving into the rdc- namespace with the rest of the
   roster/detail redesign. ---- */
.mc-hw{display:flex;flex-direction:column;gap:8px}
.mc-hw__row{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:10px;padding:9px 12px;background:var(--warm-white)}
.mc-hw__row.done{opacity:.6}
.mc-hw__row .t{flex:1;display:flex;flex-direction:column;gap:2px}
.mc-hw__row .t b{font-size:.9rem}
.mc-hw__row .t small{color:var(--muted);font-size:.76rem}
.mc-hw__status{font-size:.72rem;font-weight:700;padding:3px 9px;border-radius:999px}
.mc-hw__status--assigned{background:#fff2cc;color:#7a5a10}
.mc-hw__status--done{background:#d8f0d8;color:#2c6b2c}

/* homework material -- either an existing draft (opened + optionally
   fillable, see lib/md.ts) or an uploaded PDF */
.mc-hw__item{display:flex;flex-direction:column;gap:6px}
.mc-hw__material{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding-left:2px}
.mc-hw__worksheet{width:100%;border:1px solid var(--line);border-radius:12px;background:#fff;padding:14px 16px}
.mc-hw__save{display:flex;align-items:center;gap:12px;margin-top:12px}

/* Fillable writing-lines inside a mdToHtml(content, answers) render --
   the print-only static .wline/.wline--block (see the pv-sheet rules
   above) become real inputs here instead. */
.wline-input{display:inline-block;min-width:160px;border:0;border-bottom:1.5px solid var(--muted-2);background:transparent;
  font:inherit;font-size:.95em;color:var(--ink);padding:1px 4px}
.wline-input:focus{outline:none;border-bottom-color:var(--gold)}
.wline-input--block{display:block;width:100%;margin:10px 0;border:1px solid var(--line);border-radius:8px;background:#fdfaf2;padding:8px 10px;font:inherit;font-size:.92rem;color:var(--ink)}
.wline-input--block:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}

/* "Draw a picture of..." prompts (see lib/md.ts's "draw" cue) -- a bigger
   empty box in static/print mode, an actual drawable canvas + Clear button
   in fillable mode (see lib/fillable.ts for the pointer-drawing wire-up).
   Global/unscoped like .wline-input above -- the kid page these render on
   isn't wrapped in .genroot. */
.wline-draw{display:block;width:100%;height:170px;border:1.5px dashed var(--line);border-radius:10px;background:#fdfaf2;margin:10px 0}
.wline-draw-wrap{display:block;margin:10px 0}
.wline-canvas{display:block;width:100%;max-width:640px;height:200px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:crosshair}
.wline-canvas__clear{margin-top:6px;border:1px solid var(--line);background:transparent;color:var(--muted);font:inherit;font-size:.78rem;border-radius:999px;padding:4px 12px;cursor:pointer}
.wline-canvas__clear:hover{background:var(--soft-blue-2);color:var(--ink)}

/* "(Circle ONE)" / "(Circle TWO)" style questions (see lib/md.ts's "circle"
   cue) -- real checkbox/radio controls instead of plain bullets. */
ul.wli-checklist{list-style:none;margin:8px 0;padding:0;display:flex;flex-direction:column;gap:6px}
.wli-check label{display:flex;align-items:flex-start;gap:8px;font-size:.94rem;color:var(--ink);cursor:pointer}
.wli-check input{margin-top:3px;width:16px;height:16px;accent-color:var(--gold-deep);flex:none}
.wli-check input:disabled{cursor:default}

/* ---- kid & parent portal shells (public pages, no dashboard chrome) ---- */
.kidp{min-height:100vh;background:linear-gradient(180deg,#fffdf6,#f6efe0);display:flex;flex-direction:column;align-items:center;padding:32px 16px 60px}
.kidp__card{width:100%;max-width:480px;background:#fff;border-radius:22px;box-shadow:0 20px 50px -30px rgba(0,0,0,.35);padding:26px 22px;margin-top:18px}
.kidp__mascot{display:flex;justify-content:center;margin-bottom:6px}
.kidp__greet{text-align:center;font-size:1.3rem;font-weight:700;margin:6px 0 2px}
.kidp__sub{text-align:center;color:var(--muted);font-size:.9rem;margin-bottom:18px}
.kidp__code{display:flex;flex-direction:column;gap:12px;max-width:280px;margin:0 auto}
.kidp__code input{font-size:1.4rem;letter-spacing:.18em;text-align:center;text-transform:uppercase;padding:12px;border-radius:12px;border:1.5px solid var(--line)}
.kidp__section{margin-top:22px}
.kidp__section h3{font-size:.95rem;margin-bottom:10px}
.kidp__ws{display:flex;flex-direction:column;gap:8px}
.kidp__ws button{text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--warm-white);cursor:pointer;font:inherit}

.parentp{max-width:760px;margin:0 auto;padding:24px 18px 60px}
.parentp__card{border:1px solid var(--line);border-radius:16px;padding:18px;background:var(--warm-white);margin-bottom:14px}
.parentp__levels{display:flex;flex-direction:column;gap:8px;margin-top:10px}

/* ---- classroom tool grid (extras tabs) — a bordered/shadowed panel, same
   card language as My Class's rdc-toppanel/rdc-listpanel, with each tool a
   little tile behind a warm icon badge instead of a flat bordered square. */
.ts-panel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-sm);padding:20px}
.ts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.ts-tool{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 10px 16px;border:1px solid var(--line);
  border-radius:16px;background:#fff;cursor:pointer;transition:border-color .15s,transform .15s,box-shadow .15s;box-shadow:var(--shadow-sm)}
.ts-tool:hover{border-color:var(--gold-soft);transform:translateY(-3px);box-shadow:var(--shadow)}
.ts-tool__badge{display:flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:13px;
  box-shadow:inset 0 0 0 1px var(--gold-soft);
  background:radial-gradient(circle at 30% 25%,#fff3da,var(--gold-soft) 130%);transition:.15s}
.ts-tool:hover .ts-tool__badge{transform:scale(1.06)}
.ts-tool__icon{font-size:1.4rem}
.ts-tool__label{font-size:.84rem;font-weight:600;text-align:center;color:var(--navy)}

/* ---- Grades tab: main + side, 2-column -- lives inside one talmid's own
   profile (see ClassTab.tsx's renderStudentDetail) now, not a class-wide
   tab with its own roster rail, so there's no third "who" column anymore. */
.grd-live,.grd-live--solo{display:grid;grid-template-columns:1fr 300px;gap:22px;align-items:start}
@media (max-width:1050px){.grd-live,.grd-live--solo{grid-template-columns:1fr}}

/* ---- Report Cards tab (components/ReportCardTab.tsx) ---- */
/* Reuses .grd-live's main/side layout and .cls-section/.cls-history/
   .cls-reportrow/.pv-sheet/.pv-act from Grades and the report/newsletter
   viewers -- only the stats table and a couple of small additions below
   are new. */
.rc-live .cls-main{display:flex;flex-direction:column;gap:22px}
.cls-reportrow.sel{border-color:var(--gold);background:var(--soft-blue-2)}

/* A real, deterministic per-subject table -- see StatsTable in
   ReportCardTab.tsx. Row-based rather than a literal <table> so it can
   reuse .cls-level__bar/__fill for the mini progress bar per subject. */
.rc-stats{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
.rc-stats__row{display:grid;grid-template-columns:1.3fr 1.6fr .8fr 1fr;gap:10px;align-items:center;
  padding:9px 14px;border-top:1px solid var(--line);font-size:.86rem;color:var(--ink)}
.rc-stats__row:first-child{border-top:0}
.rc-stats__row--head{background:var(--warm-white);font-size:.74rem;font-weight:700;color:var(--muted-2);
  text-transform:uppercase;letter-spacing:.04em}
.rc-stats__row--total{background:var(--warm-white);font-weight:700;color:var(--navy)}
.rc-stats__subject{font-weight:600}
.rc-stats__avg{display:flex;align-items:center;gap:8px}
.rc-stats__pct{font-weight:700;font-size:.84rem;white-space:nowrap}
.rc-stats__pct--good{color:#1f7a3d}
.rc-stats__pct--mid{color:var(--gold-deep)}
.rc-stats__pct--low{color:#c0392b}
.rc-stats__bar{width:64px;flex:none}
@media (max-width:640px){.rc-stats__row{grid-template-columns:1fr 1fr;row-gap:4px}.rc-stats__row--head{display:none}}

/* The narrative report itself: its own frozen stats snapshot, sitting
   right above the AI-written body so the two always read as one document
   (and print/copy together the same way). */
.rc-doc{display:flex;flex-direction:column;gap:14px}
.rc-doc__sheet{max-height:none}

/* Draft/review/send status — a report card isn't visible to a family the
   moment it's generated; see ReportCardTab's send/discard actions. */
.rc-status{display:inline-block;margin-left:10px;padding:3px 10px;border-radius:999px;
  font-size:.68rem;font-weight:700;letter-spacing:.02em;vertical-align:middle}
.rc-status--draft{background:#fdf1d6;color:#8a5a00}
.rc-status--sent{background:#e4f4e8;color:#1f7a3d}
.rc-status__tag{margin-left:8px;padding:1px 7px;border-radius:999px;background:#fdf1d6;color:#8a5a00;
  font-size:.64rem;font-weight:700;font-style:normal;letter-spacing:.02em;vertical-align:middle}

/* ---- individual classroom tools (Tools tab) ---- */
.tool-timer{text-align:center;padding:10px 0}
.tool-timer__display{font-size:3.4rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--navy);margin-bottom:14px}
.tool-timer__presets{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.tool-timer__controls{display:flex;justify-content:center;gap:10px}

.tool-random__wheel{text-align:center;padding:20px 0}
.tool-random__name{font-size:1.8rem;font-weight:700;color:var(--navy);min-height:2.4em;display:flex;align-items:center;justify-content:center}
.tool-random__name.spin{animation:toolRandomPulse .12s infinite alternate}
@keyframes toolRandomPulse{from{opacity:.5}to{opacity:1}}

.tool-noise{text-align:center;padding:10px 0}
.tool-noise__bar{width:100%;height:26px;border-radius:13px;background:var(--line);overflow:hidden;margin:14px 0}
.tool-noise__fill{height:100%;border-radius:13px;transition:width .1s linear,background .2s}
.tool-noise__label{font-weight:700;font-size:1.1rem}

.tool-grid-list{display:flex;flex-direction:column;gap:6px;max-height:360px;overflow-y:auto}
.tool-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--warm-white)}
.tool-row .t{flex:1;font-size:.9rem}
.tool-chiprow{display:flex;gap:6px;flex-wrap:wrap}

.seat-grid{display:grid;gap:8px;margin:14px 0}
.seat{border:1.5px dashed var(--line);border-radius:10px;min-height:52px;display:flex;align-items:center;justify-content:center;
  font-size:.8rem;text-align:center;padding:4px;cursor:pointer;background:var(--warm-white)}
.seat.filled{border-style:solid;background:linear-gradient(180deg,var(--gold-soft),var(--gold));color:#3a2a00;font-weight:600}

.planner-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.planner-grid label{display:flex;flex-direction:column;gap:5px;font-size:.8rem;font-weight:700;color:var(--muted)}
.planner-grid textarea{font:inherit;font-size:.85rem;font-weight:400;border:1.5px solid var(--line);border-radius:10px;padding:8px;min-height:100px;resize:vertical}

.board-cols{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px}
.board-col{flex:none;width:220px;border:1.5px solid var(--line);border-radius:14px;padding:10px;background:var(--warm-white)}
.board-col h4{margin:0 0 8px;font-size:.9rem}
.board-note{background:#fff8dc;border:1px solid #f0e0a0;border-radius:8px;padding:6px 8px;font-size:.82rem;margin-bottom:6px;word-break:break-word}

/* ==========================================================================
   ATTENDANCE / HALL PASS / PRIZE STORE / BOARDS — four full My Class tabs,
   promoted out of the old cramped Tools-tab popups (see AttendanceTab.tsx,
   HallPassTab.tsx, PrizeStoreTab.tsx, BoardsTab.tsx). Each gets its own
   fresh namespace, all built from the same rdc-* card language (warm-white
   panels, var(--line) borders, var(--r-lg) radius, var(--shadow-sm)) so
   they read as one product with the rest of My Desk.
   ========================================================================== */

/* ---- Attendance ---- */
.att-panel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);
  padding:22px 24px;display:flex;flex-direction:column;gap:18px}
.att-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}
.att-bar__date{display:flex;align-items:center;gap:12px}
.att-bar__day{font-family:'Fraunces',serif;font-weight:500;font-size:1.05rem;color:var(--navy)}
.att-statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:10px}
.att-statcard{text-align:center;background:var(--cream-2);border:1px solid var(--line);border-radius:var(--r);padding:12px 10px}
.att-statcard__label{display:block;font-size:.68rem;font-weight:700;color:var(--muted-2);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
.att-statcard__value{font-family:'Fraunces',serif;font-size:1.5rem;font-weight:500;color:var(--navy)}
.att-statcard--present .att-statcard__value{color:#1f7a3d}
.att-statcard--late .att-statcard__value{color:var(--gold-deep)}
.att-statcard--absent .att-statcard__value{color:#c0392b}
.att-statcard--none .att-statcard__value{color:var(--muted-2)}
.att-quickrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.82rem;color:var(--muted);border-top:1px solid var(--line);padding-top:14px}
.att-quickbtn{border:1px solid var(--line);background:#fff;color:var(--navy);font:inherit;font-size:.78rem;font-weight:600;
  padding:6px 12px;border-radius:999px;cursor:pointer;transition:.15s}
.att-quickbtn:hover{border-color:var(--gold-soft);background:var(--cream-2)}
.att-list{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.att-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:#fff;padding:11px 16px}
.att-row:nth-child(even){background:var(--cream-2)}
.att-row__name{font-size:.92rem;font-weight:600;color:var(--ink)}
.att-row__name small{font-weight:400;color:var(--muted-2);margin-left:6px}
.att-row__marks{display:flex;gap:6px}
.att-mark{display:flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;color:var(--muted);
  font:inherit;font-size:.78rem;font-weight:600;padding:6px 11px;border-radius:999px;cursor:pointer;transition:.15s}
.att-mark:hover{border-color:var(--gold-soft)}
.att-mark--present.sel{background:#1f7a3d;border-color:#1f7a3d;color:#fff}
.att-mark--late.sel{background:linear-gradient(135deg,var(--gold),var(--gold-deep));border-color:transparent;color:#fff}
.att-mark--absent.sel{background:#c0392b;border-color:#c0392b;color:#fff}
@media (max-width:640px){.att-row{flex-direction:column;align-items:flex-start}}

/* ---- Hall Pass ---- */
.hp-panel{display:flex;flex-direction:column;gap:20px}
.hp-active,.hp-section{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:20px 22px}
.hp-active h3,.hp-section h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.08rem;color:var(--navy);margin:0 0 12px;display:flex;align-items:center;gap:8px}
.hp-active__count{background:var(--gold-deep);color:#fff;font-size:.72rem;font-weight:700;padding:1px 9px;border-radius:999px}
.hp-section__head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.hp-section__head h3{margin:0}
.hp-limit{display:flex;align-items:center;gap:8px}
.hp-limit label{font-size:.76rem;font-weight:600;color:var(--muted);white-space:nowrap}
.hp-limit .rd-sel{min-width:84px}
.hp-outlist{display:flex;flex-direction:column;gap:8px}
.hp-outcard{display:flex;align-items:center;gap:12px;background:#fff8ea;border:1px solid rgba(212,147,4,.3);border-radius:var(--r);padding:10px 14px}
.hp-outcard__icon{font-size:1.2rem;flex:none}
.hp-outcard__id{flex:1;display:flex;flex-direction:column}
.hp-outcard__id small{color:var(--muted);font-size:.78rem}
.hp-sendgrid{display:flex;flex-wrap:wrap;gap:8px}
.hp-send{position:relative}
.hp-send__name{border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:.85rem;font-weight:600;
  padding:8px 15px;border-radius:999px;cursor:pointer;transition:.15s}
.hp-send__name:hover{border-color:var(--gold-soft);background:var(--cream-2)}
.hp-send__name:disabled{opacity:.45;cursor:not-allowed}
.hp-send__name:disabled:hover{border-color:var(--line);background:#fff}
.hp-reasons{position:absolute;top:calc(100% + 6px);left:0;z-index:4;background:var(--warm-white);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column;gap:1px;min-width:150px}
.hp-reason{display:flex;align-items:center;gap:8px;border:0;background:none;text-align:left;font:inherit;font-size:.84rem;font-weight:600;
  color:var(--ink);padding:8px 10px;border-radius:8px;cursor:pointer}
.hp-reason:hover{background:var(--cream-2)}
.hp-log{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.hp-logrow{display:flex;align-items:center;gap:10px;background:#fff;padding:9px 14px;font-size:.85rem}
.hp-logrow:nth-child(even){background:var(--cream-2)}
.hp-logrow__icon{flex:none}
.hp-logrow__body{flex:1;color:var(--ink)}
.hp-logrow__meta{color:var(--muted-2);font-size:.78rem;white-space:nowrap}

/* ---- Prize Store ---- */
.ps-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.ps-col{display:flex;flex-direction:column;gap:20px;min-width:0}
.ps-panel{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:20px 22px}
.ps-panel h3{font-family:'Fraunces',serif;font-weight:500;font-size:1.08rem;color:var(--navy);margin:0 0 12px}
.ps-panel h3 small{font-family:'Inter',sans-serif;font-weight:400;font-size:.78rem;color:var(--muted-2)}
.ps-reason{display:flex;flex-direction:column;gap:5px;font-size:.82rem;font-weight:600;color:var(--navy);margin-bottom:14px}
.ps-reason small{font-weight:400;color:var(--muted-2)}
.ps-reason input{border:1px solid var(--line);border-radius:10px;padding:8px 11px;font:inherit;font-size:.86rem;background:#fff}
.ps-list{display:flex;flex-direction:column;gap:6px;max-height:420px;overflow-y:auto}
.ps-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.ps-row__name{flex:1;font-size:.88rem;font-weight:600;color:var(--ink)}
.ps-row__pts{font-weight:700;color:var(--gold-deep);font-size:.86rem}
.ps-bump{width:28px;height:28px;border-radius:50%;border:1px solid var(--line);background:#fff;font-weight:700;cursor:pointer;transition:.15s}
.ps-bump--up:hover{background:#1f7a3d;border-color:#1f7a3d;color:#fff}
.ps-bump--down:hover{background:#c0392b;border-color:#c0392b;color:#fff}
.ps-jar{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 0 10px}
.ps-jar__count{font-family:'Fraunces',serif;font-size:2.3rem;font-weight:500;color:var(--gold-deep)}
.ps-jar__marbles{font-size:.9rem;line-height:1.6;max-width:280px;text-align:center}
.ps-jar__controls{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.ps-prizes{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.ps-prize{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.ps-prize__name{flex:1;font-size:.88rem;font-weight:600;color:var(--ink)}
.ps-prize__cost{font-weight:700;color:var(--gold-deep);font-size:.84rem}
.ps-redeemgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;margin-top:12px}
.ps-redeembtn{display:flex;flex-direction:column;align-items:center;gap:3px;border:1px solid var(--line);background:#fff;
  border-radius:var(--r);padding:12px 10px;cursor:pointer;transition:.15s}
.ps-redeembtn:hover:not(:disabled){border-color:var(--gold-soft);background:var(--cream-2)}
.ps-redeembtn:disabled{opacity:.5;cursor:not-allowed}
.ps-redeembtn span{font-size:.78rem;color:var(--gold-deep);font-weight:600}
.ps-loglist{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.ps-logrow{display:flex;align-items:center;gap:10px;background:#fff;padding:8px 12px;font-size:.84rem}
.ps-logrow:nth-child(even){background:var(--cream-2)}
.ps-logrow__delta{width:34px;text-align:center;font-weight:700;border-radius:999px;padding:2px 0;font-size:.78rem}
.ps-logrow__delta.up{color:#1f7a3d}
.ps-logrow__delta.down{color:#c0392b}
.ps-logrow__body{flex:1;color:var(--ink)}
.ps-logrow__meta{color:var(--muted-2);font-size:.76rem;white-space:nowrap}
@media (max-width:860px){.ps-grid{grid-template-columns:1fr}}

/* ---- Boards (components/BoardsTab.tsx) -- TeacherStack-style Board
   Groups: named groups you create yourself, each holding boards, each
   board a freely-positioned canvas of live widgets (see .brdc-* for the
   canvas + editor chrome, .brdp-* for fullscreen Present mode's own bar). ---- */
.brdg-bar{display:flex;gap:12px;margin-bottom:18px;flex-wrap:wrap}
.brdg-list{display:flex;flex-direction:column;gap:16px}
.brdg-group{background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:16px 18px}
.brdg-group__head{display:flex;align-items:center;gap:10px}
.brdg-group__toggle{flex:1;min-width:0;display:flex;align-items:center;gap:10px;border:0;background:none;cursor:pointer;
  text-align:left;padding:2px 0;font:inherit}
.brdg-chev{display:inline-block;color:var(--muted-2);font-size:.8rem;transition:transform .15s;transform:rotate(-90deg)}
.brdg-chev.open{transform:rotate(0)}
.brdg-dot{width:9px;height:9px;border-radius:50%;flex:none}
.brdg-group__name{font-family:'Fraunces',serif;font-weight:500;font-size:1.08rem;color:var(--ink)}
.brdg-group__rename{font:inherit;font-family:'Fraunces',serif;font-size:1.08rem;border:1px solid var(--gold-soft);
  border-radius:8px;padding:3px 8px;background:#fff;min-width:0;flex:1}
.brdg-group__count{color:var(--muted-2);font-size:.84rem}
.brdg-group__actions{display:flex;align-items:center;gap:8px;flex:none}
.brdg-boards{display:flex;flex-wrap:wrap;gap:14px;margin-top:16px}
.brdg-boardcard{position:relative;width:150px;flex:none;border:1px solid var(--line);border-radius:var(--r);background:#fff;
  padding:14px 12px 12px;display:flex;flex-direction:column;align-items:flex-start;gap:8px;cursor:pointer;
  text-align:left;font:inherit;transition:.15s}
.brdg-boardcard:hover{border-color:var(--gold-soft);box-shadow:var(--shadow-sm)}
.brdg-boardcard__x{position:absolute;top:6px;right:8px;color:rgba(14,29,61,.35);font-size:.72rem;cursor:pointer;
  padding:2px;line-height:1}
.brdg-boardcard__x:hover{color:#c0392b}
.brdg-boardcard__thumb{width:100%;height:56px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-weight:700;font-size:1.1rem;opacity:.85}
.brdg-boardcard__name{font-weight:600;font-size:.88rem;color:var(--ink)}
.brdg-boardcard__meta{color:var(--muted-2);font-size:.76rem}
.brdg-addboard{flex:none;width:150px;height:126px;border:1.5px dashed var(--line);border-radius:var(--r);
  background:none;color:var(--muted);font:inherit;font-size:.84rem;font-weight:600;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;transition:.15s}
.brdg-addboard span{font-size:1.3rem}
.brdg-addboard:hover{border-color:var(--gold-soft);color:var(--gold-deep);background:var(--cream-2)}

/* ---- Board canvas + editor chrome (components/BoardCanvas.tsx,
   BoardEditorPage.tsx) -- opens full-page (not a small modal) when a
   board card is clicked, matching how TeacherStack does it: Add Widget /
   fullscreen / background controls live in the top-right corner over the
   board itself. Present mode (below) reuses .brdc-canvas/.brdc-widget for
   the board surface and just swaps this editor's topbar for its own dark
   nav bar. ---- */
.brdc-page{position:fixed;inset:0;z-index:200;background:#13213e;display:flex;flex-direction:column}
.brdc-topbar{position:absolute;top:14px;left:14px;right:14px;z-index:2;display:flex;align-items:center;
  justify-content:space-between;gap:10px}
.brdc-topbar__left,.brdc-topbar__right{display:flex;align-items:center;gap:8px}
.brdc-iconbtn{width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.25);
  background:rgba(20,30,55,.55);color:#fff;font-size:1.05rem;cursor:pointer;display:flex;align-items:center;
  justify-content:center;transition:.15s}
.brdc-iconbtn:hover{background:rgba(20,30,55,.85)}
.brdc-nameinput{font:inherit;font-family:'Fraunces',serif;font-size:1.15rem;color:#fff;border:0;
  background:rgba(20,30,55,.55);padding:8px 14px;border-radius:999px;min-width:0}
.brdc-nameinput:hover,.brdc-nameinput:focus{background:rgba(20,30,55,.85);outline:none}
.brdc-menuwrap{position:relative}
.brdc-bgpanel{position:absolute;top:calc(100% + 8px);right:0;z-index:6;width:220px;background:var(--warm-white);
  border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:12px}
.brdc-bgpanel p{margin:0 0 6px;font-size:.76rem;font-weight:700;color:var(--muted-2);text-transform:uppercase;
  letter-spacing:.03em}
.brdc-bgpanel p:not(:first-child){margin-top:12px}
.brdc-swatches{display:flex;flex-wrap:wrap;gap:8px}
.brdc-swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer}
.brdc-swatch.sel{border-color:var(--gold-deep)}
.brdc-picker{position:absolute;top:calc(100% + 8px);right:0;z-index:6;width:340px;max-height:70vh;overflow:auto;
  background:var(--warm-white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:10px 12px}
.brdc-picker__cat p{margin:10px 0 6px;font-size:.76rem;font-weight:700;color:var(--muted-2);text-transform:uppercase;
  letter-spacing:.03em}
.brdc-picker__cat:first-child p{margin-top:2px}
.brdc-picker__grid{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.brdc-picker__opt{display:flex;align-items:center;gap:8px;border:0;background:none;text-align:left;font:inherit;
  font-size:.84rem;font-weight:600;color:var(--ink);padding:8px 9px;border-radius:8px;cursor:pointer}
.brdc-picker__opt:hover{background:var(--cream-2)}

.brdc-canvas{position:relative;flex:1;overflow:auto}
.brdc-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.55);
  font-size:1.05rem;text-align:center;padding:0 30px}
.brdc-widget{position:absolute;background:rgba(255,255,255,.94);border-radius:var(--r);box-shadow:0 8px 24px rgba(0,0,0,.25);
  display:flex;flex-direction:column;overflow:hidden;min-width:120px;min-height:70px;
  border:2px solid transparent;transition:border-color .15s}
.brdc-widget.interactive{cursor:default}
.brdc-widget.interactive.selected{border-color:var(--gold)}
.brdc-widget__bar{flex:none;display:flex;align-items:center;justify-content:space-between;gap:6px;
  background:var(--cream-2);border-bottom:1px solid var(--line);padding:4px 4px 4px 10px;cursor:grab}
.brdc-widget__bar:active{cursor:grabbing}
/* One handle per edge + corner (n/s/e/w/ne/nw/se/sw) instead of just the
   bottom-right corner -- each is a thin strip/square positioned along its
   named edge; BoardCanvas.tsx's startResize() reads which edge(s) a
   handle's direction touches to decide whether x/y also shift as the
   widget grows (dragging the left edge, for instance, has to slide x
   left while growing w so the RIGHT edge stays put). touch-action:none
   so a resize drag on a touchscreen doesn't also scroll the canvas. */
.brdc-widget__resize{position:absolute;touch-action:none;z-index:3}
.brdc-widget__resize--n{top:-4px;left:10px;right:10px;height:8px}
.brdc-widget__resize--s{bottom:-4px;left:10px;right:10px;height:8px}
.brdc-widget__resize--e{right:-4px;top:10px;bottom:10px;width:8px}
.brdc-widget__resize--w{left:-4px;top:10px;bottom:10px;width:8px}
.brdc-widget__resize--ne{top:-5px;right:-5px;width:14px;height:14px}
.brdc-widget__resize--nw{top:-5px;left:-5px;width:14px;height:14px}
.brdc-widget__resize--se{bottom:-5px;right:-5px;width:14px;height:14px}
.brdc-widget__resize--sw{bottom:-5px;left:-5px;width:14px;height:14px}
.brdc-widget__label{font-size:.72rem;font-weight:700;color:var(--muted-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brdc-widget__x{flex:none;border:0;background:none;color:var(--muted-2);cursor:pointer;font-size:.76rem;padding:4px 6px;line-height:1}
.brdc-widget__x:hover{color:#c0392b}
/* container-type:size makes this box a CSS container-query context sized
   to its OWN resolved box (not the viewport) -- everything below that
   uses cqi/cqb (container query inline/block = this box's own width/
   height) scales up or down live as a rebbi drags the resize handle, so
   a Clock widget stretched to fill half the screen actually shows a big
   clock instead of the same small number floating in a lot of empty
   space. Safe here specifically because widget size comes from the
   canvas's w/h (a fixed % set by drag/resize), never from this body's
   own content -- no circular "size depends on content that depends on
   size" problem. */
.brdc-widget__body{container-type:size;flex:1;min-height:0;padding:10px 12px;overflow:auto;display:flex;flex-direction:column;gap:8px}

/* Widget internals (components/BoardWidgets.tsx) -- shared small pieces
   reused across most widget types. Text-input sizing here is deliberately
   more compact than the app's default .cls-formbody input (widgets are
   often quite small on the canvas), but border/radius/focus treatment
   still follows the same tokens as everywhere else, just at --r-sm
   instead of the ~12-13px the full-size forms use. */
.brdc-urlinput{width:100%;font:inherit;font-size:.84rem;border:1px solid var(--line);border-radius:var(--r-sm);
  padding:7px 10px;background:#fff;color:var(--ink);transition:border-color .15s}
.brdc-urlinput:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.brdc-fill,.brdc-timer{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0}
.brdc-fill--center{align-items:center;justify-content:center;text-align:center}
.brdc-fill--center>.rd-sel{width:100%;max-width:220px}
.brdc-big{font-family:'Fraunces',serif;font-weight:500;font-variant-numeric:tabular-nums;
  color:var(--brdc-accent, var(--navy));text-align:center;
  font-size:clamp(1.3rem, min(15cqi, 22cqb), 3.6rem)}
.brdc-big--sm{font-weight:600;font-size:clamp(.85rem, min(8cqi, 12cqb), 1.7rem)}
.brdc-row{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap}
.brdc-row .rd-sel{flex:1;min-width:0}
.brdc-minlabel{font-size:.76rem;color:var(--muted-2);display:flex;align-items:center;gap:6px;justify-content:center}
.brdc-minlabel input{width:48px;font:inherit;border:1px solid var(--line);border-radius:var(--r-sm);padding:2px 5px;
  transition:border-color .15s}
.brdc-minlabel input:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.brdc-text{display:flex;flex-direction:column;gap:6px;flex:1}
.brdc-text__title{border:0;border-bottom:1px solid var(--line);background:none;font:inherit;font-weight:600;
  font-size:.9rem;padding:2px 0 5px;color:var(--ink)}
.brdc-text__title:focus{outline:none;border-bottom-color:var(--gold)}
.brdc-text textarea{flex:1;border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 9px;font:inherit;
  font-size:.84rem;background:#fff;resize:vertical;transition:border-color .15s}
.brdc-text textarea:focus{outline:2px solid var(--gold-glow);border-color:var(--gold)}
.brdc-img{width:100%;flex:1;object-fit:cover;border-radius:var(--r-sm);min-height:60px}
.brdc-urlinput--edit{margin-top:auto}
.brdc-link{display:flex;flex-direction:column;gap:6px}
.brdc-link__go{font-weight:600;color:var(--navy);text-decoration:none}
.brdc-link__go:hover{text-decoration:underline}
.brdc-iframe{flex:1;width:100%;border:0;border-radius:var(--r-sm);min-height:100px}
.brdc-qr{width:min(100%, 60cqb);aspect-ratio:1;height:auto;max-width:240px}
.brdc-hint{font-size:.82rem;color:var(--muted-2);text-align:center}
.brdc-hint--err{color:#c0392b}
.brdc-noise{width:36px;height:120px;border:1px solid var(--line);border-radius:999px;overflow:hidden;
  display:flex;flex-direction:column;justify-content:flex-end;background:var(--cream-2)}
.brdc-noise__fill{width:100%;transition:height .1s}
.brdc-stoplight{width:clamp(46px, 22cqi, 100px);display:flex;flex-direction:column;gap:8px;align-items:center;margin:0 auto;
  background:#1c1c22;border-radius:var(--r);padding:10px;cursor:pointer}
.brdc-stoplight__b{width:100%;aspect-ratio:1;border-radius:50%;background:rgba(255,255,255,.12)}
.brdc-todo ul{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-direction:column;gap:4px;overflow:auto}
.brdc-todo li{display:flex;align-items:center;justify-content:space-between;gap:6px;font-size:.85rem}
.brdc-todo li.done label{text-decoration:line-through;color:var(--muted-2)}
.brdc-todo li label{display:flex;align-items:center;gap:6px}
.brdc-todo__x{color:var(--muted-2);cursor:pointer;font-size:.72rem}
.brdc-todo__x:hover{color:#c0392b}
.brdc-groups{display:flex;flex-direction:column;gap:4px;font-size:.8rem;overflow:auto}
.brdc-groups__g{background:var(--cream-2);border-radius:var(--r-sm);padding:5px 8px}
.brdc-die{width:clamp(28px, 12cqi, 64px);height:clamp(28px, 12cqi, 64px);border:1px solid var(--line);border-radius:var(--r-sm);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:clamp(.9rem, 5cqi, 1.7rem)}
.brdc-poll__opt{display:flex;flex-direction:column;gap:3px;border:1px solid var(--line);background:#fff;
  border-radius:var(--r-sm);padding:6px 9px;cursor:pointer;font:inherit;font-size:.82rem;text-align:left;transition:.15s}
.brdc-poll__opt:hover{border-color:var(--gold-soft);background:var(--cream-2)}
.brdc-poll__bar{display:block;height:5px;border-radius:999px;background:var(--cream-2);overflow:hidden}
.brdc-poll__bar span{display:block;height:100%;background:var(--gold-deep)}
.brdc-score__row{display:flex;align-items:center;gap:6px}
.brdc-score__row input{flex:1}
/* .brdc-stepbtn -- the small circular +/- counter controls (Scoreboard,
   Marble Jar) -- same round-icon-button language as .rdc-top__gear
   elsewhere in the app, just sized for a compact widget card. Distinct
   from .btn on purpose: these are single-glyph counters, not labeled
   actions, the same way .rdc-top__gear is a settings glyph, not a CTA. */
.brdc-stepbtn{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);background:#fff;
  color:var(--ink);font:inherit;font-weight:700;cursor:pointer;padding:0;display:flex;align-items:center;
  justify-content:center;transition:.15s}
.brdc-stepbtn:hover{border-color:var(--gold-soft);background:var(--cream-2);color:var(--gold-deep)}
.brdc-rollcall{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;overflow:auto;font-size:.85rem}
.brdc-rollcall li{display:flex;align-items:center;justify-content:space-between;gap:6px}
.brdc-rollcall button{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);background:#fff;
  cursor:pointer;transition:.15s}
.brdc-rollcall button:hover:not(.on):not(.on-red){border-color:var(--gold-soft);background:var(--cream-2)}
.brdc-rollcall button.on{background:#1f7a3d;color:#fff;border-color:#1f7a3d}
.brdc-rollcall button.on-red{background:#c0392b;color:#fff;border-color:#c0392b}
.brdc-jar{width:clamp(40px, 20cqi, 100px);height:clamp(56px, 30cqb, 160px);border:2px solid var(--line);
  border-radius:0 0 var(--r) var(--r);overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;
  background:#fff;margin:0 auto}
.brdc-jar__fill{width:100%;background:var(--gold-deep);transition:height .2s}

/* ---- Frum-specific widgets (lib/zmanim.ts, components/BoardWidgets.tsx's
   Zmanim Clock / Luach / Sefiras HaOmer / Yom Tov Countdown / Ask the
   Sefer / Nikud Text Box / Kriah Line-Tracker). ---- */
.brdc-nikud{font-family:'Frank Ruhl Libre',serif}
.brdc-zman{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0}
.brdc-zman .rd-sel__trigger{font-size:.78rem;padding:6px 9px}
.brdc-zman__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px;overflow:auto;
  font-size:clamp(.74rem, min(3cqi, 4.5cqb), 1.05rem)}
.brdc-zman__list li{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 7px;border-radius:6px}
.brdc-zman__list li span:last-child{font-variant-numeric:tabular-nums;font-weight:600;color:var(--navy)}
.brdc-zman__list li.next{background:var(--cream-2)}
.brdc-zman__list li.next span:last-child{color:var(--gold-deep)}
.brdc-sefer{display:flex;flex-direction:column;gap:6px;overflow:auto}
.brdc-sefer__ref{font-weight:700;color:var(--gold-deep);font-size:.86rem;margin:0}
.brdc-kriah{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0}
.brdc-kriah__text{font-family:'Frank Ruhl Libre',serif;line-height:2;flex:1;overflow:auto;margin:0;
  font-size:clamp(1rem, min(6cqi, 13cqb), 2.6rem)}
.brdc-kriah__text span{padding:2px 3px;border-radius:4px}
.brdc-kriah__text span.on{background:var(--gold-deep);color:#fff}

/* ---- Widget settings sidebar (components/BoardWidgetSidebar.tsx) --
   opens on the RIGHT edge of the board when a widget is selected (click
   anywhere on it that isn't the drag bar or remove-x). Deliberately a
   fixed panel on the side, not a popover floating on top of the widget
   card, per explicit direction. Reuses .brdc-swatches/.brdc-swatch (the
   same circular color-dot pattern the background picker already uses)
   for both the widget's card-background color and its "big content"
   accent color, plus a native <input type=color> escape hatch for
   anything more specific than the RebbisDesk palette offers. */
.brdside{position:fixed;top:0;right:0;bottom:0;width:280px;z-index:5;background:var(--warm-white);
  border-left:1px solid var(--line);box-shadow:-16px 0 40px -20px rgba(0,0,0,.35);
  display:flex;flex-direction:column;gap:18px;padding:18px 16px;overflow-y:auto}
.brdside__head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.brdside__title{font-family:'Fraunces',serif;font-size:1.05rem;color:var(--ink)}
.brdside__section p{margin:0 0 8px;font-size:.72rem;font-weight:700;color:var(--muted-2);
  text-transform:uppercase;letter-spacing:.04em}
.brdside-reset{border:0;background:none;color:var(--muted-2);font:inherit;font-size:.76rem;
  text-decoration:underline;cursor:pointer;padding:6px 0 0;display:block}
.brdside-reset:hover{color:var(--gold-deep)}
.brdside__options{display:flex;flex-direction:column;gap:10px}
.brdside-row{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:.86rem;
  font-weight:600;color:var(--navy)}
.brdside-row>.rd-sel{flex:none;width:150px}
.brdside-check{display:flex;align-items:center;gap:8px;font-size:.86rem;font-weight:600;color:var(--navy);cursor:pointer}
.brdside__remove{margin-top:auto;align-self:flex-start;color:#c0392b;border-color:rgba(192,57,43,.3)}
.brdside__remove:hover{border-color:#c0392b;background:#fdf6f6}
@media (max-width:900px){.brdside{width:88vw;max-width:320px}}

/* ---- Present mode (components/BoardPresent.tsx) -- fullscreen, own dark
   nav bar so it reads clearly on a classroom projector; the board itself
   below the bar reuses .brdc-canvas/.brdc-widget non-interactively. ---- */
.brdp{position:fixed;inset:0;z-index:200;background:#0b1226;color:#fff;display:flex;flex-direction:column}
.brdp__bar{flex:none;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;
  background:rgba(255,255,255,.04);border-bottom:1px solid rgba(255,255,255,.1)}
.brdp__group{font-family:'Fraunces',serif;font-size:1.1rem}
.brdp__nav{display:flex;align-items:center;gap:10px}
.brdp__navbtn{width:34px;height:34px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:none;
  color:#fff;font-size:1.2rem;cursor:pointer}
.brdp__navbtn:disabled{opacity:.3;cursor:not-allowed}
.brdp__count{font-size:.85rem;color:rgba(255,255,255,.7);min-width:44px;text-align:center}
.brdp__exit{border:1px solid rgba(255,255,255,.25);background:none;color:#fff;font:inherit;font-size:.85rem;
  font-weight:600;padding:8px 14px;border-radius:999px;cursor:pointer}
.brdp__exit:hover{background:rgba(255,255,255,.12)}
.brdp__empty{flex:1;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.6);font-size:1.2rem}
.brdp .brdc-canvas{flex:1}
