spry-theme-formal.css 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. /*!
  2. * Spry CSS theme — "Formal" — wedding-stationery suite, second fidelity
  3. * pass against the real wedding site: plum header/footer bands, mauve nav
  4. * band and mauve expanders (never white), berry buttons in thick pale-berry
  5. * mats, frosted panels with the double pressed shadow, script form labels,
  6. * ivory paper, serif ink. Light-only. Activated with <html data-theme=
  7. * "formal"> or the demo radio #spry-theme-formal. Load after spry.css.
  8. * No JavaScript or imports; stacks fall back to Georgia / cursive.
  9. */
  10. [data-theme="formal"],
  11. html:has(#spry-theme-formal:checked) {
  12. color-scheme: light;
  13. /* ---- Palette (the core derives soft tints automatically) ---- */
  14. --spry-bg: #fdfbf7; /* ivory paper */
  15. --spry-bg-alt: #f7f2ec; /* stationery bands, wells, titlebars */
  16. --spry-bg-inset: #f3ece2; /* disabled fills, code blocks */
  17. --spry-surface: #ffffff; /* popovers, menus, tables: kept opaque */
  18. --spry-surface-hover: #faf6ef;
  19. --spry-fg: #3f3a3c; /* ink */
  20. --spry-fg-muted: #7d7379;
  21. --spry-border: #e6dcd2; /* hairlines */
  22. --spry-border-strong: #b47e9a; /* berry mat hsl(329 26% 60%) */
  23. --spry-accent: #844d6a; /* berry — hsl(329 26% 41%), site buttons */
  24. --spry-accent-hover: #915574; /* site hover lightens to hsl(329 26% 45%) */
  25. --spry-accent-fg: #ffffff;
  26. --spry-danger: #a6304c; /* deep rose */
  27. --spry-success: #5e713d; /* sage green — hsl(82 30% 34%) */
  28. --spry-warning: #8f6824; /* antique gold */
  29. --spry-info: #6f5a7c; /* plum */
  30. --spry-link: var(--spry-success); /* sage links, as on the site */
  31. --spry-link-hover: #49582f;
  32. --spry-backdrop: rgb(63 58 60 / 0.5);
  33. --formal-gold: #b08d3e; /* gilded hairlines, fleurons, frames */
  34. --formal-plum: #854e6a; /* site header / footer plum */
  35. --formal-mauve: #80628f; /* hsl(280 19% 47%): nav band, expander edge */
  36. --formal-mauve-bar: #c3b3cb; /* hsl(280 19% 75%): expander summary bar */
  37. --formal-mauve-pale: #e7e1ea; /* hsl(280 19% 90%): expander body */
  38. --formal-berry-pale: #ecdfe6; /* hsl(329 26% 90%): secondary fill */
  39. --formal-berry-mat: #d0afc0; /* hsl(329 26% 75%): secondary mat */
  40. /* ---- Typography ---- */
  41. --spry-font: "Cormorant Garamond", "EB Garamond", Georgia, serif;
  42. --spry-font-heading: var(--spry-font);
  43. --spry-font-display: "Snell Roundhand", "Apple Chancery", "Segoe Script",
  44. "Brush Script MT", cursive; /* script: h1, hero, brand, form labels */
  45. --spry-font-mono: ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace;
  46. --spry-font-size: 1.125rem; /* generous: the site set p/form text to 1.2em */
  47. --spry-line-height: 1.65;
  48. --spry-heading-weight: 600;
  49. /* ---- Shape, depth, motion ---- */
  50. --spry-radius: 0.75rem; /* 12px — the site's only radius */
  51. --spry-radius-sm: 0.75rem; /* 12px here too: chips, menu items */
  52. --spry-radius-lg: 0.75rem;
  53. --spry-radius-pill: 999px;
  54. --spry-border-width: 1px;
  55. --spry-shadow: 0 1px 2px rgb(63 58 60 / 0.05), 0 6px 18px -6px rgb(63 58 60 / 0.07);
  56. --spry-shadow-lg: 0 24px 48px -16px rgb(63 58 60 / 0.24), 0 6px 16px rgb(63 58 60 / 0.08);
  57. --spry-glass: none;
  58. --spry-transition: 150ms ease;
  59. --spry-dialog-duration: 200ms;
  60. --spry-dialog-ease: cubic-bezier(0.2, 0.9, 0.3, 1);
  61. --spry-dialog-in: translateY(0.6rem) scale(0.98);
  62. --spry-focus-ring: 0 0 0 3px var(--spry-surface), 0 0 0 4px var(--spry-border),
  63. 0 0 0 6px color-mix(in srgb, var(--spry-accent) 30%, transparent);
  64. /* ---- Controls: transparent wells, berry hairline (site inputs) ---- */
  65. --spry-control-bg: transparent;
  66. --spry-control-fg: var(--spry-fg);
  67. --spry-control-border: var(--spry-border-strong);
  68. --spry-control-radius: 0.75rem; /* 12px */
  69. --spry-control-padding-x: 1.35rem; /* buttons: core adds .15rem = 24px */
  70. --spry-control-padding-y: 0.5rem; /* 8px, the site's control padding */
  71. /* ---- Buttons: the site's berry seals (color rides the vars) ---- */
  72. --spry-btn-bg: var(--spry-accent);
  73. --spry-btn-fg: #ffffff;
  74. --spry-btn-border: var(--spry-border-strong);
  75. --spry-btn-bg-hover: var(--spry-accent-hover);
  76. --spry-btn-bg-active: #74445d; /* hsl(329 26% 36%), pressed darker */
  77. /* ---- Cards: frosted panel on a 6px white mat (site form/#response) ---- */
  78. --spry-card-bg: rgb(255 255 255 / 0.5);
  79. --spry-card-border: #ffffff;
  80. --spry-card-padding: 2em; /* the site's 2em panel padding */
  81. --spry-card-shadow: 0 0 5px rgb(0 0 0 / 0.2), inset 0 0 5px rgb(0 0 0 / 0.2);
  82. --spry-table-header-bg: var(--formal-berry-pale);
  83. --spry-table-hover: color-mix(in srgb, var(--spry-accent) 5%, var(--spry-surface));
  84. --spry-progress-bg: var(--spry-bg-alt);
  85. --spry-progress-fg: var(--spry-accent);
  86. --spry-popover-bg: var(--spry-surface);
  87. --spry-popover-border: var(--spry-border);
  88. --spry-popover-shadow: var(--spry-shadow-lg);
  89. /* ---- Structural polish (looks the variables can't reach) ---- */
  90. /* Letterpress headings: small-caps, letter-spaced, debossed ink.
  91. h1 is the script display moment — swashes in berry. */
  92. & :is(h2, h3, h4, h5, .card-title) {
  93. font-variant-caps: all-small-caps; letter-spacing: 0.08em;
  94. text-shadow: 0 1px 0 #fff;
  95. }
  96. & h2 { font-size: 2em; } /* the site's h2 scale */
  97. & h1 {
  98. font-family: var(--spry-font-display); font-weight: 400;
  99. font-size: clamp(2.3rem, 1.7rem + 2.4vw, 3.3rem); line-height: 1.25;
  100. color: var(--spry-accent); text-shadow: 0 1px 0 #fff;
  101. }
  102. & h6 { letter-spacing: 0.12em; text-shadow: 0 1px 0 #fff; }
  103. /* A card that opens on its title is a hero moment — script it */
  104. & .card > .card-title:first-child {
  105. font-family: var(--spry-font-display); font-variant-caps: normal;
  106. font-weight: 400; font-size: 1.5rem; color: var(--spry-accent); letter-spacing: 0;
  107. }
  108. & .card-subtitle { font-style: italic; }
  109. /* Form labels in script, as the site lettered its form text */
  110. & :is(.label, legend) {
  111. font-family: var(--spry-font-display); font-weight: 600;
  112. font-size: 1.15em; letter-spacing: 0;
  113. }
  114. /* Dividers as menu-card ornaments: hairline with a gold fleuron */
  115. & hr {
  116. position: relative; overflow: visible; border: 0;
  117. border-top: 1px solid color-mix(in srgb, var(--spry-border-strong) 55%, transparent);
  118. margin-block: 2.4rem;
  119. &::after {
  120. content: "❧"; position: absolute; left: 50%; top: 0;
  121. translate: -50% -55%; color: var(--formal-gold);
  122. font-size: 1.15rem; line-height: 1;
  123. }
  124. }
  125. /* Panels & generous spacing: thick stationery mats, 15px+ gutters */
  126. & .card { border-width: 6px; }
  127. & fieldset { padding: 1.25rem 1.5rem; }
  128. & :is(.popover-menu, .submenu) { padding: 0.6rem; }
  129. /* Topbar as the site header: plum band, white text, generous padding,
  130. pressed-in shade along the bottom edge */
  131. & .topbar {
  132. background: var(--formal-plum); color: #fff; border-bottom: 0;
  133. padding-block: clamp(1.1rem, 2.5vw, 2.5rem); /* up to the site's 40px */
  134. box-shadow: inset 0 -10px 6px rgb(0 0 0 / 0.2);
  135. }
  136. & footer.topbar { box-shadow: inset 0 10px 6px rgb(0 0 0 / 0.2); }
  137. /* Brand: script names in white on flanking gilt rules */
  138. & .topbar-brand {
  139. display: inline-flex; align-items: center; gap: 0.65rem;
  140. font-family: var(--spry-font-display); font-weight: 400;
  141. font-size: 1.6rem; letter-spacing: 0; color: #fff;
  142. &::before,
  143. &::after {
  144. content: ""; width: 1.4rem; height: 1px;
  145. background: color-mix(in srgb, var(--formal-gold) 70%, transparent);
  146. transition: width var(--spry-transition);
  147. }
  148. &:hover { color: #fff; }
  149. &:hover::before,
  150. &:hover::after { width: 2.2rem; background: var(--formal-gold); }
  151. }
  152. /* Nav links on paper: engraved small-caps, berry underline on hover */
  153. & .nav a {
  154. font-variant-caps: all-small-caps; font-weight: 500;
  155. letter-spacing: 0.14em; border-radius: 0;
  156. }
  157. & .nav a:hover,
  158. & .nav a.active {
  159. background: transparent; color: var(--spry-accent);
  160. text-decoration: underline; text-decoration-thickness: 1.5px;
  161. text-underline-offset: 0.4em;
  162. }
  163. & .nav a:hover { text-decoration-color: var(--spry-accent); }
  164. & .nav a.active { text-decoration-color: var(--formal-gold); }
  165. /* Nav in the topbar = the site's mauve band with white links */
  166. & .topbar .nav {
  167. background: var(--formal-mauve); border-radius: var(--spry-radius);
  168. padding: 0.35rem 0.65rem; box-shadow: inset 0 -4px 3px rgb(0 0 0 / 0.2);
  169. }
  170. & .topbar .nav a,
  171. & .topbar .nav a:hover,
  172. & .topbar .nav a.active {
  173. background: transparent; color: #fff; text-decoration-color: #fff;
  174. }
  175. /* Menus as menu cards: flat items, gold course marker on hover */
  176. & :is(.menu, .submenu) a { letter-spacing: 0.05em; border-radius: 0; }
  177. & .menu a:hover,
  178. & .menu a.active {
  179. background: color-mix(in srgb, var(--spry-accent) 7%, var(--spry-surface));
  180. box-shadow: inset 2px 0 0 var(--formal-gold);
  181. }
  182. & .submenu a:hover {
  183. background: color-mix(in srgb, var(--spry-accent) 10%, var(--spry-surface));
  184. color: var(--spry-accent);
  185. }
  186. /* Breadcrumbs: legible gold diamond separators */
  187. & .breadcrumb li + li::before {
  188. content: "◆"; font-size: 0.65em; vertical-align: 0.22em; color: var(--formal-gold);
  189. }
  190. /* Buttons: the site's berry seals — thick pale-berry mat border and the
  191. double (outer + inset) pressed shadow. Fill, text, hover and the
  192. 8px 24px padding ride the vars; :where keeps this light enough that
  193. core .btn-sm/.btn-lg sizing at (0,2,0) still wins. */
  194. & :where(.btn, button, input[type="submit"], input[type="reset"], input[type="button"]):not(.btn-link):not(.btn-ghost):not(.dialog-close):not(.popover-menu *) {
  195. border-width: 6px; font-weight: 700;
  196. box-shadow: 0 0 5px rgb(0 0 0 / 0.2), inset 0 0 5px rgb(0 0 0 / 0.2);
  197. }
  198. & :is(.btn-primary, .btn-danger) { border-color: var(--spry-border-strong); }
  199. /* Outline button = the site's secondary: pale berry, deeper mat */
  200. & .btn-outline {
  201. background: var(--formal-berry-pale); border-color: var(--formal-berry-mat);
  202. color: #444444;
  203. &:hover {
  204. background: #f4ecf0; border-color: var(--spry-border-strong); color: #444444;
  205. }
  206. }
  207. /* Inputs/selects/textareas: transparent wells, 2px berry hairline,
  208. 8px padding — exactly the site's recipe */
  209. & :where(input[type="text"], input[type="email"], input[type="password"],
  210. input[type="number"], input[type="search"], input[type="tel"],
  211. input[type="url"], input[type="date"], input[type="time"],
  212. input[type="datetime-local"], input[type="month"], input[type="week"],
  213. input[type="color"], select, textarea, .input) {
  214. border-width: 2px;
  215. padding: 8px;
  216. }
  217. /* Checkboxes & radios: 20px marks, dark-berry accent (site) */
  218. & :where(input[type="checkbox"], input[type="radio"]) {
  219. width: 1.25em; height: 1.25em; accent-color: #60394d;
  220. }
  221. & :is(input[type="checkbox"], input[type="radio"]):focus-visible {
  222. outline: 2px solid var(--spry-accent); outline-offset: 2px;
  223. }
  224. /* Choice labels as the site's check-labels: berry frame, 12px radius,
  225. 8px padding; hover deepens the frame */
  226. & .choice {
  227. border: 2px solid var(--spry-border-strong); border-radius: var(--spry-radius);
  228. padding: 8px;
  229. &:hover { border-color: var(--spry-accent); }
  230. }
  231. & .choices { gap: 12px; }
  232. /* Selects: swap the native arrow for a small berry serif caret */
  233. & select:not([size]):not([multiple]) {
  234. appearance: none; padding-right: 2.1rem;
  235. background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1.5 1.5 6 6 10.5 1.5' fill='none' stroke='%23844d6a' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  236. background-repeat: no-repeat; background-position: right 0.75rem center;
  237. }
  238. /* Expanders as the site's details/summary — MAUVE, not white: pale-mauve
  239. body, deeper mauve summary bar, plum rule under the open summary */
  240. & details {
  241. background: var(--formal-mauve-pale); border: 2px solid var(--formal-mauve);
  242. border-radius: var(--spry-radius); margin-bottom: 18px; overflow: hidden;
  243. }
  244. & details + details { margin-top: 0; }
  245. & details > summary {
  246. background: var(--formal-mauve-bar); color: var(--spry-fg);
  247. font-family: var(--spry-font); font-size: 1.2em; font-weight: 700;
  248. padding: 8px 18px; border-radius: 0;
  249. &:hover { background: #bba9c4; }
  250. }
  251. & details > summary::before { border-color: #5d4766; }
  252. & details[open] > summary { border-bottom: 2px solid var(--formal-mauve); }
  253. & details > :not(summary):not(:last-child) { padding: 18px 18px 0; }
  254. & details > :not(summary):last-child { padding: 18px; }
  255. & .expander-group > details { margin-bottom: 0; }
  256. & .expander-group > details + details { margin-top: -2px; }
  257. /* Progress: an envelope window — ivory track in a thin gilt frame,
  258. berry fill with a paper highlight (engine rules kept separate) */
  259. & progress {
  260. background: var(--spry-bg-alt);
  261. box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--formal-gold) 55%, transparent);
  262. }
  263. & progress::-webkit-progress-bar {
  264. background: var(--spry-bg-alt);
  265. box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--formal-gold) 55%, transparent);
  266. }
  267. & progress::-webkit-progress-value {
  268. background: var(--spry-progress-fg);
  269. box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.3);
  270. }
  271. & progress::-moz-progress-bar {
  272. background: var(--spry-progress-fg);
  273. box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.3);
  274. }
  275. /* Indeterminate: theme-explicit so it can never be shadowed */
  276. & progress:indeterminate {
  277. --spry-pulse-cap: 0.4em;
  278. background:
  279. radial-gradient(var(--spry-pulse-cap) var(--spry-pulse-cap) at var(--spry-pulse-cap) 50%, var(--spry-accent) 97%, transparent 100%) 0% 50% / 25% 100% no-repeat,
  280. radial-gradient(var(--spry-pulse-cap) var(--spry-pulse-cap) at calc(100% - var(--spry-pulse-cap)) 50%, var(--spry-accent) 97%, transparent 100%) 0% 50% / 25% 100% no-repeat,
  281. linear-gradient(90deg, transparent 0 var(--spry-pulse-cap), var(--spry-accent) var(--spry-pulse-cap) calc(100% - var(--spry-pulse-cap)), transparent calc(100% - var(--spry-pulse-cap))) 0% 50% / 25% 100% no-repeat,
  282. var(--spry-bg-alt);
  283. animation: spry-pulse 1.4s linear infinite alternate;
  284. }
  285. /* Menu-style tables: no grid box, pale-berry header band, hairline courses */
  286. & table { border: 0; }
  287. & thead th {
  288. color: var(--spry-accent); font-size: 0.85em; text-transform: none;
  289. font-variant-caps: all-small-caps; letter-spacing: 0.14em;
  290. border-bottom: 2px solid var(--spry-border-strong);
  291. }
  292. & caption { font-style: italic; color: #717171; }
  293. /* Alerts as enclosure notes; danger = the site's solid .form-errors */
  294. & .alert {
  295. border-inline-start: 3px solid var(--spry-accent);
  296. & p:first-child { font-style: italic; }
  297. &.alert-success { border-inline-start-color: var(--spry-success); }
  298. &.alert-warning { border-inline-start-color: var(--spry-warning); color: #7a5719; }
  299. &.alert-info { border-inline-start-color: var(--spry-info); }
  300. }
  301. & .alert.alert-danger {
  302. background: #b21f1f; border: 0; color: #fff; font-weight: 700;
  303. & p { font-style: normal; }
  304. }
  305. /* Badges as place-card chips: ivory, berry text, berry pill edge */
  306. & .badge:not(.badge-danger):not(.badge-success):not(.badge-warning):not(.badge-info):not(.badge-muted) {
  307. background: var(--spry-bg-alt); color: var(--spry-accent);
  308. border: var(--spry-border-width) solid var(--spry-accent); letter-spacing: 0.03em;
  309. }
  310. /* Dialogs, as the suite's invite modal: borderless white card, 16px radius,
  311. one large soft shadow, roomy padding — and a blurred scrim behind it.
  312. Anchored popovers keep a clear backdrop (no blur on menus). */
  313. & dialog,
  314. & [popover]:has(> .dialog-titlebar, > .dialog-body, > .dialog-footer) {
  315. border-radius: 1rem;
  316. box-shadow: 0 15px 50px rgb(63 58 60 / 0.35);
  317. }
  318. & dialog { width: min(95vw, 42rem); }
  319. & dialog::backdrop,
  320. & [popover]:not(.popover-anchor):not(.drawer-left):not(.drawer-right)::backdrop {
  321. backdrop-filter: blur(2px);
  322. }
  323. & .dialog-body { padding: 1.5rem 2rem; }
  324. /* Titlebar: the suite's plum-tinted gradient header with a berry rule */
  325. & .dialog-titlebar {
  326. background: linear-gradient(135deg, rgb(133 78 106 / 0.16) 0%, rgb(133 78 106 / 0.07) 100%);
  327. border-bottom: 2px solid color-mix(in srgb, var(--spry-accent) 55%, transparent);
  328. padding: 1.1rem 1.75rem;
  329. & .dialog-title {
  330. font-family: var(--spry-font-heading); font-weight: 600;
  331. font-size: 1.35rem; color: #854e6a; letter-spacing: 0.01em;
  332. }
  333. & .dialog-close {
  334. border: 0; border-radius: var(--spry-radius-sm);
  335. background: rgb(133 78 106 / 0.12); color: #6d3e55; font-size: 1.3rem;
  336. &:hover { background: rgb(133 78 106 / 0.24); color: #53303f; }
  337. }
  338. }
  339. /* Switch: slim gold track, ivory knob */
  340. & .switch .track {
  341. width: 2.3rem; height: 1.15rem;
  342. background: color-mix(in srgb, var(--formal-gold) 28%, var(--spry-surface));
  343. box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--formal-gold) 50%, transparent);
  344. &::after {
  345. top: 0.15rem; left: 0.15rem; width: 0.85rem; height: 0.85rem;
  346. background: var(--spry-bg); box-shadow: 0 1px 2px rgb(63 58 60 / 0.3);
  347. }
  348. }
  349. & .switch input:checked + .track {
  350. background: var(--formal-gold);
  351. &::after { translate: 1.15rem 0; }
  352. }
  353. /* ---- Invitation-suite components (section 20) ---- */
  354. /* Hero as the site header band: plum, white centered text, 40px padding,
  355. pressed-in shade along the bottom */
  356. & .hero {
  357. background: var(--formal-plum); color: #fff; border-block: 0;
  358. padding-block: 2.5rem;
  359. box-shadow: inset 0 -10px 6px rgb(0 0 0 / 0.2);
  360. }
  361. & .hero-eyebrow {
  362. display: inline-flex; align-items: center; gap: 0.6rem;
  363. font-weight: 600; letter-spacing: 0.28em; text-transform: none;
  364. font-variant-caps: all-small-caps; color: #e4eed3;
  365. &::before,
  366. &::after { content: "◆"; color: var(--formal-gold); font-size: 0.45em; }
  367. }
  368. & .hero-title {
  369. font-family: var(--spry-font-display); font-weight: 400;
  370. color: #fff; letter-spacing: 0; text-shadow: 0 1px 0 rgb(0 0 0 / 0.25);
  371. }
  372. & .hero-sub { color: #e4eed3; font-style: italic; }
  373. /* Avatars: ivory cameos — berry initials in a paper mat, gilt on hover */
  374. & .avatar {
  375. background: var(--spry-bg-alt); color: var(--spry-accent);
  376. border: 1px solid color-mix(in srgb, var(--spry-accent) 30%, var(--spry-border));
  377. box-shadow: 0 0 0 2px var(--spry-surface), 0 0 0 3px var(--spry-border);
  378. }
  379. & .avatar:hover {
  380. box-shadow: 0 0 0 2px var(--spry-surface), 0 0 0 3px var(--formal-gold),
  381. 0 3px 8px rgb(63 58 60 / 0.15);
  382. }
  383. /* OTP: stationery wells, serif figures, gilded dash */
  384. & .otp input { background: var(--spry-bg-alt); font-family: var(--spry-font); font-size: 1.4rem; }
  385. & .otp-separator { color: var(--formal-gold); }
  386. /* Drawers: ivory panel, plum titlebar like the site's header band */
  387. & :is(.drawer-left, .drawer-right) {
  388. background: var(--spry-bg);
  389. border-color: color-mix(in srgb, var(--spry-accent) 30%, var(--spry-border));
  390. & .dialog-titlebar {
  391. background: var(--spry-info);
  392. border-bottom-color: color-mix(in srgb, var(--formal-gold) 70%, transparent);
  393. & .dialog-title { color: #fff; }
  394. & .dialog-close {
  395. color: #fff; border-color: rgb(255 255 255 / 0.55);
  396. &:hover { background: #fff; border-color: #fff; color: var(--spry-info); }
  397. }
  398. }
  399. }
  400. /* Pagination: hairline chips; the current page is a berry wax seal */
  401. & .pagination :is(a, span) {
  402. border-color: var(--spry-border); border-radius: var(--spry-radius-pill);
  403. font-variant-caps: all-small-caps; letter-spacing: 0.06em;
  404. }
  405. & .pagination a:hover {
  406. background: color-mix(in srgb, var(--spry-accent) 8%, var(--spry-surface));
  407. border-color: color-mix(in srgb, var(--spry-accent) 45%, var(--spry-border));
  408. }
  409. & .pagination [aria-current="page"] {
  410. background: var(--spry-accent); border-color: var(--spry-border-strong);
  411. color: #fff; box-shadow: 0 0 5px rgb(0 0 0 / 0.2);
  412. }
  413. }