theme.scss 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919
  1. @use "sass:map";
  2. @use "sass:meta";
  3. @use "sass:list";
  4. @function map-get-strict($map, $key...) {
  5. @if map.has-key($map, $key...) {
  6. @return map.get($map, $key...);
  7. } @else {
  8. @error "ERROR: Specified index does not exist in the mapping";
  9. }
  10. }
  11. @function spacing($increment) {
  12. @return $increment * 0.25rem;
  13. }
  14. $font-weight: (
  15. "thin": 100,
  16. "extralight": 200,
  17. "light": 300,
  18. "normal": 400,
  19. "medium": 500,
  20. "semibold": 600,
  21. "bold": 700,
  22. "extrabold": 800,
  23. "black": 900,
  24. );
  25. @function font-weight($weight) {
  26. @return map-get-strict($font-weight, $weight);
  27. }
  28. $font-family: (
  29. "monospace": (
  30. "ui-monospace",
  31. "sfmono-regular",
  32. "consolas",
  33. "Liberation Mono",
  34. "menlo",
  35. "monospace",
  36. ),
  37. );
  38. @function font-family($family) {
  39. @return map-get-strict($font-family, $family);
  40. }
  41. $font-size: (
  42. "xxs": 0.6875rem,
  43. "xs": 0.75rem,
  44. "sm": 0.875rem,
  45. "base": 1rem,
  46. "lg": 1.125rem,
  47. "xl": 1.25rem,
  48. "2xl": 1.5rem,
  49. "3xl": 1.875rem,
  50. "4xl": 2.25rem,
  51. "5xl": 3rem,
  52. "6xl": 3.75rem,
  53. "7xl": 4.5rem,
  54. "8xl": 6rem,
  55. "9xl": 8rem,
  56. );
  57. @function font-size($size: "base") {
  58. @return map-get-strict($font-size, $size);
  59. }
  60. $letter-spacing: (
  61. "tighter": -0.05em,
  62. "tight": -0.025em,
  63. "normal": 0em,
  64. "wide": 0.025em,
  65. "wider": 0.05em,
  66. "widest": 0.1em,
  67. );
  68. @function letter-spacing($spacing: "normal") {
  69. @return map-get-strict($letter-spacing, $spacing);
  70. }
  71. $border-radius: (
  72. "none": 0px,
  73. "sm": 0.125rem,
  74. "base": 0.25rem,
  75. "md": 0.375rem,
  76. "lg": 0.5rem,
  77. "xl": 0.75rem,
  78. "2xl": 1rem,
  79. "3xl": 1.5rem,
  80. "full": 9999px,
  81. );
  82. @function border-radius($radius: "base") {
  83. @return map-get-strict($border-radius, $radius);
  84. }
  85. $color-pallette: (
  86. "black": #000,
  87. "white": #fff,
  88. "slate": (
  89. 50: #f8fafc,
  90. 100: #f1f5f9,
  91. 200: #e2e8f0,
  92. 300: #cbd5e1,
  93. 400: #94a3b8,
  94. 500: #64748b,
  95. 600: #475569,
  96. 700: #334155,
  97. 800: #1e293b,
  98. 900: #0f172a,
  99. 950: #020617,
  100. ),
  101. "gray": (
  102. 50: #f9fafb,
  103. 100: #f3f4f6,
  104. 200: #e5e7eb,
  105. 300: #d1d5db,
  106. 400: #9ca3af,
  107. 500: #6b7280,
  108. 600: #4b5563,
  109. 700: #374151,
  110. 800: #1f2937,
  111. 900: #111827,
  112. 950: #030712,
  113. ),
  114. "zinc": (
  115. 50: #fafafa,
  116. 100: #f4f4f5,
  117. 200: #e4e4e7,
  118. 300: #d4d4d8,
  119. 400: #a1a1aa,
  120. 500: #71717a,
  121. 600: #52525b,
  122. 700: #3f3f46,
  123. 800: #27272a,
  124. 900: #18181b,
  125. 950: #09090b,
  126. ),
  127. "neutral": (
  128. 50: #fafafa,
  129. 100: #f5f5f5,
  130. 200: #e5e5e5,
  131. 300: #d4d4d4,
  132. 400: #a3a3a3,
  133. 500: #737373,
  134. 600: #525252,
  135. 700: #404040,
  136. 800: #262626,
  137. 900: #171717,
  138. 950: #0a0a0a,
  139. ),
  140. "stone": (
  141. 50: #fafaf9,
  142. 100: #f5f5f4,
  143. 200: #e7e5e4,
  144. 300: #d6d3d1,
  145. 400: #a8a29e,
  146. 500: #78716c,
  147. 600: #57534e,
  148. 700: #44403c,
  149. 800: #292524,
  150. 900: #1c1917,
  151. 950: #0c0a09,
  152. ),
  153. "red": (
  154. 50: #fef2f2,
  155. 100: #fee2e2,
  156. 200: #fecaca,
  157. 300: #fca5a5,
  158. 400: #f87171,
  159. 500: #ef4444,
  160. 600: #dc2626,
  161. 700: #b91c1c,
  162. 800: #991b1b,
  163. 900: #7f1d1d,
  164. 950: #450a0a,
  165. ),
  166. "orange": (
  167. 50: #fff7ed,
  168. 100: #ffedd5,
  169. 200: #fed7aa,
  170. 300: #fdba74,
  171. 400: #fb923c,
  172. 500: #f97316,
  173. 600: #ea580c,
  174. 700: #c2410c,
  175. 800: #9a3412,
  176. 900: #7c2d12,
  177. 950: #431407,
  178. ),
  179. "amber": (
  180. 50: #fffbeb,
  181. 100: #fef3c7,
  182. 200: #fde68a,
  183. 300: #fcd34d,
  184. 400: #fbbf24,
  185. 500: #f59e0b,
  186. 600: #d97706,
  187. 700: #b45309,
  188. 800: #92400e,
  189. 900: #78350f,
  190. 950: #451a03,
  191. ),
  192. "yellow": (
  193. 50: #fefce8,
  194. 100: #fef9c3,
  195. 200: #fef08a,
  196. 300: #fde047,
  197. 400: #facc15,
  198. 500: #eab308,
  199. 600: #ca8a04,
  200. 700: #a16207,
  201. 800: #854d0e,
  202. 900: #713f12,
  203. 950: #422006,
  204. ),
  205. "lime": (
  206. 50: #f7fee7,
  207. 100: #ecfccb,
  208. 200: #d9f99d,
  209. 300: #bef264,
  210. 400: #a3e635,
  211. 500: #84cc16,
  212. 600: #65a30d,
  213. 700: #4d7c0f,
  214. 800: #3f6212,
  215. 900: #365314,
  216. 950: #1a2e05,
  217. ),
  218. "green": (
  219. 50: #f0fdf4,
  220. 100: #dcfce7,
  221. 200: #bbf7d0,
  222. 300: #86efac,
  223. 400: #4ade80,
  224. 500: #22c55e,
  225. 600: #16a34a,
  226. 700: #15803d,
  227. 800: #166534,
  228. 900: #14532d,
  229. 950: #052e16,
  230. ),
  231. "emerald": (
  232. 50: #ecfdf5,
  233. 100: #d1fae5,
  234. 200: #a7f3d0,
  235. 300: #6ee7b7,
  236. 400: #34d399,
  237. 500: #10b981,
  238. 600: #059669,
  239. 700: #047857,
  240. 800: #065f46,
  241. 900: #064e3b,
  242. 950: #022c22,
  243. ),
  244. "teal": (
  245. 50: #f0fdfa,
  246. 100: #ccfbf1,
  247. 200: #99f6e4,
  248. 300: #5eead4,
  249. 400: #2dd4bf,
  250. 500: #14b8a6,
  251. 600: #0d9488,
  252. 700: #0f766e,
  253. 800: #115e59,
  254. 900: #134e4a,
  255. 950: #042f2e,
  256. ),
  257. "cyan": (
  258. 50: #ecfeff,
  259. 100: #cffafe,
  260. 200: #a5f3fc,
  261. 300: #67e8f9,
  262. 400: #22d3ee,
  263. 500: #06b6d4,
  264. 600: #0891b2,
  265. 700: #0e7490,
  266. 800: #155e75,
  267. 900: #164e63,
  268. 950: #083344,
  269. ),
  270. "sky": (
  271. 50: #f0f9ff,
  272. 100: #e0f2fe,
  273. 200: #bae6fd,
  274. 300: #7dd3fc,
  275. 400: #38bdf8,
  276. 500: #0ea5e9,
  277. 600: #0284c7,
  278. 700: #0369a1,
  279. 800: #075985,
  280. 900: #0c4a6e,
  281. 950: #082f49,
  282. ),
  283. "blue": (
  284. 50: #eff6ff,
  285. 100: #dbeafe,
  286. 200: #bfdbfe,
  287. 300: #93c5fd,
  288. 400: #60a5fa,
  289. 500: #3b82f6,
  290. 600: #2563eb,
  291. 700: #1d4ed8,
  292. 800: #1e40af,
  293. 900: #1e3a8a,
  294. 950: #172554,
  295. ),
  296. "indigo": (
  297. 50: #eef2ff,
  298. 100: #e0e7ff,
  299. 200: #c7d2fe,
  300. 300: #a5b4fc,
  301. 400: #818cf8,
  302. 500: #6366f1,
  303. 600: #4f46e5,
  304. 700: #4338ca,
  305. 800: #3730a3,
  306. 900: #312e81,
  307. 950: #1e1b4b,
  308. ),
  309. "violet": (
  310. 50: #f5f3ff,
  311. 100: #ede9fe,
  312. 200: #ddd6fe,
  313. 300: #c4b5fd,
  314. 400: #a78bfa,
  315. 500: #8b5cf6,
  316. 600: #7c3aed,
  317. 700: #6d28d9,
  318. 800: #5b21b6,
  319. 900: #4c1d95,
  320. 950: #2e1065,
  321. ),
  322. "purple": (
  323. 50: #faf5ff,
  324. 100: #f3e8ff,
  325. 200: #e9d5ff,
  326. 300: #d8b4fe,
  327. 400: #c084fc,
  328. 500: #a855f7,
  329. 600: #9333ea,
  330. 700: #7e22ce,
  331. 800: #6b21a8,
  332. 900: #581c87,
  333. 950: #3b0764,
  334. ),
  335. "fuchsia": (
  336. 50: #fdf4ff,
  337. 100: #fae8ff,
  338. 200: #f5d0fe,
  339. 300: #f0abfc,
  340. 400: #e879f9,
  341. 500: #d946ef,
  342. 600: #c026d3,
  343. 700: #a21caf,
  344. 800: #86198f,
  345. 900: #701a75,
  346. 950: #4a044e,
  347. ),
  348. "pink": (
  349. 50: #fdf2f8,
  350. 100: #fce7f3,
  351. 200: #fbcfe8,
  352. 300: #f9a8d4,
  353. 400: #f472b6,
  354. 500: #ec4899,
  355. 600: #db2777,
  356. 700: #be185d,
  357. 800: #9d174d,
  358. 900: #831843,
  359. 950: #500724,
  360. ),
  361. "rose": (
  362. 50: #fff1f2,
  363. 100: #ffe4e6,
  364. 200: #fecdd3,
  365. 300: #fda4af,
  366. 400: #fb7185,
  367. 500: #f43f5e,
  368. 600: #e11d48,
  369. 700: #be123c,
  370. 800: #9f1239,
  371. 900: #881337,
  372. 950: #4c0519,
  373. ),
  374. "beige": (
  375. 50: #f7f4f4,
  376. 100: #f3eded,
  377. 200: #e9dfdf,
  378. 300: #d9c8c8,
  379. 400: #c1a8a8,
  380. 500: #a98a8a,
  381. 600: #927070,
  382. 700: #795c5c,
  383. 800: #664e4e,
  384. 900: #574545,
  385. 950: #2d2222,
  386. ),
  387. "steel": (
  388. 50: #f8f9fc,
  389. 100: #f1f2f9,
  390. 200: #e2e3f0,
  391. 300: #cbcee1,
  392. 400: #9497b8,
  393. 500: #64678b,
  394. 600: #474a69,
  395. 700: #333655,
  396. 800: #25253e,
  397. 900: #27253d,
  398. 950: #100e23,
  399. ),
  400. );
  401. @function pallette-color($color...) {
  402. @return map-get-strict($color-pallette, $color...);
  403. }
  404. $color: (
  405. "transparent": transparent,
  406. "background": (
  407. "primary": light-dark(pallette-color("white"), pallette-color("steel", 950)),
  408. "nav-blur": light-dark(
  409. rgb(from pallette-color("white") r g b / 70%),
  410. rgb(from pallette-color("steel", 950) r g b / 70%)
  411. ),
  412. "modal": light-dark(pallette-color("white"), pallette-color("steel", 950)),
  413. "secondary": light-dark(
  414. pallette-color("beige", 100),
  415. pallette-color("steel", 900)
  416. ),
  417. "card-highlight": light-dark(
  418. pallette-color("violet", 100),
  419. pallette-color("violet", 950)
  420. ),
  421. "card-secondary": light-dark(
  422. pallette-color("white"),
  423. pallette-color("steel", 950)
  424. ),
  425. "tooltip": light-dark(
  426. pallette-color("steel", 700),
  427. pallette-color("steel", 200)
  428. ),
  429. ),
  430. "foreground": light-dark(
  431. pallette-color("steel", 900),
  432. pallette-color("steel", 50)
  433. ),
  434. "heading": light-dark(
  435. pallette-color("steel", 800),
  436. pallette-color("steel", 200)
  437. ),
  438. "paragraph": light-dark(
  439. pallette-color("steel", 700),
  440. pallette-color("steel", 300)
  441. ),
  442. "tooltip": light-dark(
  443. pallette-color("steel", 200),
  444. pallette-color("steel", 800)
  445. ),
  446. "link": (
  447. "primary": light-dark(
  448. pallette-color("violet", 700),
  449. pallette-color("purple", 300)
  450. ),
  451. "normal": light-dark(
  452. pallette-color("steel", 800),
  453. pallette-color("steel", 50)
  454. ),
  455. ),
  456. "highlight": light-dark(
  457. pallette-color("violet", 600),
  458. pallette-color("violet", 500)
  459. ),
  460. "muted": light-dark(
  461. pallette-color("stone", 700),
  462. pallette-color("steel", 300)
  463. ),
  464. "border": light-dark(
  465. pallette-color("stone", 300),
  466. pallette-color("steel", 600)
  467. ),
  468. "selection": (
  469. "background": light-dark(
  470. pallette-color("violet", 600),
  471. pallette-color("violet", 400)
  472. ),
  473. "foreground": light-dark(
  474. pallette-color("steel", 50),
  475. pallette-color("steel", 950)
  476. ),
  477. ),
  478. "states": (
  479. "success": (
  480. "base": light-dark(
  481. pallette-color("emerald", 600),
  482. pallette-color("emerald", 500)
  483. ),
  484. "background": light-dark(
  485. pallette-color("emerald", 100),
  486. pallette-color("emerald", 950)
  487. ),
  488. "normal": light-dark(
  489. pallette-color("emerald", 600),
  490. pallette-color("emerald", 500)
  491. ),
  492. "hover": pallette-color("emerald", 700),
  493. "active": pallette-color("emerald", 800),
  494. "border": light-dark(
  495. pallette-color("emerald", 400),
  496. pallette-color("emerald", 800)
  497. ),
  498. ),
  499. "error": (
  500. "base": light-dark(pallette-color("red", 600), pallette-color("red", 400)),
  501. "color": light-dark(
  502. pallette-color("red", 500),
  503. pallette-color("red", 400)
  504. ),
  505. "background": light-dark(
  506. pallette-color("red", 100),
  507. pallette-color("red", 950)
  508. ),
  509. "normal": pallette-color("red", 500),
  510. "hover": pallette-color("red", 600),
  511. "active": pallette-color("red", 700),
  512. "border": light-dark(
  513. pallette-color("red", 400),
  514. pallette-color("red", 900)
  515. ),
  516. ),
  517. "neutral": (
  518. "normal": light-dark(
  519. pallette-color("steel", 900),
  520. pallette-color("steel", 50)
  521. ),
  522. "border": light-dark(
  523. pallette-color("stone", 300),
  524. pallette-color("steel", 600)
  525. ),
  526. "background": light-dark(
  527. pallette-color("white"),
  528. pallette-color("steel", 900)
  529. ),
  530. ),
  531. "info": (
  532. "background": light-dark(
  533. pallette-color("indigo", 100),
  534. pallette-color("indigo", 950)
  535. ),
  536. "background-opaque": light-dark(
  537. rgb(from pallette-color("indigo", 200) r g b / 80%),
  538. rgb(from pallette-color("indigo", 950) r g b / 80%)
  539. ),
  540. "icon": light-dark(
  541. pallette-color("indigo", 600),
  542. pallette-color("indigo", 500)
  543. ),
  544. "normal": light-dark(
  545. pallette-color("indigo", 600),
  546. pallette-color("indigo", 400)
  547. ),
  548. "border": light-dark(
  549. pallette-color("indigo", 400),
  550. pallette-color("indigo", 800)
  551. ),
  552. ),
  553. "warning": (
  554. "normal": light-dark(
  555. pallette-color("orange", 600),
  556. pallette-color("orange", 400)
  557. ),
  558. "background": light-dark(
  559. pallette-color("orange", 100),
  560. pallette-color("orange", 950)
  561. ),
  562. "border": light-dark(
  563. pallette-color("orange", 400),
  564. pallette-color("orange", 700)
  565. ),
  566. ),
  567. "yellow": (
  568. "normal": pallette-color("yellow", 500),
  569. "background": light-dark(
  570. pallette-color("yellow", 100),
  571. pallette-color("yellow", 900)
  572. ),
  573. ),
  574. "lime": (
  575. "normal": pallette-color("lime", 500),
  576. "background": light-dark(
  577. pallette-color("lime", 100),
  578. pallette-color("lime", 900)
  579. ),
  580. ),
  581. "data": (
  582. "normal": light-dark(
  583. pallette-color("violet", 600),
  584. pallette-color("violet", 400)
  585. ),
  586. "background": light-dark(
  587. pallette-color("violet", 100),
  588. pallette-color("violet", 950)
  589. ),
  590. "border": light-dark(
  591. pallette-color("violet", 200),
  592. pallette-color("violet", 800)
  593. ),
  594. ),
  595. ),
  596. "focus": light-dark(
  597. pallette-color("violet", 700),
  598. pallette-color("violet", 500)
  599. ),
  600. "focus-dim": light-dark(
  601. rgb(from pallette-color("violet", 700) r g b / 30%),
  602. rgb(from pallette-color("violet", 500) r g b / 30%)
  603. ),
  604. "forms": (
  605. "input": (
  606. "hover": (
  607. "border": light-dark(
  608. pallette-color("stone", 400),
  609. pallette-color("steel", 500)
  610. ),
  611. ),
  612. ),
  613. ),
  614. "chart": (
  615. "series": (
  616. "primary": light-dark(
  617. pallette-color("violet", 500),
  618. pallette-color("violet", 400)
  619. ),
  620. "neutral": light-dark(
  621. pallette-color("stone", 500),
  622. pallette-color("steel", 300)
  623. ),
  624. ),
  625. ),
  626. "button": (
  627. "primary": (
  628. "foreground": pallette-color("white"),
  629. "background": (
  630. "normal": light-dark(
  631. pallette-color("violet", 700),
  632. pallette-color("violet", 600)
  633. ),
  634. "hover": light-dark(
  635. pallette-color("violet", 800),
  636. pallette-color("violet", 700)
  637. ),
  638. "active": light-dark(
  639. pallette-color("violet", 900),
  640. pallette-color("violet", 800)
  641. ),
  642. ),
  643. ),
  644. "secondary": (
  645. "foreground": pallette-color("steel", 900),
  646. "background": (
  647. "normal": pallette-color("purple", 200),
  648. "hover": pallette-color("purple", 300),
  649. "active": pallette-color("purple", 400),
  650. ),
  651. ),
  652. "solid": (
  653. "foreground": light-dark(
  654. pallette-color("steel", 50),
  655. pallette-color("steel", 900)
  656. ),
  657. "background": (
  658. "normal": light-dark(
  659. pallette-color("steel", 900),
  660. pallette-color("steel", 50)
  661. ),
  662. "hover": light-dark(
  663. pallette-color("steel", 600),
  664. pallette-color("steel", 200)
  665. ),
  666. "active": light-dark(
  667. pallette-color("steel", 900),
  668. pallette-color("steel", 50)
  669. ),
  670. ),
  671. ),
  672. "outline": (
  673. "border": light-dark(
  674. pallette-color("stone", 300),
  675. pallette-color("steel", 600)
  676. ),
  677. "foreground": light-dark(
  678. pallette-color("stone", 900),
  679. pallette-color("steel", 50)
  680. ),
  681. "background": (
  682. "hover": light-dark(
  683. rgb(from pallette-color("beige", 950) r g b / 5%),
  684. rgb(from pallette-color("steel", 50) r g b / 5%)
  685. ),
  686. "active": light-dark(
  687. rgb(from pallette-color("beige", 950) r g b / 10%),
  688. rgb(from pallette-color("steel", 50) r g b / 10%)
  689. ),
  690. ),
  691. ),
  692. "disabled": (
  693. "foreground": light-dark(
  694. pallette-color("stone", 400),
  695. pallette-color("steel", 400)
  696. ),
  697. "background": light-dark(
  698. pallette-color("stone", 200),
  699. pallette-color("steel", 600)
  700. ),
  701. ),
  702. ),
  703. );
  704. @function color($color-path...) {
  705. @return map-get-strict($color, $color-path...);
  706. }
  707. $button-sizes: (
  708. "xs": (
  709. "padding": spacing(1),
  710. "height": spacing(6),
  711. "border-radius": border-radius("md"),
  712. "font-size": font-size("xxs"),
  713. "icon-size": spacing(4),
  714. "gap": spacing(1),
  715. ),
  716. "sm": (
  717. "padding": spacing(2),
  718. "height": spacing(9),
  719. "border-radius": border-radius("lg"),
  720. "font-size": font-size("sm"),
  721. "icon-size": spacing(5),
  722. "gap": spacing(2),
  723. ),
  724. "md": (
  725. "padding": spacing(3),
  726. "height": spacing(12),
  727. "border-radius": border-radius("xl"),
  728. "font-size": font-size("base"),
  729. "icon-size": spacing(6),
  730. "gap": spacing(2),
  731. ),
  732. "lg": (
  733. "padding": spacing(4),
  734. "height": spacing(14),
  735. "border-radius": border-radius("2xl"),
  736. "font-size": font-size("xl"),
  737. "icon-size": spacing(6),
  738. "gap": spacing(3),
  739. ),
  740. );
  741. @function button-padding($size, $include-gap) {
  742. $button: map-get-strict($button-sizes, $size);
  743. $padding: map-get-strict($button, "padding");
  744. @if $include-gap {
  745. @return $padding + map-get-strict($button, "gap");
  746. } @else {
  747. @return $padding;
  748. }
  749. }
  750. @function button-icon-size($size) {
  751. @return map-get-strict($button-sizes, $size, "icon-size");
  752. }
  753. @function button-border-radius($size) {
  754. @return map-get-strict($button-sizes, $size, "border-radius");
  755. }
  756. @mixin sr-only {
  757. position: absolute;
  758. width: 1px;
  759. height: 1px;
  760. padding: 0;
  761. margin: -1px;
  762. overflow: hidden;
  763. clip: rect(0, 0, 0, 0);
  764. white-space: nowrap;
  765. border-width: 0;
  766. }
  767. @mixin pulse {
  768. animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
  769. @keyframes pulse {
  770. 0%,
  771. 100% {
  772. opacity: 1;
  773. }
  774. 50% {
  775. opacity: 0.5;
  776. }
  777. }
  778. }
  779. @mixin spin {
  780. animation: spin 1s linear infinite;
  781. @keyframes spin {
  782. from {
  783. transform: rotate(0deg);
  784. }
  785. to {
  786. transform: rotate(360deg);
  787. }
  788. }
  789. }
  790. $max-width: spacing(372);
  791. $max-width-padding: var(--max-width-padding);
  792. @mixin max-width {
  793. & {
  794. --max-width-padding: #{spacing(4)};
  795. margin-left: auto;
  796. margin-right: auto;
  797. padding-left: $max-width-padding;
  798. padding-right: $max-width-padding;
  799. width: 100%;
  800. max-width: $max-width;
  801. }
  802. @include breakpoint("sm") {
  803. --max-width-padding: #{spacing(6)};
  804. }
  805. }
  806. @mixin row {
  807. display: flex;
  808. flex-flow: row nowrap;
  809. align-items: center;
  810. }
  811. $elevations: (
  812. primary: (
  813. 2: (
  814. 0px 66px 18px 0px rgb(112 66 206 / 0%),
  815. 0px 42px 17px 0px rgb(112 66 206 / 3%),
  816. 0px 24px 14px 0px rgb(112 66 206 / 8%),
  817. 0px 11px 11px 0px rgb(112 66 206 / 14%),
  818. 0px 3px 6px 0px rgb(112 66 206 / 17%),
  819. ),
  820. ),
  821. default: (
  822. 1: (
  823. 0px 4px 6px -4px rgb(from black r g b / 10%),
  824. 0px 10px 15px -3px rgb(from black r g b / 10%),
  825. ),
  826. 2: (
  827. 0px 29px 12px 0px
  828. light-dark(rgb(from #564848 r g b / 2%), rgb(from black r g b / 8%)),
  829. 0px 16px 10px 0px
  830. light-dark(rgb(from #564848 r g b / 6%), rgb(from black r g b / 12%)),
  831. 0px 7px 7px 0px
  832. light-dark(rgb(from #564848 r g b / 12%), rgb(from black r g b / 20%)),
  833. 0px 2px 4px 0px
  834. light-dark(rgb(from #564848 r g b / 14%), rgb(from black r g b / 30%)),
  835. ),
  836. ),
  837. );
  838. @mixin elevation($elevation...) {
  839. box-shadow: map-get-strict($elevations, $elevation...);
  840. }
  841. @mixin h3 {
  842. @include text("xl", "semibold");
  843. line-height: 125%;
  844. letter-spacing: letter-spacing("tighter");
  845. @include breakpoint("sm") {
  846. font-size: font-size("2xl");
  847. }
  848. }
  849. @mixin h4 {
  850. font-size: font-size("xl");
  851. font-style: normal;
  852. font-weight: font-weight("medium");
  853. line-height: 125%;
  854. letter-spacing: letter-spacing("tight");
  855. margin: 0;
  856. }
  857. @mixin text($size: "base", $weight: "normal") {
  858. font-size: font-size($size);
  859. font-weight: font-weight($weight);
  860. margin: 0;
  861. font-style: normal;
  862. line-height: 1;
  863. }
  864. $breakpoints: (
  865. "sm": 640px,
  866. "md": 768px,
  867. "lg": 1024px,
  868. "xl": 1280px,
  869. "2xl": 1536px,
  870. );
  871. @mixin breakpoint($point) {
  872. @media (min-width: map-get-strict($breakpoints, $point)) {
  873. @content;
  874. }
  875. }
  876. $header-height: var(--header-height);