spry-theme-living-sky.css 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*
  2. * Spry CSS theme — "Living Sky"
  3. * --------------------------------
  4. * A medieval almanac of the heavens: parchment pages, deep navy ink,
  5. * gold-leaf highlights, and a faint dusting of stars. Light-only.
  6. * Pressed toward the illuminated manuscript: drop caps, fleuron rules,
  7. * marginalia, night-sky panels, gilded controls, a frontispiece hero.
  8. *
  9. * Activation:
  10. * - real sites: <html data-theme="living-sky">
  11. * - demo page: hidden radio <input id="spry-theme-living-sky">
  12. * - load AFTER spry.css
  13. *
  14. * Self-contained: local-if-available font stacks and inline data: URIs
  15. * only — no JavaScript, no @import, no external files.
  16. */
  17. /* Light-only theme. ------------------------------------------------------ */
  18. [data-theme="living-sky"],
  19. html:has(#spry-theme-living-sky:checked) {
  20. color-scheme: light; /* parchment by day; dark mode is ignored */
  21. /* ---- Palette ---- */
  22. --spry-bg: #f2ebda; /* parchment */
  23. --spry-bg-alt: #efe6cd; /* deeper parchment bands, card headers */
  24. --spry-bg-inset: #eae0c6; /* wells: code blocks, disabled fills */
  25. --spry-surface: #f9f4e6; /* cards, popovers, inputs */
  26. --spry-surface-hover: #f4eddb;
  27. --spry-fg: #1f2533; /* ink — 12:1 on parchment, the bar */
  28. --spry-fg-muted: #5c6172; /* ink-soft — ≥4.5:1 on every parchment tone */
  29. --spry-border: #d9cdaa; /* gold-tan hairlines */
  30. --spry-border-strong: #b9a97c; /* hover borders, kbd */
  31. --spry-accent: #003078; /* deep navy: focus, primaries */
  32. --spry-accent-hover: #002254;
  33. --spry-accent-fg: #f4efe2; /* parchment text on navy (10.7:1) */
  34. --spry-danger: #8a2f2f; /* rubrication red */
  35. --spry-success: #44623a; /* manuscript green */
  36. --spry-warning: #6b510e; /* gold-ink darkened for AA on soft tints */
  37. --spry-info: #2c4a9e; /* lapis */
  38. --spry-link: var(--spry-info); /* lapis links, gold-ink hover, as the site */
  39. --spry-link-hover: var(--spry-gold-ink);
  40. --spry-backdrop: rgb(6 12 30 / 0.6); /* night-sky scrim */
  41. --spry-focus-ring: 0 0 0 3px color-mix(in srgb, #a8801f 45%, transparent);
  42. /* Theme-internal gold leaf (decorative; --spry-gold-ink for gold text) */
  43. --spry-gold: #a8801f;
  44. --spry-gold-ink: #7a5d12; /* gold text on parchment — 5.2:1 */
  45. --spry-gold-soft: #cdb377;
  46. --spry-night: #16224e; /* night-sky panels: dialogs, submenus */
  47. --spry-night-fg: #ece7d8; /* parchment ink on night — 12.4:1 */
  48. --spry-night-muted: #b9c2df; /* muted ink on night — 8.7:1 */
  49. --spry-ink-line: #4a5a80; /* navy ruling line for control borders */
  50. /* ---- Typography ---- */
  51. --spry-font: "EB Garamond", Georgia, "Times New Roman", serif;
  52. --spry-font-heading: "Cinzel", "EB Garamond", Georgia, serif;
  53. --spry-font-mono: ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace;
  54. --spry-font-size: 1.125rem;
  55. --spry-line-height: 1.65;
  56. --spry-heading-weight: 600;
  57. /* ---- Shape, depth, motion ---- */
  58. --spry-radius: 0.25rem; /* near-square, like ruled folio plates */
  59. --spry-radius-sm: 0.125rem;
  60. --spry-radius-lg: 0.375rem;
  61. --spry-radius-pill: 999px;
  62. --spry-border-width: 1px;
  63. --spry-shadow: 0 1px 2px rgb(31 37 51 / 0.06), 0 2px 6px rgb(31 37 51 / 0.07);
  64. --spry-shadow-lg: 0 24px 48px -16px rgb(16 22 46 / 0.32);
  65. --spry-glass: none;
  66. --spry-transition: 160ms ease;
  67. --spry-dialog-duration: 200ms;
  68. --spry-dialog-ease: cubic-bezier(0.2, 0.9, 0.3, 1);
  69. --spry-dialog-in: translateY(0.6rem) scale(0.98);
  70. /* ---- Controls: parchment fields ruled in navy, gold focus ring ---- */
  71. --spry-control-bg: var(--spry-surface);
  72. --spry-control-fg: var(--spry-fg);
  73. --spry-control-border: var(--spry-ink-line);
  74. --spry-control-radius: var(--spry-radius-sm);
  75. --spry-control-padding-x: 0.65rem;
  76. --spry-control-padding-y: 0.45rem;
  77. /* ---- Buttons (default: parchment ruled in navy; primary below) ---- */
  78. --spry-btn-bg: var(--spry-surface);
  79. --spry-btn-fg: var(--spry-fg);
  80. --spry-btn-border: var(--spry-ink-line);
  81. --spry-btn-bg-hover: var(--spry-surface-hover);
  82. --spry-btn-bg-active: var(--spry-bg-inset);
  83. /* ---- Cards / tables / progress / popovers ---- */
  84. --spry-card-bg: var(--spry-surface);
  85. --spry-card-border: #d9cdaa;
  86. --spry-card-padding: 1.25rem;
  87. --spry-card-shadow: var(--spry-shadow);
  88. --spry-table-header-bg: var(--spry-bg-alt);
  89. --spry-table-hover: #f0e7cf;
  90. --spry-progress-bg: #e6d9b8; /* defined tan trough, bordered below */
  91. --spry-progress-fg: var(--spry-gold); /* gilded measure */
  92. --spry-popover-bg: var(--spry-night); /* night panels below */
  93. --spry-popover-border: var(--spry-gold);
  94. --spry-popover-shadow: var(--spry-shadow-lg);
  95. /* ---- Inline imagery (tiny, self-typed) ---- */
  96. /* faint gold star-speck over the parchment (kept below cramp threshold) */
  97. --spry-stars: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cg fill='%23a8801f' opacity='.08'%3E%3Cpath d='M24 22l1.2 3.2 3.2 1.2-3.2 1.2-1.2 3.2-1.2-3.2-3.2-1.2 3.2-1.2z'/%3E%3Cpath d='M118 44l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1z'/%3E%3Cpath d='M66 116l1.1 2.8 2.8 1.1-2.8 1.1-1.1 2.8-1.1-2.8-2.8-1.1 2.8-1.1z'/%3E%3Cpath d='M138 126l.9 2.3 2.3.9-2.3.9-.9 2.3-.9-2.3-2.3-.9 2.3-.9z'/%3E%3Ccircle cx='98' cy='74' r='1.1'/%3E%3Ccircle cx='36' cy='144' r='.9'/%3E%3Ccircle cx='148' cy='16' r='.8'/%3E%3C/g%3E%3C/svg%3E");
  98. /* parchment grain */
  99. --spry-parchment-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
  100. /* brighter gold speckle for night-sky panels (dimmed to protect text) */
  101. --spry-stars-night: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cg fill='%23d3ac52' opacity='.22'%3E%3Cpath d='M28 24l1.1 3 3 1.1-3 1.1-1.1 3-1.1-3-3-1.1 3-1.1z'/%3E%3Cpath d='M96 58l.9 2.5 2.5.9-2.5.9-.9 2.5-.9-2.5-2.5-.9 2.5-.9z'/%3E%3Cpath d='M52 104l1 2.7 2.7 1-2.7 1-1 2.7-1-2.7-2.7-1 2.7-1z'/%3E%3Ccircle cx='118' cy='96' r='1'/%3E%3Ccircle cx='70' cy='12' r='.9'/%3E%3Ccircle cx='12' cy='78' r='.9'/%3E%3C/g%3E%3C/svg%3E");
  102. /* gold diamond-fleuron cluster for ornamental rules */
  103. --spry-fleuron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='136' height='12'%3E%3Cg fill='%23a8801f'%3E%3Cpath d='M68 1.2L73.4 6 68 10.8 62.6 6z'/%3E%3Cpath d='M34 3.4L37.2 6 34 8.6 30.8 6z'/%3E%3Cpath d='M102 3.4L105.2 6 102 8.6 98.8 6z'/%3E%3Ccircle cx='20' cy='6' r='1.2'/%3E%3Ccircle cx='116' cy='6' r='1.2'/%3E%3C/g%3E%3C/svg%3E");
  104. /* the full ornamental rule: hairlines flanking the fleuron */
  105. --spry-divider-bg:
  106. linear-gradient(var(--spry-gold-soft), var(--spry-gold-soft)) left center / calc(50% - 4.25rem) 1px no-repeat,
  107. linear-gradient(var(--spry-gold-soft), var(--spry-gold-soft)) right center / calc(50% - 4.25rem) 1px no-repeat,
  108. var(--spry-fleuron) center / 8.5rem 0.75rem no-repeat;
  109. /* ---- Structural signatures (nested, scoped to this theme only) ---- */
  110. /* Gold-leaf rule across the top of the page + star-speckled parchment */
  111. & body {
  112. border-top: 3px solid var(--spry-gold);
  113. background-image: var(--spry-stars), var(--spry-parchment-noise);
  114. }
  115. /* Gilded text selection; placeholder kept at full ink-soft for AA */
  116. & ::selection { background: color-mix(in srgb, var(--spry-gold) 28%, transparent); }
  117. & ::placeholder { color: var(--spry-fg-muted); opacity: 1; }
  118. /* Illuminated initial: navy letter on a faint gold halo, gold hairline box */
  119. & p.lead::first-letter,
  120. & article > p:first-of-type::first-letter {
  121. float: left;
  122. font-family: var(--spry-font-heading);
  123. font-size: 3.3em; line-height: 0.82;
  124. padding: 0.08em 0.14em 0.12em 0.1em; margin: 0.05em 0.14em 0 0;
  125. color: var(--spry-accent);
  126. background: radial-gradient(circle at 32% 28%, rgb(168 128 31 / 0.3), rgb(168 128 31 / 0.08) 62%, transparent 78%);
  127. border: 1px solid color-mix(in srgb, var(--spry-gold) 60%, transparent);
  128. border-radius: var(--spry-radius-sm);
  129. }
  130. /* Headings: Cinzel small caps below h2; h1 gets a short gold flourish */
  131. & :is(h3, h4, h5, .card-title) { font-variant: small-caps; letter-spacing: 0.04em; }
  132. & h1::after {
  133. content: ""; display: block; width: 3rem; height: 2px;
  134. margin-top: 0.45rem;
  135. background: linear-gradient(90deg, var(--spry-gold), transparent);
  136. }
  137. /* Ornamental rule: fleuron divider with flanking gold hairlines */
  138. & hr {
  139. border: 0; height: 0.75rem; margin-block: 2.4rem;
  140. background: var(--spry-divider-bg);
  141. }
  142. /* Blockquote as marginalia: gold rule, faint gilding, small-caps scribe */
  143. & blockquote {
  144. border-inline-start: 3px solid var(--spry-gold);
  145. background: color-mix(in srgb, var(--spry-gold) 5%, transparent);
  146. padding: 0.35rem 1.1rem;
  147. font-style: italic;
  148. }
  149. & blockquote :is(footer, cite) {
  150. font-style: normal; font-variant: small-caps;
  151. letter-spacing: 0.08em; font-size: 0.92em;
  152. color: var(--spry-gold-ink);
  153. }
  154. /* Engraved controls: small-caps, tracked out (base look via :where) */
  155. & :where(button, input[type="submit"], input[type="reset"], input[type="button"], .btn) {
  156. font-variant: small-caps;
  157. letter-spacing: 0.05em;
  158. }
  159. /* Primary buttons: navy field with a gold-leaf rim */
  160. & .btn-primary { border-color: var(--spry-gold); }
  161. /* Cards: hairline frame with a gold-soft top edge, like the site's
  162. plates; the footer carries the fleuron rule as its divider */
  163. & .card {
  164. box-shadow: inset 0 2px 0 var(--spry-gold-soft), var(--spry-card-shadow);
  165. }
  166. & .card-footer {
  167. position: relative;
  168. border-top: 1px solid transparent;
  169. &::before {
  170. content: ""; position: absolute; inset: -1px 0 auto 0;
  171. height: 0.85rem; pointer-events: none;
  172. background: var(--spry-divider-bg);
  173. }
  174. }
  175. /* Tables ruled like astronomical tables: navy header band in small caps
  176. with a gold rule, gold-tan zebra, mono numerals */
  177. & thead th {
  178. background: var(--spry-accent); color: var(--spry-accent-fg);
  179. text-transform: none; font-variant: small-caps;
  180. letter-spacing: 0.12em;
  181. border-bottom: 2px solid var(--spry-gold);
  182. }
  183. & tbody tr:nth-child(even),
  184. & .table-striped tbody tr:nth-child(even) {
  185. background: color-mix(in srgb, var(--spry-gold) 9%, transparent);
  186. }
  187. & .num { font-family: var(--spry-font-mono); font-size: 0.88em; }
  188. /* Dialogs, drawers & popovers: night-sky panels — gold-rimmed,
  189. star-speckled, parchment-light text. Like the site's sky band, the
  190. whole ink & control system flips with the field, so every child —
  191. buttons, inputs, links, badges, menus — inherits readable night
  192. pairs; the parchment .dialog-body inset un-flips them again. */
  193. & dialog,
  194. & [popover],
  195. & :is(.drawer-left, .drawer-right) {
  196. background-color: var(--spry-night);
  197. background-image: var(--spry-stars-night);
  198. border-color: var(--spry-gold);
  199. color: var(--spry-night-fg);
  200. --spry-fg: var(--spry-night-fg);
  201. --spry-heading-color: var(--spry-night-fg);
  202. --spry-fg-muted: var(--spry-night-muted);
  203. --spry-bg-alt: rgb(244 239 226 / 0.08);
  204. --spry-bg-inset: rgb(10 16 36 / 0.65);
  205. --spry-btn-bg: rgb(244 239 226 / 0.12); --spry-btn-fg: var(--spry-night-fg);
  206. --spry-btn-border: var(--spry-gold-soft);
  207. --spry-btn-bg-hover: rgb(244 239 226 / 0.2); --spry-btn-bg-active: rgb(244 239 226 / 0.26);
  208. --spry-control-bg: #0e1731; --spry-control-fg: var(--spry-night-fg);
  209. --spry-control-border: var(--spry-gold-soft);
  210. --spry-accent: #d3ac52; --spry-accent-hover: #c19b3f;
  211. --spry-accent-fg: #211a0e; --spry-accent-soft: rgb(211 172 82 / 0.16);
  212. --spry-link: var(--spry-gold-soft); --spry-link-hover: #ecd9a0;
  213. --spry-danger: #e5a4a4; --spry-danger-soft: rgb(229 164 164 / 0.16);
  214. --spry-success: #b3cda6; --spry-success-soft: rgb(179 205 166 / 0.16);
  215. --spry-warning: #e6cd93; --spry-warning-soft: rgb(230 205 147 / 0.18);
  216. --spry-info: #b3c4ef; --spry-info-soft: rgb(179 196 239 / 0.16);
  217. & :focus-visible { outline-color: var(--spry-gold); }
  218. & .dialog-titlebar {
  219. background: none;
  220. border-bottom: 1px solid color-mix(in srgb, var(--spry-gold) 45%, transparent);
  221. & .dialog-title { color: #e7cf8e; font-variant: small-caps; letter-spacing: 0.06em; }
  222. & .dialog-close { color: var(--spry-gold-soft); }
  223. & .dialog-close:hover { background: rgb(168 128 31 / 0.22); color: #f6ecc8; }
  224. }
  225. /* the parchment folio inset: un-flip the system for this subtree */
  226. & .dialog-body {
  227. margin: 0.6rem;
  228. background: var(--spry-surface);
  229. border: 1px solid color-mix(in srgb, var(--spry-gold) 35%, transparent);
  230. border-radius: var(--spry-radius);
  231. color: #1f2533;
  232. --spry-fg: #1f2533; --spry-fg-muted: #5c6172;
  233. --spry-bg-alt: #efe6cd; --spry-bg-inset: #eae0c6;
  234. --spry-btn-bg: var(--spry-surface); --spry-btn-fg: #1f2533;
  235. --spry-btn-border: var(--spry-ink-line);
  236. --spry-btn-bg-hover: var(--spry-surface-hover);
  237. --spry-btn-bg-active: var(--spry-bg-inset);
  238. --spry-control-bg: var(--spry-surface); --spry-control-fg: #1f2533;
  239. --spry-control-border: var(--spry-ink-line);
  240. --spry-accent: #003078; --spry-accent-hover: #002254;
  241. --spry-accent-fg: #f4efe2; --spry-accent-soft: rgb(0 48 120 / 0.12);
  242. --spry-link: #2c4a9e; --spry-link-hover: var(--spry-gold-ink);
  243. --spry-danger: #8a2f2f; --spry-danger-soft: rgb(138 47 47 / 0.1);
  244. --spry-success: #44623a; --spry-success-soft: rgb(68 98 58 / 0.1);
  245. --spry-warning: #6b510e; --spry-warning-soft: rgb(107 81 14 / 0.14);
  246. --spry-info: #2c4a9e; --spry-info-soft: rgb(44 74 158 / 0.1);
  247. & :focus-visible { outline-color: var(--spry-accent); }
  248. }
  249. & .dialog-footer {
  250. background: none;
  251. border-top-color: color-mix(in srgb, var(--spry-gold) 30%, transparent);
  252. }
  253. /* alerts riding the night field sit in ivory glass with bright ink */
  254. & .alert:not(.dialog-body *) {
  255. background: rgb(244 239 226 / 0.07);
  256. border-color: color-mix(in srgb, var(--spry-gold) 30%, transparent);
  257. }
  258. }
  259. /* Dropdown submenus are night panels too: parchment links, gilded
  260. hover. The static submenus inside .menu stay on parchment with ink. */
  261. & .submenu {
  262. background-color: var(--spry-night);
  263. background-image: var(--spry-stars-night);
  264. border-color: var(--spry-gold);
  265. }
  266. & .submenu a { color: var(--spry-night-fg); }
  267. & .submenu a:hover,
  268. & .submenu a.active { background: rgb(168 128 31 / 0.24); color: #f6ecc8; }
  269. & .menu .has-submenu .submenu { background: none; border: 0; }
  270. & .menu .has-submenu .submenu a { color: var(--spry-fg); }
  271. & .menu .has-submenu .submenu a:hover,
  272. & .menu .has-submenu .submenu a.active { background: var(--spry-accent-soft); color: var(--spry-accent); }
  273. /* Switch as sun-and-moon dial: navy firmament, gilded sun knob; the
  274. checked track deepens to navy speckled with stars */
  275. & .switch .track {
  276. background: var(--spry-night);
  277. box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--spry-gold) 45%, transparent);
  278. }
  279. & .switch .track::after {
  280. background: radial-gradient(circle at 32% 32%, #f4e2ac, var(--spry-gold) 72%);
  281. box-shadow: 0 0 0 2px rgb(249 244 230 / 0.22), 0 0 0.45rem rgb(168 128 31 / 0.45);
  282. }
  283. & .switch input:checked + .track { background-color: var(--spry-accent); background-image: var(--spry-stars-night); }
  284. /* Progress: a gilded measure in a defined tan trough with an ink
  285. hairline border, and subtle diagonal hatching */
  286. /* Progress: a gilded measure — solid gold leaf with a lit top edge,
  287. no stripes. Indeterminate is a shaft of light travelling the trough,
  288. like sun moving across parchment. */
  289. & progress { border: 1px solid var(--spry-ink-line); }
  290. & progress::-webkit-progress-value {
  291. background: linear-gradient(180deg, #e8c56a 0%, #d3ac52 45%, #a8801f 100%);
  292. box-shadow: inset 0 1px 0 rgb(255 244 214 / 0.55);
  293. }
  294. & progress::-moz-progress-bar {
  295. background: linear-gradient(180deg, #e8c56a 0%, #d3ac52 45%, #a8801f 100%);
  296. box-shadow: inset 0 1px 0 rgb(255 244 214 / 0.55);
  297. }
  298. & progress:indeterminate {
  299. background:
  300. linear-gradient(90deg,
  301. rgb(211 172 82 / 0) 0%,
  302. rgb(211 172 82 / 0.4) 18%,
  303. #ecc46a 38% 62%,
  304. rgb(211 172 82 / 0.4) 82%,
  305. rgb(211 172 82 / 0) 100%) 0 50% / 38% 100% no-repeat,
  306. #e6d9b8;
  307. animation: sky-glide 2.4s linear infinite;
  308. }
  309. /* Tabs: gold-ink accent swaps through core's own active rule, so the
  310. underline gilds itself without fighting the nth-of-type chain */
  311. & .tab-list {
  312. --spry-accent: var(--spry-gold-ink);
  313. & label { font-variant: small-caps; letter-spacing: 0.04em; }
  314. }
  315. /* Spinner: a turning gilded star */
  316. & .spinner {
  317. border-color: var(--spry-gold-soft);
  318. border-top-color: var(--spry-gold);
  319. }
  320. /* Brand: Cinzel small-caps wordmark with a gold sigil mark */
  321. & .topbar-brand {
  322. font-family: var(--spry-font-heading); font-variant: small-caps;
  323. letter-spacing: 0.06em;
  324. }
  325. & .topbar-brand::before { content: "✦"; color: var(--spry-gold); margin-right: 0.4rem; }
  326. /* Nav links: gold underline grows in on hover; the word gilds too */
  327. & .nav a {
  328. font-variant: small-caps; letter-spacing: 0.06em;
  329. background-image: linear-gradient(var(--spry-gold), var(--spry-gold));
  330. background-repeat: no-repeat;
  331. background-position: 0 100%;
  332. background-size: 0% 1px;
  333. transition: background-size var(--spry-transition), color var(--spry-transition);
  334. }
  335. & .nav a:hover { background-size: 100% 1px; color: var(--spry-gold-ink); }
  336. & .nav a.active {
  337. background: var(--spry-accent);
  338. color: #f4efe2;
  339. }
  340. /* Breadcrumb: small-caps wayfinding; the current crumb is full ink */
  341. & .breadcrumb a { font-variant: small-caps; letter-spacing: 0.05em; }
  342. & .breadcrumb [aria-current] { color: var(--spry-fg); }
  343. /* Hero: an illuminated frontispiece — parchment band under a gold
  344. top rule, gilded Cinzel kicker, drop-cap-ready via p.lead */
  345. & .hero {
  346. background:
  347. radial-gradient(60rem 24rem at 50% -8rem, color-mix(in srgb, var(--spry-gold) 9%, transparent), transparent 70%),
  348. var(--spry-bg-alt);
  349. border-block: 1px solid var(--spry-border-strong);
  350. border-top: 3px solid var(--spry-gold);
  351. }
  352. & .hero-eyebrow {
  353. display: inline-flex; align-items: center; gap: 0.9rem;
  354. font-family: var(--spry-font-heading); letter-spacing: 0.28em;
  355. color: var(--spry-gold-ink);
  356. }
  357. & .hero-eyebrow::before,
  358. & .hero-eyebrow::after { content: ""; width: 2.5rem; height: 1px; background: var(--spry-gold-soft); }
  359. & .hero-title { font-family: var(--spry-font-heading); }
  360. /* Avatars: night-sky medallions with gold initials (10:1) */
  361. & .avatar {
  362. background: var(--spry-night); color: #e7cf8e;
  363. font-family: var(--spry-font-heading);
  364. box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--spry-gold) 55%, transparent);
  365. }
  366. /* OTP: parchment wells with navy ink; gold focus ring via control vars */
  367. & .otp input { background: var(--spry-bg-inset); color: var(--spry-accent); }
  368. /* Pagination: small-caps folios; the current leaf is navy with
  369. parchment text (core) and a gold rim */
  370. & .pagination a,
  371. & .pagination span { font-variant: small-caps; letter-spacing: 0.04em; }
  372. & .pagination [aria-current="page"] { border-color: var(--spry-gold); }
  373. }
  374. /* The shaft of light: a 38%-wide glow crossing the trough once per loop */
  375. @keyframes sky-glide {
  376. /* 38%-wide layer: p% maps to p x 62% of the track — slide in from fully
  377. off-left (-161%) and exit fully right (+161%) */
  378. from { background-position: -161% 50%, 0 0; }
  379. to { background-position: 161% 50%, 0 0; }
  380. }