at main 6.1 kB view raw
1@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=DM+Serif+Display:ital@0;1&family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap'); 2 3@tailwind base; 4@tailwind components; 5@tailwind utilities; 6 7html { 8 -webkit-text-size-adjust: 100%; 9 -ms-text-size-adjust: 100%; 10 font-family: sans-serif; 11} 12 13body { 14 margin: 0; 15} 16 17/** 18 * Typography System 19 * 20 * A modular, responsive typography system using fluid type scaling. 21 * All typography components use these base classes for consistency. 22 * 23 * Design principles: 24 * - Fluid scaling from mobile (360px) to desktop (1200px) 25 * - Semantic sizing (sm, md, lg, xl, 2xl) 26 * - Optical adjustments for readability 27 * - Consistent vertical rhythm 28 */ 29 30@layer base { 31 /* Typography base reset */ 32 body { 33 @apply font-sans antialiased; 34 font-weight: 400; 35 text-rendering: optimizeLegibility; 36 -webkit-font-smoothing: antialiased; 37 -moz-osx-font-smoothing: grayscale; 38 } 39 40 /* Prevent layout shift during font load */ 41 html { 42 font-feature-settings: 43 'kern' 1, 44 'liga' 1, 45 'calt' 1; 46 } 47} 48 49@layer components { 50 /** 51 * Typography Scale Classes 52 * Base sizing classes with optimized line heights 53 */ 54 55 /* sm: Captions, footnotes, labels (14px → 16px) */ 56 .type-sm { 57 @apply fluid-preset-sm; 58 line-height: 1.62; 59 } 60 61 /* base: Default text (16px → 32px) */ 62 .type-base { 63 @apply fluid-preset-base; 64 line-height: 1.5; 65 } 66 67 /* md: Body copy, paragraphs (24px → 40px) */ 68 .type-md { 69 @apply fluid-preset-md; 70 line-height: 1.38; 71 } 72 73 /* lg: Subheadings, lead paragraphs (18px → 24px) */ 74 .type-lg { 75 @apply fluid-preset-lg; 76 line-height: 1.24; 77 } 78 79 /* xl: Headings (24px → 36px) */ 80 .type-xl { 81 @apply fluid-preset-xl; 82 line-height: 1.16; 83 } 84 85 /* 2xl: Display text, hero headings (36px → 64px) */ 86 .type-2xl { 87 @apply fluid-preset-2xl; 88 line-height: 1; 89 } 90 91 /** 92 * Heading Presets 93 * Always bold, uses Tailwind's native font-sans 94 */ 95 96 .heading-display { 97 @apply type-2xl font-bold font-sans; 98 } 99 100 .heading-2xl { 101 @apply type-2xl font-semibold font-sans; 102 } 103 104 .heading-xl { 105 @apply type-xl font-semibold font-sans; 106 } 107 108 .heading-lg { 109 @apply type-lg font-extrabold font-sans; 110 } 111 112 .heading-md { 113 @apply type-md font-extrabold font-sans; 114 } 115 116 .heading-base { 117 @apply type-base font-black font-sans; 118 } 119 120 .heading-sm { 121 @apply type-sm font-black font-sans; 122 } 123 124 /** 125 * Paragraph Presets 126 * Normal weight (400), uses Tailwind's native font-sans 127 */ 128 129 .paragraph-2xl { 130 @apply type-2xl font-semibold font-sans; 131 } 132 133 .paragraph-xl { 134 @apply type-xl font-normal font-sans; 135 } 136 137 .paragraph-lg { 138 @apply type-lg font-normal font-sans; 139 } 140 141 .paragraph-md { 142 @apply type-md font-normal font-sans; 143 } 144 145 .paragraph-base { 146 @apply type-base font-normal font-sans; 147 } 148 149 .paragraph-sm { 150 @apply type-sm font-normal font-sans; 151 } 152 153 /** 154 * Quote Presets 155 * Uses Tailwind's native font-serif, italic 156 */ 157 158 .quote-2xl { 159 @apply type-2xl font-normal font-sans italic; 160 } 161 162 .quote-xl { 163 @apply type-xl font-normal font-sans italic; 164 } 165 166 .quote-lg { 167 @apply type-lg font-normal font-serif italic; 168 } 169 170 .quote-md { 171 @apply type-md font-normal font-serif italic; 172 } 173 174 /** 175 * Code Presets 176 * Uses Tailwind's native font-mono 177 */ 178 179 .code-inline { 180 @apply type-base font-normal font-mono; 181 } 182 183 .code-block { 184 @apply type-base font-normal font-mono; 185 line-height: 1.75; 186 } 187 188 /** 189 * Caption Preset 190 * Small text for image/media captions 191 */ 192 193 .caption { 194 @apply type-sm font-normal font-sans; 195 } 196} 197 198@layer utilities { 199 /* Text selection */ 200 ::selection { 201 @apply bg-bones-yellow text-bones-black; 202 } 203 204 /* Prevent orphans in headings (last word alone on a line) */ 205 .balance-text { 206 text-wrap: balance; 207 } 208 209 /* Optimize for readability */ 210 .optimize-legibility { 211 text-rendering: optimizeLegibility; 212 } 213} 214 215/** 216 * Icon System - FontAwesome 6 217 */ 218 219@font-face { 220 font-family: 'FontAwesome 6'; 221 src: 222 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad41103330ed7417a_fa-regular-400.woff2') 223 format('woff2'), 224 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad41103db67d7417e_fa-regular-400.ttf') 225 format('truetype'); 226 font-weight: 400; 227 font-style: normal; 228 font-display: auto; 229} 230 231@font-face { 232 font-family: 'FontAwesome 6'; 233 src: 234 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad41103794bd7418c_fa-solid-900.woff2') 235 format('woff2'), 236 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad411033fc7d7417d_fa-solid-900.ttf') 237 format('truetype'); 238 font-weight: 900; 239 font-style: normal; 240 font-display: auto; 241} 242 243@font-face { 244 font-family: 'FontAwesome Brands 6'; 245 src: 246 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad41103fe94d74178_fa-brands-400.woff2') 247 format('woff2'), 248 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad411037fcdd7417c_fa-brands-400.ttf') 249 format('truetype'); 250 font-weight: 400; 251 font-style: normal; 252 font-display: auto; 253} 254 255@font-face { 256 font-family: 'FontAwesome 6'; 257 src: 258 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad411039933d74179_fa-thin-100.woff2') 259 format('woff2'), 260 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad411038365d7418e_fa-thin-100.ttf') 261 format('truetype'); 262 font-weight: 100; 263 font-style: normal; 264 font-display: auto; 265} 266 267@font-face { 268 font-family: 'FontAwesome 6'; 269 src: 270 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad411031febd7417b_fa-light-300.woff2') 271 format('woff2'), 272 url('https://uploads-ssl.webflow.com/63020a6ad41103c31cd7414e/63020a6ad41103530ed7418d_fa-light-300.ttf') 273 format('truetype'); 274 font-weight: 300; 275 font-style: normal; 276 font-display: auto; 277}