/* Geist, stored on this site so pages don't wait for Google Fonts (SIL Open Font License) */
@font-face{font-family:"Geist";font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/geist-latin.woff2) format("woff2")}
/* ============================================================================
   shell.css — the shared site header, menus, footer and mouse circle.
   Used by every page on sideqnaim.com (home, Books and every app), together
   with js/shell.js. Change the look here once and it changes everywhere.

   Everything is prefixed "sn-" so it can't clash with an app's own styles,
   and sizes are in px so an app's own font size can't change the header.
   ============================================================================ */

:root{
  --sn-paper:var(--paper-light,#EAEAE6);--sn-ink:#0A0A0A;--sn-soft:#6B6B66;--sn-line:#CBCBC5;--sn-card:#E0E0DB;
  --sn-hover:#DCE9F7;--sn-hover-ink:#0A0A0A;--sn-hl:#FFD21F;
  --sn-font:"Geist","Helvetica Neue",Helvetica,Arial,sans-serif;
  --sn-ease:cubic-bezier(.2,.7,.1,1);
  --sn-g:clamp(20px,3.2vw,44px);
  --sn-head-h:64px;
  --sn-top:clamp(32px,4vw,56px);   /* space between the header (or a page's alert strip) and the first content */
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--sn-paper:var(--paper-dark,#17233A);--sn-ink:#EEF0F4;--sn-soft:#9AA4B8;--sn-line:#2E3C58;--sn-card:#1F2D48;--sn-hover:#26365A;--sn-hover-ink:#EEF0F4}
}
:root[data-theme="dark"]{--sn-paper:var(--paper-dark,#17233A);--sn-ink:#EEF0F4;--sn-soft:#9AA4B8;--sn-line:#2E3C58;--sn-card:#1F2D48;--sn-hover:#26365A;--sn-hover-ink:#EEF0F4}
@media (max-width:900px){:root{--sn-g:clamp(16px,4vw,32px)}}
@media (max-width:480px){:root{--sn-g:16px}}

site-header{display:contents}
site-footer{display:block}

/* ---------- Reset: keep each app's own styles out of the header ---------- */
.sn-head,.sn-head *,.sn-foot,.sn-foot *{all:revert;box-sizing:border-box}
.sn-head [hidden],.sn-foot [hidden]{display:none!important}

/* ---------- Header bar ---------- */
.sn-head{
  position:sticky;top:env(safe-area-inset-top,0px);z-index:35;display:block;margin:0;padding:0;border:0;
  background:color-mix(in srgb,var(--sn-paper) 80%,transparent);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  color:var(--sn-ink);font-family:var(--sn-font);font-size:15.2px;font-weight:400;line-height:1.5;
  letter-spacing:-.005em;text-align:left;text-transform:none;-webkit-font-smoothing:antialiased;
  transition:transform .45s var(--sn-ease),background .4s;
}
.sn-head.sn-hide{transform:translateY(calc(-100% - env(safe-area-inset-top,0px)))}
.sn-head :where(a){color:inherit;text-decoration:none;font:inherit;letter-spacing:inherit}
.sn-head :where(button){font:inherit;color:inherit;letter-spacing:inherit;background:none;border:0;padding:0;margin:0;cursor:pointer;-webkit-appearance:none;appearance:none}
.sn-head :focus-visible,.sn-foot :focus-visible{outline:2px solid var(--sn-ink);outline-offset:4px;border-radius:2px}
.sn-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;height:64px;max-width:1440px;margin:0 auto;padding:0 var(--sn-g)}

.sn-name{justify-self:start;display:flex;align-items:center;gap:8.8px;font-weight:600;white-space:nowrap}
.sn-logo{display:grid;grid-template-columns:repeat(6,3px);gap:1.5px;flex:none}
.sn-logo i{display:block;width:3px;height:3px;border-radius:50%;background:currentColor;transition:opacity .45s var(--sn-ease),transform .45s var(--sn-ease)}
.sn-logo i.o{opacity:.18}
.sn-name:hover .sn-logo i.o,.sn-name:focus-visible .sn-logo i.o{opacity:0;transform:scale(.4)}
.sn-clock{justify-self:center;color:var(--sn-soft);font-variant-numeric:tabular-nums;white-space:nowrap}

.sn-right{justify-self:end;display:flex;align-items:center;gap:clamp(14.4px,2.2vw,28.8px)}
.sn-nav{display:flex;align-items:center;gap:inherit;margin:0;padding:0}
.sn-ul{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size .35s var(--sn-ease),transform .3s var(--sn-ease)}
.sn-ul:hover,.sn-ul:focus-visible,.sn-ul[aria-current="page"],.sn-apps.sn-here > .sn-ul{background-size:100% 1px}

/* Theme switch: a half-filled circle */
.sn-theme{display:block;width:18.4px;height:18.4px;flex:none;border-radius:50%;border:1.5px solid currentColor;background:linear-gradient(90deg,currentColor 50%,transparent 50%)}

/* ---------- Apps menu (desktop) ---------- */
.sn-apps{position:relative;display:inline-flex}
.sn-apps-btn::after{content:"\25BE";margin-left:5px;font-size:.72em;opacity:.65}
.sn-apps-menu{position:absolute;top:calc(100% + 11px);right:0;z-index:45;display:grid;gap:2.4px;min-width:236px;margin:0;padding:7.2px;
  background:var(--sn-paper);border:1px solid var(--sn-line);border-radius:12px;box-shadow:0 18px 44px rgba(10,10,10,.16);text-align:left}
.sn-apps-menu::before{content:"";position:absolute;left:0;right:0;top:-12px;height:12px}
.sn-apps-menu a{display:grid;gap:1px;padding:8.8px 10.4px;border-radius:8px;white-space:normal}
.sn-apps-menu a b{font-weight:550;letter-spacing:-.01em}
.sn-apps-menu a span{color:var(--sn-soft);font-size:13.1px;line-height:1.3}
.sn-apps-menu a:hover,.sn-apps-menu a:focus-visible{background:var(--sn-hover);color:var(--sn-hover-ink)}
.sn-apps-menu a[aria-current="page"]{background:var(--sn-card)}
.sn-apps-menu a[aria-current="page"] b::after,.sn-m-menu a[aria-current="page"] b::after,.sn-m-menu a[aria-current="page"] .sn-dot{content:"";display:inline-block;width:6px;height:6px;margin-left:7px;border-radius:50%;background:var(--sn-hl);vertical-align:middle;position:relative;top:-1px}
@media (hover:hover) and (pointer:fine){
  .sn-apps:hover .sn-apps-menu,.sn-apps:focus-within .sn-apps-menu{display:grid!important}
  .sn-nav > a:hover,.sn-apps:hover > button{transform:translateY(-1px)}
}

/* ---------- Phone menu ---------- */
.sn-burger{display:none!important;position:relative;width:38.4px;height:38.4px;flex:none}
.sn-burger span{position:absolute;left:8.8px;right:8.8px;height:2px;background:currentColor;transition:transform .3s var(--sn-ease),top .3s var(--sn-ease)}
.sn-burger span:first-child{top:16px}
.sn-burger span:last-child{top:22.7px}
.sn-burger.sn-open span:first-child{top:19.4px;transform:rotate(45deg)}
.sn-burger.sn-open span:last-child{top:19.4px;transform:rotate(-45deg)}
.sn-m-menu{position:absolute;top:100%;left:0;right:0;margin:0;padding:14.4px var(--sn-g) 20.8px;max-height:calc(100dvh - 64px);overflow-y:auto;overscroll-behavior:contain;
  background:var(--sn-paper);border-top:1px solid var(--sn-line);border-bottom:1px solid var(--sn-line);box-shadow:0 24px 44px rgba(10,10,10,.14);animation:sn-in .25s var(--sn-ease)}
@keyframes sn-in{from{opacity:0;transform:translateY(-6px)}}
.sn-m-clock{margin:0 0 6.4px;color:var(--sn-soft);font-size:14.4px;font-variant-numeric:tabular-nums}
.sn-m-menu nav{display:grid}
.sn-m-menu nav > a{display:flex;align-items:center;gap:16px;min-height:48px;padding:12.8px 0;font-size:20px;font-weight:500;letter-spacing:-.02em;border-bottom:1px solid var(--sn-line)}
.sn-m-label{margin:17.6px 0 1.6px;color:var(--sn-soft);font-size:13.6px;text-transform:uppercase;letter-spacing:.12em}
.sn-m-menu nav > a.sn-m-app{flex-direction:column;align-items:flex-start;justify-content:center;gap:1.6px;min-height:54.4px;font-size:16.8px;font-weight:450}
.sn-m-app b{font-weight:550}
.sn-m-app span{color:var(--sn-soft);font-size:14px;font-weight:400}
.sn-m-menu nav > a:hover{background:var(--sn-hover);color:var(--sn-hover-ink)}
.sn-m-menu nav > a[aria-current="page"]{font-weight:600}

/* ---------- Footer (Books and the apps; the home page keeps its own) ---------- */
.sn-foot{display:block;margin:0;padding:0 0 calc(32px + env(safe-area-inset-bottom,0px));color:var(--sn-soft);font-family:var(--sn-font);font-size:14.7px;line-height:1.5;letter-spacing:-.005em;-webkit-font-smoothing:antialiased;background:transparent}
.sn-foot :where(a){color:var(--sn-ink);text-decoration:none}
.sn-foot-in{max-width:1440px;margin:56px auto 0;padding:0 var(--sn-g)}
.sn-foot-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 24px;padding-top:20px;border-top:1px solid var(--sn-line)}
.sn-foot p{margin:0}
.sn-foot nav{display:flex;flex-wrap:wrap;gap:8px 24px}
@media (max-width:620px){.sn-foot-row{display:grid;grid-template-columns:1fr}}

/* ---------- Responsive ---------- */
@media (min-width:761px) and (max-width:1000px){
  /* tablet: the full menu needs the room, so the clock steps aside (it's in the phone menu too) */
  .sn-bar{grid-template-columns:auto 1fr}
  .sn-clock{display:none!important}
}
@media (max-width:760px){
  .sn-bar{height:59.2px}
  .sn-right{gap:12.8px}
  .sn-nav{display:none!important}
  .sn-burger{display:block!important}
  .sn-m-menu{max-height:calc(100dvh - 59.2px)}
}
@media (max-width:640px){
  .sn-bar{grid-template-columns:auto 1fr}
  .sn-clock{display:none!important}
  .sn-name{gap:6.7px;font-size:14.4px}
  .sn-right{gap:10.4px}
}
@media (max-width:480px){
  .sn-bar{height:56px}
  .sn-right{gap:8.8px}
  .sn-theme{width:16.8px;height:16.8px}
  .sn-m-menu{max-height:calc(100dvh - 56px)}
}
/* Touch screens: give the small header and footer controls a full 44px tap area.
   They look exactly the same; only the invisible area you can tap grows. */
@media (pointer:coarse){
  .sn-name,.sn-theme,.sn-foot nav a{position:relative}
  .sn-name::after,.sn-theme::after,.sn-burger::after,.sn-foot nav a::after{content:"";position:absolute;left:50%;top:50%;width:100%;min-width:44px;height:44px;transform:translate(-50%,-50%)}
  .sn-foot nav{row-gap:22px}
}
@media (pointer:coarse) and (max-width:760px){
  .sn-right{gap:18px}   /* room so the theme switch and menu button tap areas don't overlap */
}

/* ---------- Mouse circle (mouse and trackpad only) ---------- */
/* The plain dot is drawn normally. Only the bigger circle over links uses the
   colour-flip (difference) effect, because that effect makes the browser redraw
   the whole screen on every frame while anything on the page is moving. */
.sn-cursor{all:initial;position:fixed;left:0;top:0;z-index:2147483000;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--sn-ink);box-shadow:0 0 0 1.5px var(--sn-paper);pointer-events:none;display:grid;place-items:center;opacity:0;
  transition:width .35s var(--sn-ease),height .35s var(--sn-ease),margin .35s var(--sn-ease),opacity .25s,background .25s}
.sn-cursor span{all:initial;font-family:var(--sn-font);font-size:12.8px;font-weight:500;color:#000;opacity:0;transition:opacity .2s;pointer-events:none}
.sn-cursor.sn-on{opacity:1}
.sn-cursor.sn-link{width:40px;height:40px;margin:-20px 0 0 -20px;background:#fff;box-shadow:none;mix-blend-mode:difference}
.sn-cursor.sn-label{width:84px;height:84px;margin:-42px 0 0 -42px;mix-blend-mode:normal;background:var(--sn-ink);box-shadow:none}
.sn-cursor.sn-label span{opacity:1;color:var(--sn-paper)}
.sn-cursor.sn-ring{width:56px;height:56px;margin:-28px 0 0 -28px;background:transparent;box-shadow:inset 0 0 0 1.5px #fff;mix-blend-mode:difference}
@media (hover:hover) and (pointer:fine){
  html.sn-cursor-on,html.sn-cursor-on *,html.sn-cursor-on *::before,html.sn-cursor-on *::after{cursor:none!important}
  html.sn-cursor-on :is(input:not([type=button],[type=submit],[type=reset],[type=checkbox],[type=radio],[type=range],[type=color],[type=file],[type=image]),textarea,[contenteditable=""],[contenteditable="true"]){cursor:text!important}
}

@media (prefers-reduced-motion:reduce){
  .sn-head,.sn-head *,.sn-cursor{transition:none!important;animation:none!important}
}
@media print{site-header,.sn-head,site-footer,.sn-foot,.sn-cursor{display:none!important}}

/* ---------- Shared page frame ----------
   Add class="sn-frame" to a page's main content wrapper and its left and right
   edges line up with the header on every page (and the gutters match on phones). */
.sn-frame.sn-frame{box-sizing:border-box;width:100%;max-width:1440px;margin-left:auto;margin-right:auto;padding-left:var(--sn-g);padding-right:var(--sn-g)}

/* ---------- Brand colours: one set for every page ----------
   Main buttons: navy with white text (light) / yellow with navy text (dark).
   Accent buttons and selected chips: yellow with navy text. */
:root{
  --brand-navy:#17233A;--brand-yellow:#FFD21F;--brand-amber:#F2B600;
  --btn-bg:#17233A;--btn-ink:#FFFFFF;--btn-bg-hover:#FFD21F;--btn-ink-hover:#17233A;
  --accent-bg:#FFD21F;--accent-ink:#17233A;--accent-bg-hover:#F2B600;
  --brand-text:#17233A;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--btn-bg:#FFD21F;--btn-ink:#17233A;--btn-bg-hover:#F2B600;--btn-ink-hover:#17233A;--brand-text:#FFD21F}
}
:root[data-theme="dark"]{--btn-bg:#FFD21F;--btn-ink:#17233A;--btn-bg-hover:#F2B600;--btn-ink-hover:#17233A;--brand-text:#FFD21F}
