at main 399 lines 8.1 kB view raw
1/* Entry page layout - centered content with sidenote margin */ 2.entry-page { 3 --content-width: 95ch; 4 --sidenote-width: 14rem; 5 --sidenote-gap: 1.5rem; 6 7 display: flex; 8 flex-direction: column; 9 min-height: 100vh; 10 background: var(--color-base); 11} 12 13/* Header with inline nav + metadata */ 14.entry-header { 15 display: flex; 16 align-items: baseline; 17 justify-content: center; 18 gap: 1rem; 19 padding: 1.5rem 1rem; 20 max-width: calc(var(--content-width) + var(--sidenote-width) + var(--sidenote-gap) + 10rem); 21 margin: 0 auto; 22 width: 100%; 23 box-sizing: border-box; 24} 25 26/* Nav links in header - minimal style */ 27.nav-button { 28 display: flex; 29 align-items: center; 30 gap: 0.5rem; 31 color: var(--color-subtle); 32 text-decoration: none; 33 font-size: 0.9rem; 34 white-space: nowrap; 35 transition: color 0.2s ease; 36} 37 38.entry-header .nav-button:hover { 39 color: var(--color-primary); 40} 41 42.entry-header .nav-button-prev, 43.entry-header .nav-placeholder:first-child { 44 flex: 1; 45 min-width: 0; 46} 47 48.entry-header .nav-button-next, 49.entry-header .nav-placeholder:last-child { 50 flex: 1; 51 min-width: 0; 52 justify-content: flex-end; 53} 54 55.entry-header .nav-arrow { 56 font-weight: 600; 57 color: var(--color-primary); 58 flex-shrink: 0; 59} 60 61.entry-header .nav-title { 62 overflow: hidden; 63 text-overflow: ellipsis; 64} 65 66/* Metadata anchored to content width */ 67.entry-header .entry-metadata { 68 width: min(var(--content-width), 100%); 69 flex-shrink: 1; 70 margin: 0; 71 padding: 0; 72 border: none; 73} 74 75/* Main content area */ 76.entry-content-wrapper { 77 flex: 1; 78 display: flex; 79 justify-content: center; 80 padding: 0 1rem; 81} 82 83.entry-content-main { 84 width: var(--content-width); 85 max-width: 100%; 86 position: relative; 87} 88 89/* Sidenote layout handled by css.rs body padding */ 90 91/* Footer navigation */ 92.entry-footer-nav { 93 display: flex; 94 justify-content: space-between; 95 align-items: stretch; 96 gap: 2rem; 97 max-width: calc(var(--content-width) + 20rem); 98 margin: 4rem auto 2rem; 99 padding: 0 1rem; 100 width: 100%; 101 box-sizing: border-box; 102} 103 104.entry-footer-nav .nav-button-prev { 105 align-items: flex-start; 106 text-align: start; 107} 108 109.entry-footer-nav .nav-button-next { 110 align-items: flex-end; 111 text-align: end; 112 margin-inline-start: auto; 113} 114 115.entry-footer-nav .nav-arrow { 116 font-size: 1.25rem; 117 font-weight: bold; 118 color: var(--color-primary); 119} 120 121.entry-footer-nav .nav-title { 122 font-size: 0.95rem; 123 font-weight: 500; 124 line-height: 1.4; 125} 126 127/* Entry metadata in header context */ 128.entry-header .entry-metadata .entry-title { 129 font-size: 1.75rem; 130 margin: 0 0 0.5rem 0; 131} 132 133.entry-header .entry-metadata .entry-header-row { 134 flex-wrap: wrap; 135} 136 137/* Standalone entry metadata (when not in header) */ 138.entry-metadata { 139 margin-bottom: calc(1rem * var(--spacing-scale, 1.5)); 140 padding-bottom: calc(0.5rem * var(--spacing-scale, 1.5)); 141 border-bottom: 2px solid var(--color-border); 142} 143 144.entry-header-row { 145 display: flex; 146 align-items: baseline; 147 justify-content: space-between; 148 gap: 1rem; 149} 150 151.entry-title { 152 margin-bottom: calc(1rem * var(--spacing-scale, 1.5)); 153 margin-top: calc(1rem * var(--spacing-scale, 1.5)); 154 color: var(--color-text); 155 flex: 1; 156} 157 158.entry-meta-info { 159 display: flex; 160 flex-wrap: wrap; 161 gap: calc(0.25rem * var(--spacing-scale, 1.5)) calc(1rem * var(--spacing-scale, 1.5)); 162 font-size: 0.95rem; 163 color: var(--color-subtle); 164} 165 166.entry-authors, 167.entry-date, 168.entry-tags, 169.entry-reading-stats { 170 display: flex; 171 align-items: center; 172 font-family: var(--font-ui); 173 gap: 0.5rem; 174} 175 176.entry-reading-stats { 177 color: var(--color-subtle); 178 margin-inline-start: auto; 179 margin-top: 0.25rem; 180} 181 182.entry-reading-stats .word-count::after { 183 content: "·"; 184 margin-inline-start: 0.5rem; 185} 186 187.entry-date { 188 margin-inline-start: auto; 189 font-weight: 400; 190 align-items: last baseline; 191 color: var(--color-subtle); 192} 193 194.meta-label { 195 font-weight: 400; 196 color: var(--color-subtle); 197} 198 199.author-name { 200 color: var(--color-link); 201 font-weight: 450; 202 text-decoration: none; 203 transition: color 0.2s ease; 204} 205 206.author-name:hover { 207 color: var(--color-emphasis); 208 text-decoration: underline; 209} 210 211.entry-meta-secondary { 212 display: flex; 213 flex-wrap: wrap; 214 align-items: center; 215 gap: 0.5rem 1rem; 216 flex-basis: 100%; 217} 218 219.entry-tags { 220 display: flex; 221 gap: 0.5rem; 222 flex-wrap: wrap; 223} 224 225.entry-tag { 226 padding: 0.25rem 0.5rem; 227 font-size: 0.85rem; 228 color: var(--color-subtle); 229 background-color: var(--color-surface); 230 border: 1px solid var(--color-border); 231 text-decoration: none; 232 transition: 233 color 0.2s ease, 234 border-color 0.2s ease; 235} 236 237.entry-tag:hover { 238 color: var(--color-tertiary); 239 border-color: var(--color-tertiary); 240} 241 242/* Content styling */ 243.entry-content-main ::selection { 244 background: var(--color-highlight); 245 color: var(--color-text); 246} 247 248.entry-content-main code { 249 background: var(--color-surface); 250} 251 252.entry-content-main pre code { 253 background: var(--color-surface); 254} 255 256.entry-content-main blockquote { 257 border-inline-start-color: var(--color-secondary); 258 background: var(--color-surface); 259} 260 261.entry-content-main table th { 262 background: var(--color-surface); 263 border-color: var(--color-border); 264} 265 266.entry-content-main table td { 267 border-color: var(--color-border); 268} 269 270.entry-content-main table tr:hover { 271 background: var(--color-surface); 272} 273 274/* TODO: footnote ordering needs non-flex solution for aside reflow to work */ 275 276/* Subtitle (for external blog posts like WhiteWind) */ 277.entry-subtitle { 278 font-size: 1.1rem; 279 font-style: italic; 280 color: var(--color-subtle); 281 margin: 0 0 1rem 0; 282 line-height: 1.5; 283} 284 285/* Meta row (simpler alternative to entry-meta-info) */ 286.entry-meta-row { 287 display: flex; 288 flex-wrap: wrap; 289 gap: 0.5rem 1rem; 290 font-size: 0.95rem; 291 font-family: var(--font-ui); 292 color: var(--color-subtle); 293 align-items: center; 294} 295 296.entry-meta-row .entry-author a { 297 color: var(--color-link); 298 text-decoration: none; 299} 300 301.entry-meta-row .entry-author a:hover { 302 text-decoration: underline; 303} 304 305.entry-meta-row .entry-stats { 306 margin-inline-start: auto; 307} 308 309/* External source badge */ 310.entry-source { 311 margin-top: 0.75rem; 312} 313 314.source-badge { 315 display: inline-block; 316 padding: 0.25rem 0.75rem; 317 font-size: 0.85rem; 318 font-family: var(--font-ui); 319 color: var(--color-subtle); 320 background: var(--color-surface); 321 border: 1px solid var(--color-border); 322 border-radius: 4px; 323 text-decoration: none; 324 transition: 325 color 0.2s ease, 326 border-color 0.2s ease; 327} 328 329.source-badge:hover { 330 color: var(--color-primary); 331 border-color: var(--color-primary); 332} 333 334/* Responsive: tablet */ 335@media (max-width: 1200px) { 336 .entry-header { 337 flex-wrap: wrap; 338 } 339 340 .entry-header .entry-metadata { 341 order: -1; 342 flex-basis: 100%; 343 max-width: none; 344 } 345 346 .entry-header .nav-button-prev { 347 order: 0; 348 } 349 350 .entry-header .nav-button-next { 351 order: 1; 352 margin-inline-start: auto; 353 } 354} 355 356/* Responsive: narrower */ 357@media (max-width: 900px) { 358 .entry-header .nav-title { 359 max-width: 8rem; 360 } 361} 362 363/* Responsive: mobile */ 364@media (max-width: 768px) { 365 .entry-header { 366 flex-direction: column; 367 align-items: stretch; 368 gap: 0.5rem; 369 } 370 371 .entry-footer-nav { 372 flex-direction: column; 373 gap: 1rem; 374 margin-top: 2rem; 375 } 376} 377 378/* Small mobile */ 379@media (max-width: 480px) { 380 .entry-content-main { 381 padding: 0 0.75rem; 382 } 383 384 .entry-metadata { 385 margin-bottom: 1rem; 386 padding-bottom: 0.75rem; 387 } 388 389 .entry-title { 390 font-size: 1.65rem; 391 margin-top: 0.5rem; 392 margin-bottom: 0.75rem; 393 } 394 395 .entry-meta-info { 396 gap: 0.75rem; 397 font-size: 0.85rem; 398 } 399}