diff options
Diffstat (limited to 'public/stylesheets/ccc.css')
| -rw-r--r-- | public/stylesheets/ccc.css | 757 |
1 files changed, 432 insertions, 325 deletions
diff --git a/public/stylesheets/ccc.css b/public/stylesheets/ccc.css index cbeea17..8358d06 100644 --- a/public/stylesheets/ccc.css +++ b/public/stylesheets/ccc.css | |||
| @@ -1,3 +1,55 @@ | |||
| 1 | /* ========================================================================== | ||
| 2 | ccc.css — annotated demolition survey (behavior-preserving rewrite) | ||
| 3 | ========================================================================== | ||
| 4 | Sorted into nine concerns; each banner carries an ASSUMES: line naming | ||
| 5 | the tokens and images it depends on. Within any equal-specificity | ||
| 6 | collision set, relative source order is preserved verbatim. | ||
| 7 | ========================================================================== */ | ||
| 8 | |||
| 9 | /* ========================================================================== | ||
| 10 | 1. DESIGN TOKENS | ||
| 11 | ========================================================================== | ||
| 12 | The desktop layout is a fixed lattice drawn around two images: | ||
| 13 | header.png (909px wide, 145px tall) and left_column.png (continues the | ||
| 14 | header artwork down the left menu band via a wrapper-covering ::before). | ||
| 15 | Change these tokens and the two images must be regenerated — that IS | ||
| 16 | the redesign. | ||
| 17 | NOTE: custom properties cannot appear in @media conditions, so the | ||
| 18 | 1015/1016 breakpoint below stays a literal pair. Its provenance is | ||
| 19 | unexplained (roughly --page-width plus a margin allowance). | ||
| 20 | ========================================================================== */ | ||
| 21 | |||
| 22 | :root { | ||
| 23 | --page-width: 909px; /* header.png's drawn width; the wrapper. | ||
| 24 | Decomposes: 185 left band (135 col + 50 pad) | ||
| 25 | + 490 center at left 200 + 210 right band | ||
| 26 | (155 col + 55 pad) at left 690. 690 + 210 | ||
| 27 | = 900: 9px absorbed silently at the right | ||
| 28 | edge. */ | ||
| 29 | --header-height: 145px; /* header.png's pixel height; search box and | ||
| 30 | light-mode toggle hang from its bottom | ||
| 31 | edge. */ | ||
| 32 | --left-col-width: 135px; /* left band = this + --left-col-pad = 185px */ | ||
| 33 | --left-col-pad: 50px; | ||
| 34 | --center-left: 200px; /* 15px gutter beyond the 185px left band */ | ||
| 35 | --center-width: 490px; | ||
| 36 | --right-left: 690px; /* = --center-left + --center-width */ | ||
| 37 | --right-width: 155px; /* right band = this + --right-pad = 210px */ | ||
| 38 | --right-pad: 55px; | ||
| 39 | --search-left: 676px; /* provenance unknown; sits 14px left of | ||
| 40 | --right-left */ | ||
| 41 | --toggle-left: 816px; /* provenance unknown; 140px right of | ||
| 42 | --search-left */ | ||
| 43 | --burger-right: 54px; /* provenance unknown */ | ||
| 44 | } | ||
| 45 | |||
| 46 | /* ========================================================================== | ||
| 47 | 2. RESET & DOCUMENT SCAFFOLD | ||
| 48 | ========================================================================== | ||
| 49 | ASSUMES: nothing from the lattice. Element defaults and generic | ||
| 50 | utilities only. | ||
| 51 | ========================================================================== */ | ||
| 52 | |||
| 1 | html { | 53 | html { |
| 2 | height: 100%; | 54 | height: 100%; |
| 3 | line-height: 1.6rem; | 55 | line-height: 1.6rem; |
| @@ -17,6 +69,54 @@ body { | |||
| 17 | height: 100%; | 69 | height: 100%; |
| 18 | } | 70 | } |
| 19 | 71 | ||
| 72 | img { | ||
| 73 | max-width: 100%; | ||
| 74 | } | ||
| 75 | |||
| 76 | pre { | ||
| 77 | overflow: auto; | ||
| 78 | } | ||
| 79 | |||
| 80 | li { | ||
| 81 | line-height: 1.5rem; | ||
| 82 | margin-block-start: 1rem; | ||
| 83 | margin-block-end: 1rem; | ||
| 84 | } | ||
| 85 | |||
| 86 | dt { | ||
| 87 | font-weight: bold; | ||
| 88 | margin-bottom: 1em; | ||
| 89 | } | ||
| 90 | |||
| 91 | dd { | ||
| 92 | margin-bottom: 1em; | ||
| 93 | } | ||
| 94 | |||
| 95 | .pagination { | ||
| 96 | margin-bottom: .5rem; | ||
| 97 | } | ||
| 98 | |||
| 99 | + /* Single caller: _headline_image.html.erb's image-count caption | ||
| 100 | + ("N Bilder"), shown only when a gallery has more than one image. */ | ||
| 101 | .right { | ||
| 102 | text-align: right; | ||
| 103 | } | ||
| 104 | |||
| 105 | .hide-me { | ||
| 106 | display: none; | ||
| 107 | } | ||
| 108 | |||
| 109 | /* ========================================================================== | ||
| 110 | 3. COLOR SCHEME & LIGHT/DARK TOGGLE | ||
| 111 | ========================================================================== | ||
| 112 | ASSUMES: --header-height, --toggle-left (desktop toggle position); | ||
| 113 | header.png and left_column.png (the invert(50%) treatment); the nonced | ||
| 114 | inline restore script in the layout that re-checks #light-mode before | ||
| 115 | first paint (the JS contract: checkbox id "light-mode", state persisted | ||
| 116 | by the script). Symmetric blocks: each scheme inverts when the toggle | ||
| 117 | is checked. | ||
| 118 | ========================================================================== */ | ||
| 119 | |||
| 20 | @media (prefers-color-scheme: light) { | 120 | @media (prefers-color-scheme: light) { |
| 21 | body:has(#light-mode:checked) { | 121 | body:has(#light-mode:checked) { |
| 22 | color-scheme: dark; | 122 | color-scheme: dark; |
| @@ -49,114 +149,221 @@ body { | |||
| 49 | } | 149 | } |
| 50 | } | 150 | } |
| 51 | 151 | ||
| 52 | img { | 152 | input#light-mode[type="checkbox"] { |
| 53 | max-width: 100%; | 153 | display: none; |
| 54 | } | 154 | } |
| 55 | 155 | ||
| 56 | div#header img { | 156 | label[for=light-mode] { |
| 57 | border: none; | 157 | font-size: 25px; |
| 158 | user-select: none; | ||
| 159 | cursor: pointer; | ||
| 160 | filter: grayscale(1) contrast(10%); | ||
| 58 | } | 161 | } |
| 59 | 162 | ||
| 60 | @media(min-width:1016px) { | 163 | /* Light and dark mode button magic */ |
| 61 | div#wrapper { | 164 | @media(max-width:1015px) { |
| 62 | position: relative; | 165 | div#light-mode-div { |
| 63 | width: 909px; | 166 | position: absolute; |
| 64 | margin: 0 auto 0 auto; | 167 | left: 170px; /* mobile toolbar offset; provenance unknown — anchors to |
| 65 | text-align: left; | 168 | the viewport, not #toolbox (see section 5) */ |
| 66 | min-height: 100%; | ||
| 67 | } | ||
| 68 | .break-mobile { | ||
| 69 | display: block; | ||
| 70 | } | 169 | } |
| 71 | } | 170 | } |
| 72 | 171 | ||
| 73 | pre { | 172 | @media(min-width:1016px) { |
| 74 | overflow: auto; | 173 | div#light-mode-div { |
| 75 | } | 174 | position: absolute; |
| 76 | 175 | top: var(--header-height); /* bottom edge of header.png */ | |
| 77 | .right { | 176 | left: var(--toggle-left); |
| 78 | text-align: right; | 177 | } |
| 79 | } | 178 | } |
| 80 | 179 | ||
| 81 | /*------------------links-------------------*/ | 180 | /* ========================================================================== |
| 181 | 4. LINKS & HEADINGS | ||
| 182 | ========================================================================== | ||
| 183 | ASSUMES: nothing from the lattice. Site-wide type and link colors; | ||
| 184 | the orange is the one brand color that survives theming. | ||
| 185 | ========================================================================== */ | ||
| 82 | 186 | ||
| 83 | a { | 187 | a { |
| 84 | color: #F8921E; | 188 | color: #F8921E; |
| 85 | text-decoration: none; | 189 | text-decoration: none; |
| 86 | } | 190 | } |
| 87 | 191 | ||
| 88 | a:visited { | ||
| 89 | color: #D1791A; | ||
| 90 | text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); | ||
| 91 | } | ||
| 92 | |||
| 93 | a:hover { | 192 | a:hover { |
| 94 | color: #5b8ca7; | 193 | color: #5b8ca7; |
| 95 | } | 194 | } |
| 96 | 195 | ||
| 97 | /*------------------headlines-------------------*/ | ||
| 98 | |||
| 99 | h2 { | 196 | h2 { |
| 100 | font-size: 1.5rem; | 197 | font-size: 1.5rem; |
| 101 | font-family: Helvetica, Arial, sans-serif; | 198 | font-family: Helvetica, Arial, sans-serif; |
| 102 | line-height: 1.75rem; | 199 | line-height: 1.75rem; |
| 103 | } | 200 | } |
| 104 | 201 | ||
| 105 | div#center_column h2 a { | 202 | h3 { |
| 106 | color: CanvasText; | 203 | font-size: 1.3rem; |
| 107 | text-decoration: none; | 204 | text-decoration: none; |
| 205 | |||
| 108 | } | 206 | } |
| 109 | 207 | ||
| 110 | div#center_column h2 a:hover { | 208 | h4 { |
| 111 | color: color-mix(in srgb, CanvasText, #808080 50%); | 209 | font-size: 1.0rem; |
| 210 | text-decoration: none; | ||
| 112 | } | 211 | } |
| 113 | 212 | ||
| 114 | div#center_column h2.headline { | 213 | h1, h2, h3 { |
| 115 | margin-top: 10px; | 214 | word-wrap: anywhere; |
| 215 | hyphens:auto; | ||
| 116 | } | 216 | } |
| 117 | 217 | ||
| 118 | div#center_column .article_partial h2.headline { | 218 | /* ========================================================================== |
| 119 | padding-top: 30px; | 219 | 5. LAYOUT GRID |
| 120 | margin-bottom: 0.3rem; | 220 | ========================================================================== |
| 121 | border-top: 2px solid #cccccc; | 221 | ASSUMES: the full token lattice; header.png (drawn width = --page-width, |
| 222 | height = --header-height); left_column.png (continues the header art | ||
| 223 | down the left band via the ::before at z-index -10). | ||
| 224 | KNOWN STRUCTURAL DEBT: all three columns are position:absolute on | ||
| 225 | desktop, but #footer lives INSIDE #center_column — a long sidebar can | ||
| 226 | overflow past the footer. The column-height assumption is nowhere | ||
| 227 | enforced. | ||
| 228 | MOBILE ANCHORING: on max-width, #wrapper has no position, so the | ||
| 229 | absolutely positioned toolbox children (#burger-div, #search, | ||
| 230 | #light-mode-div) anchor to the viewport, not to #toolbox. | ||
| 231 | ========================================================================== */ | ||
| 232 | |||
| 233 | @media(min-width:1016px) { | ||
| 234 | div#wrapper { | ||
| 235 | position: relative; | ||
| 236 | width: var(--page-width); /* header.png's drawn width */ | ||
| 237 | margin: 0 auto 0 auto; | ||
| 238 | text-align: left; | ||
| 239 | min-height: 100%; | ||
| 240 | } | ||
| 241 | .break-mobile { | ||
| 242 | display: block; | ||
| 243 | } | ||
| 122 | } | 244 | } |
| 123 | 245 | ||
| 124 | /* except for erfa list */ | 246 | /* Header */ |
| 125 | div#center_column .chapter_partial h2.headline { | 247 | #header img, |
| 126 | border-top: none; | 248 | #header > a { |
| 249 | display: block; | ||
| 250 | line-height: 0; | ||
| 127 | } | 251 | } |
| 128 | 252 | ||
| 129 | div.article_partial h2 a { | 253 | div#header img { |
| 130 | text-decoration: none; | 254 | border: none; |
| 131 | } | 255 | } |
| 132 | 256 | ||
| 133 | h3 { | 257 | #left_column { |
| 134 | font-size: 1.3rem; | 258 | line-height: 1.5em; |
| 135 | text-decoration: none; | 259 | } |
| 136 | 260 | ||
| 261 | @media(min-width:1016px) { | ||
| 262 | div#left_column::before { | ||
| 263 | content: " "; | ||
| 264 | position: absolute; | ||
| 265 | left: 0; | ||
| 266 | top: 0; | ||
| 267 | width: 100%; | ||
| 268 | height: 100%; | ||
| 269 | box-sizing: border-box; | ||
| 270 | background-image: url(/images/left_column.png); | ||
| 271 | background-position: top right; | ||
| 272 | background-repeat: no-repeat; | ||
| 273 | z-index: -10; | ||
| 274 | } | ||
| 275 | div#left_column { | ||
| 276 | position: absolute; | ||
| 277 | left: 0px; | ||
| 278 | width: var(--left-col-width); | ||
| 279 | min-height: 100px; | ||
| 280 | text-align: right; | ||
| 281 | padding-right: var(--left-col-pad); /* left band total: 185px */ | ||
| 282 | } | ||
| 283 | |||
| 284 | div#left_column > a { | ||
| 285 | font-size: 0.8rem; | ||
| 286 | } | ||
| 137 | } | 287 | } |
| 138 | 288 | ||
| 139 | h4 { | 289 | div#center_column { |
| 140 | font-size: 1.0rem; | 290 | padding-bottom: 40px; |
| 141 | text-decoration: none; | ||
| 142 | } | 291 | } |
| 143 | 292 | ||
| 144 | #left_column { | 293 | @media(max-width: 1015px) { |
| 145 | line-height: 1.5em; | 294 | div#center_column { |
| 295 | padding: 0 15px 40px 15px; | ||
| 296 | } | ||
| 297 | } | ||
| 298 | |||
| 299 | @media(min-width: 1016px) { | ||
| 300 | div#center_column { | ||
| 301 | position: absolute; | ||
| 302 | background-color: Canvas; | ||
| 303 | left: var(--center-left); | ||
| 304 | width: var(--center-width); | ||
| 305 | } | ||
| 306 | } | ||
| 307 | |||
| 308 | @media(min-width:1016px) { | ||
| 309 | div#right_column { | ||
| 310 | position: absolute; | ||
| 311 | background-color: Canvas; | ||
| 312 | padding-left: var(--right-pad); | ||
| 313 | left: var(--right-left); /* = center-left + center-width */ | ||
| 314 | width: var(--right-width); /* right band total: 210px; 690 + 210 = 900, | ||
| 315 | 9px short of --page-width, absorbed | ||
| 316 | silently */ | ||
| 317 | height: 100px; | ||
| 318 | } | ||
| 146 | } | 319 | } |
| 147 | 320 | ||
| 148 | /*------------------main-navigation-------------------*/ | 321 | /* Mobile toolbar strip. */ |
| 322 | @media(max-width:1015px) { | ||
| 323 | #toolbox { | ||
| 324 | height: 30px; | ||
| 325 | } | ||
| 326 | } | ||
| 327 | |||
| 328 | /* Footer */ | ||
| 329 | #footer { | ||
| 330 | border-bottom: 2px solid #aeadad; | ||
| 331 | border-top: 2px solid #aeadad; | ||
| 332 | bottom: 0; | ||
| 333 | color: CanvasText; | ||
| 334 | } | ||
| 335 | |||
| 336 | #footer p { | ||
| 337 | margin: .5rem auto; | ||
| 338 | } | ||
| 339 | |||
| 340 | #footer a { | ||
| 341 | margin-left: 1rem; | ||
| 342 | margin-right: 1rem; | ||
| 343 | color: CanvasText; | ||
| 344 | } | ||
| 345 | |||
| 346 | /* ========================================================================== | ||
| 347 | 6. MAIN NAVIGATION & BURGER MENU | ||
| 348 | ========================================================================== | ||
| 349 | ASSUMES: --burger-right; the checkbox-hack markup order in the layout | ||
| 350 | (#toolbox precedes #left_column — the `#toolbox ~ #left_column` | ||
| 351 | sibling selectors break if the layout reorders them); left_column.png | ||
| 352 | behind the desktop nav. Mobile menu is pure CSS: .menu-checkbox state | ||
| 353 | drives both the burger-to-X morph and the menu slide. | ||
| 354 | COLLISION SET (order preserved): div.main_navigation ul base rule | ||
| 355 | before its min-width override — the override's `padding: 0` must win. | ||
| 356 | ========================================================================== */ | ||
| 149 | 357 | ||
| 150 | div.main_navigation ul { | 358 | div.main_navigation ul { |
| 151 | margin-left: 0; | 359 | margin-left: 0; |
| 152 | padding-left: 0; | 360 | padding-left: 15px; /* dead duplicate `padding-left: 0` removed */ |
| 153 | padding-left: 15px; | ||
| 154 | padding-right: 15px; | 361 | padding-right: 15px; |
| 155 | text-align: left; | 362 | text-align: left; |
| 156 | } | 363 | } |
| 157 | 364 | ||
| 158 | 365 | ||
| 159 | @media(max-width:1016px) { | 366 | @media(max-width:1015px) { |
| 160 | div.main_navigation li:not(:first-child):before { | 367 | div.main_navigation li:not(:first-child):before { |
| 161 | content: '•'; | 368 | content: '•'; |
| 162 | margin-left: .3rem; | 369 | margin-left: .3rem; |
| @@ -203,7 +410,125 @@ div.main_navigation a.inactive, div.main_navigation span.inactive, div#left_colu | |||
| 203 | color: color-mix(in srgb, CanvasText, #808080 25%); | 410 | color: color-mix(in srgb, CanvasText, #808080 25%); |
| 204 | } | 411 | } |
| 205 | 412 | ||
| 206 | /*------------------calendar-featured-tags-------------------*/ | 413 | .menu-checkbox { |
| 414 | display: none; | ||
| 415 | } | ||
| 416 | |||
| 417 | .burger-menu { | ||
| 418 | display: none; | ||
| 419 | cursor: pointer; | ||
| 420 | } | ||
| 421 | |||
| 422 | #burger-div { | ||
| 423 | position: absolute; | ||
| 424 | right: var(--burger-right); /* anchors to the viewport on mobile, | ||
| 425 | see section 5 */ | ||
| 426 | } | ||
| 427 | |||
| 428 | /* Mobile styles */ | ||
| 429 | @media (max-width: 1015px) { | ||
| 430 | .burger-menu { | ||
| 431 | position: absolute; | ||
| 432 | display: flex; | ||
| 433 | flex-direction: column; | ||
| 434 | transition: transform 0.3s ease, opacity 0.3s ease; | ||
| 435 | } | ||
| 436 | |||
| 437 | .burger-menu span { | ||
| 438 | display: inline-flex; | ||
| 439 | width: 26px; | ||
| 440 | height: 4px; | ||
| 441 | background: color-mix(in srgb, CanvasText, #808080 25%); | ||
| 442 | border-radius: 2px; | ||
| 443 | margin: 3px 0; | ||
| 444 | transition: max-height 0.5s ease-in-out, opacity 0.5s ease-in-out, transform 0.5s ease-in-out; | ||
| 445 | } | ||
| 446 | |||
| 447 | #left_column .main_navigation { | ||
| 448 | width: 100%; | ||
| 449 | position: relative; | ||
| 450 | } | ||
| 451 | |||
| 452 | #toolbox ~ #left_column .main_navigation ul { | ||
| 453 | transition: max-height 0.2s ease-in-out, transform 0.4s ease-in-out, opacity 0.4s ease; | ||
| 454 | overflow: hidden; | ||
| 455 | text-align: center; | ||
| 456 | } | ||
| 457 | |||
| 458 | #toolbox ~ #left_column .main_navigation:first-of-type ul { | ||
| 459 | transform: translateY(-200px); | ||
| 460 | max-height: 0; | ||
| 461 | opacity: 0; | ||
| 462 | z-index: -10; | ||
| 463 | } | ||
| 464 | |||
| 465 | /* Show menu when checkbox is checked */ | ||
| 466 | #toolbox:has(.menu-checkbox:checked) ~ #left_column .main_navigation ul { | ||
| 467 | max-height: 400px; | ||
| 468 | opacity: 1; | ||
| 469 | transform: translateY(0); | ||
| 470 | } | ||
| 471 | |||
| 472 | .menu-checkbox:checked + .burger-menu span:nth-child(1) { transform: translateY(10px) rotate(45deg); } | ||
| 473 | .menu-checkbox:checked + .burger-menu span:nth-child(2) { opacity: 0; } | ||
| 474 | .menu-checkbox:checked + .burger-menu span:nth-child(3) { transform: translateY(-10px) rotate(-45deg); } | ||
| 475 | } | ||
| 476 | |||
| 477 | /* ========================================================================== | ||
| 478 | 7. SEARCH | ||
| 479 | ========================================================================== | ||
| 480 | ASSUMES: --header-height, --search-left (desktop box hangs from | ||
| 481 | header.png's bottom edge); viewport anchoring on mobile (section 5). | ||
| 482 | ========================================================================== */ | ||
| 483 | |||
| 484 | /* Search bar */ | ||
| 485 | @media(min-width:1016px) { | ||
| 486 | div#search { | ||
| 487 | position: absolute; | ||
| 488 | top: var(--header-height); /* bottom edge of header.png */ | ||
| 489 | left: var(--search-left); | ||
| 490 | height: 25px; | ||
| 491 | vertical-align: top; | ||
| 492 | } | ||
| 493 | } | ||
| 494 | |||
| 495 | @media(max-width:1015px) { | ||
| 496 | div#search { | ||
| 497 | position: absolute; | ||
| 498 | left: 25px; /* mobile toolbar offset; anchors to the viewport */ | ||
| 499 | height: 25px; | ||
| 500 | } | ||
| 501 | } | ||
| 502 | |||
| 503 | div#search input { | ||
| 504 | color: CanvasText !important; | ||
| 505 | } | ||
| 506 | div#search input[type=search], | ||
| 507 | div#search input[type=text] { | ||
| 508 | display: block; | ||
| 509 | padding: 2px; | ||
| 510 | margin: 0px; | ||
| 511 | height: 25px; | ||
| 512 | width: 132px; | ||
| 513 | line-height: 20px; | ||
| 514 | border: solid #808080 1px; | ||
| 515 | background-color: Canvas; | ||
| 516 | border-radius: 5px; | ||
| 517 | margin-right: 5px; | ||
| 518 | text-indent: 0.5rem; | ||
| 519 | } | ||
| 520 | |||
| 521 | /* ========================================================================== | ||
| 522 | 8. SIDEBAR WIDGETS (calendar, tags, featured, open erfas) | ||
| 523 | ========================================================================== | ||
| 524 | ASSUMES: right-column geometry from section 5; div.main_navigation h2 | ||
| 525 | also picks up the grouped border rule below. | ||
| 526 | COLLISION SET (order preserved verbatim): the grouped h2 border rule, | ||
| 527 | then the same-specificity div#frontpage_calendar h2 override | ||
| 528 | (border-top: none), then the min-width block that re-adds a border-top | ||
| 529 | for desktop. Moving the override above the group rule would grow a | ||
| 530 | border on the calendar heading. | ||
| 531 | ========================================================================== */ | ||
| 207 | 532 | ||
| 208 | div#frontpage_calendar { | 533 | div#frontpage_calendar { |
| 209 | display: none; | 534 | display: none; |
| @@ -246,7 +571,7 @@ div#open_erfas_today .event_time { | |||
| 246 | color: color-mix(in srgb, CanvasText, #808080); | 571 | color: color-mix(in srgb, CanvasText, #808080); |
| 247 | } | 572 | } |
| 248 | 573 | ||
| 249 | @media(max-width:1016px) { | 574 | @media(max-width:1015px) { |
| 250 | div#tags li { | 575 | div#tags li { |
| 251 | list-style-type: none; | 576 | list-style-type: none; |
| 252 | display: inline-block; | 577 | display: inline-block; |
| @@ -278,6 +603,8 @@ div#frontpage_calendar ul, div#tags ul, div#featured_articles ul, div#open_erfas | |||
| 278 | line-height: 1.5em; | 603 | line-height: 1.5em; |
| 279 | } | 604 | } |
| 280 | 605 | ||
| 606 | /* ODDITY, kept: per-widget icon paddings — delete when these icons rotate | ||
| 607 | out of the featured box */ | ||
| 281 | div#featured_articles #ds_icon img { | 608 | div#featured_articles #ds_icon img { |
| 282 | padding-top: 10px; | 609 | padding-top: 10px; |
| 283 | } | 610 | } |
| @@ -312,302 +639,74 @@ div#featured_articles img { | |||
| 312 | filter: grayscale(1); | 639 | filter: grayscale(1); |
| 313 | } | 640 | } |
| 314 | 641 | ||
| 315 | dt { | 642 | #tags ul li { |
| 316 | font-weight: bold; | 643 | margin-block-start: 0.5rem; |
| 317 | margin-bottom: 1em; | 644 | margin-block-end: 0.5rem; |
| 318 | } | ||
| 319 | |||
| 320 | dd { | ||
| 321 | margin-bottom: 1em; | ||
| 322 | } | ||
| 323 | |||
| 324 | /*--------------------------------------------------------------*/ | ||
| 325 | |||
| 326 | div.author_and_date { | ||
| 327 | font-style: italic; | ||
| 328 | font-family: Georgia; | ||
| 329 | color: color-mix(in srgb, CanvasText, #808080); | ||
| 330 | padding-top: .2rem; | ||
| 331 | padding-bottom: .8rem; | ||
| 332 | } | ||
| 333 | |||
| 334 | @media(min-width:1016px) { | ||
| 335 | div#left_column::before { | ||
| 336 | content: " "; | ||
| 337 | position: absolute; | ||
| 338 | left: 0; | ||
| 339 | top: 0; | ||
| 340 | width: 100%; | ||
| 341 | height: 100%; | ||
| 342 | box-sizing: border-box; | ||
| 343 | background-image: url(/images/left_column.png); | ||
| 344 | background-position: top right; | ||
| 345 | background-repeat: no-repeat; | ||
| 346 | z-index: -10; | ||
| 347 | } | ||
| 348 | div#left_column { | ||
| 349 | position: absolute; | ||
| 350 | left: 0px; | ||
| 351 | width: 135px; | ||
| 352 | min-height: 100px; | ||
| 353 | text-align: right; | ||
| 354 | padding-right: 50px; | ||
| 355 | } | ||
| 356 | |||
| 357 | div#left_column > a { | ||
| 358 | font-size: 0.8rem; | ||
| 359 | } | ||
| 360 | } | ||
| 361 | |||
| 362 | .menu-checkbox { | ||
| 363 | display: none; | ||
| 364 | } | ||
| 365 | |||
| 366 | .burger-menu { | ||
| 367 | display: none; | ||
| 368 | cursor: pointer; | ||
| 369 | } | ||
| 370 | |||
| 371 | #burger-div { | ||
| 372 | position: absolute; | ||
| 373 | right: 54px; | ||
| 374 | } | ||
| 375 | |||
| 376 | /* Mobile styles */ | ||
| 377 | @media (max-width: 1016px) { | ||
| 378 | .burger-menu { | ||
| 379 | position: absolute; | ||
| 380 | display: flex; | ||
| 381 | flex-direction: column; | ||
| 382 | transition: transform 0.3s ease, opacity 0.3s ease; | ||
| 383 | } | ||
| 384 | |||
| 385 | .burger-menu span { | ||
| 386 | display: inline-flex; | ||
| 387 | width: 26px; | ||
| 388 | height: 4px; | ||
| 389 | background: color-mix(in srgb, CanvasText, #808080 25%); | ||
| 390 | border-radius: 2px; | ||
| 391 | margin: 3px 0; | ||
| 392 | transition: max-height 0.5s ease-in-out, opacity 0.5s ease-in-out, transform 0.5s ease-in-out; | ||
| 393 | } | ||
| 394 | |||
| 395 | #left_column .main_navigation { | ||
| 396 | width: 100%; | ||
| 397 | position: relative; | ||
| 398 | } | ||
| 399 | |||
| 400 | #toolbox ~ #left_column .main_navigation ul { | ||
| 401 | transition: max-height 0.2s ease-in-out, transform 0.4s ease-in-out, opacity 0.4s ease; | ||
| 402 | overflow: hidden; | ||
| 403 | text-align: center; | ||
| 404 | } | ||
| 405 | |||
| 406 | #toolbox ~ #left_column .main_navigation:first-of-type ul { | ||
| 407 | transform: translateY(-200px); | ||
| 408 | max-height: 0; | ||
| 409 | opacity: 0; | ||
| 410 | z-index: -10; | ||
| 411 | } | ||
| 412 | |||
| 413 | /* Show menu when checkbox is checked */ | ||
| 414 | #toolbox:has(.menu-checkbox:checked) ~ #left_column .main_navigation ul { | ||
| 415 | max-height: 400px; | ||
| 416 | opacity: 1; | ||
| 417 | transform: translateY(0); | ||
| 418 | } | ||
| 419 | |||
| 420 | .menu-checkbox:checked + .burger-menu span:nth-child(1) { transform: translateY(10px) rotate(45deg); } | ||
| 421 | .menu-checkbox:checked + .burger-menu span:nth-child(2) { opacity: 0; } | ||
| 422 | .menu-checkbox:checked + .burger-menu span:nth-child(3) { transform: translateY(-10px) rotate(-45deg); } | ||
| 423 | } | ||
| 424 | |||
| 425 | div#center_column { | ||
| 426 | padding-bottom: 40px; | ||
| 427 | } | ||
| 428 | |||
| 429 | @media(max-width: 1016px) { | ||
| 430 | div#center_column { | ||
| 431 | padding: 0 15px 40px 15px; | ||
| 432 | } | ||
| 433 | } | ||
| 434 | |||
| 435 | @media(min-width: 1016px) { | ||
| 436 | div#center_column { | ||
| 437 | position: absolute; | ||
| 438 | background-color: Canvas; | ||
| 439 | left: 200px; | ||
| 440 | width: 490px; | ||
| 441 | } | ||
| 442 | } | ||
| 443 | |||
| 444 | @media(min-width:1016px) { | ||
| 445 | div#right_column { | ||
| 446 | position: absolute; | ||
| 447 | background-color: Canvas; | ||
| 448 | padding-left: 55px; | ||
| 449 | left: 690px; | ||
| 450 | width: 155px; | ||
| 451 | height: 100px; | ||
| 452 | } | ||
| 453 | } | ||
| 454 | |||
| 455 | div.teaser_ruler { | ||
| 456 | border-top: 1px solid #CCCCCC; | ||
| 457 | border-bottom: 1px dashed #CCCCCC; | ||
| 458 | height: 3px; | ||
| 459 | margin-top: 30px; | ||
| 460 | } | ||
| 461 | |||
| 462 | div.article_partial { | ||
| 463 | margin-bottom: 30px; | ||
| 464 | } | ||
| 465 | |||
| 466 | |||
| 467 | div.article_partial p.excerpt { | ||
| 468 | color: CanvasText; | ||
| 469 | } | ||
| 470 | |||
| 471 | /* Search bar */ | ||
| 472 | @media(min-width:1016px) { | ||
| 473 | div#search { | ||
| 474 | position: absolute; | ||
| 475 | top: 145px; | ||
| 476 | left: 676px; | ||
| 477 | height: 25px; | ||
| 478 | vertical-align: top; | ||
| 479 | } | ||
| 480 | } | ||
| 481 | |||
| 482 | @media(max-width:1016px) { | ||
| 483 | div#search { | ||
| 484 | position: absolute; | ||
| 485 | left: 25px; | ||
| 486 | height: 25px; | ||
| 487 | } | ||
| 488 | } | ||
| 489 | |||
| 490 | div#search input { | ||
| 491 | color: CanvasText !important; | ||
| 492 | } | ||
| 493 | div#search input[type=search], | ||
| 494 | div#search input[type=text] { | ||
| 495 | display: block; | ||
| 496 | padding: 2px; | ||
| 497 | margin: 0px; | ||
| 498 | height: 25px; | ||
| 499 | width: 132px; | ||
| 500 | line-height: 20px; | ||
| 501 | border: solid #808080 1px; | ||
| 502 | background-color: Canvas; | ||
| 503 | border-radius: 5px; | ||
| 504 | margin-right: 5px; | ||
| 505 | text-indent: 0.5rem; | ||
| 506 | } | 645 | } |
| 507 | 646 | ||
| 508 | /* Header */ | 647 | /* ========================================================================== |
| 509 | #header img, | 648 | 9. ARTICLE CONTENT |
| 510 | #header > a { | 649 | ========================================================================== |
| 511 | display: block; | 650 | ASSUMES: center-column geometry from section 5; TinyMCE emits the |
| 512 | line-height: 0; | 651 | inline-image classes (style-src unsafe-inline in the CSP exists partly |
| 513 | } | 652 | for its img[style] output). |
| 653 | ========================================================================== */ | ||
| 514 | 654 | ||
| 515 | /* Main section */ | 655 | /* Main section */ |
| 516 | .article, .article_partial { | 656 | .article, .article_partial { |
| 517 | text-align: left; | 657 | text-align: left; |
| 518 | } | 658 | } |
| 519 | 659 | ||
| 520 | h1, h2, h3 { | 660 | div#center_column h2 a { |
| 521 | word-wrap: anywhere; | ||
| 522 | hyphens:auto; | ||
| 523 | } | ||
| 524 | |||
| 525 | .pagination { | ||
| 526 | margin-bottom: .5rem; | ||
| 527 | } | ||
| 528 | |||
| 529 | li { | ||
| 530 | line-height: 1.5rem; | ||
| 531 | margin-block-start: 1rem; | ||
| 532 | margin-block-end: 1rem; | ||
| 533 | } | ||
| 534 | |||
| 535 | #tags ul li { | ||
| 536 | margin-block-start: 0.5rem; | ||
| 537 | margin-block-end: 0.5rem; | ||
| 538 | } | ||
| 539 | |||
| 540 | /* Footer */ | ||
| 541 | #footer { | ||
| 542 | border-bottom: 2px solid #aeadad; | ||
| 543 | border-top: 2px solid #aeadad; | ||
| 544 | bottom: 0; | ||
| 545 | color: CanvasText; | 661 | color: CanvasText; |
| 662 | text-decoration: none; | ||
| 546 | } | 663 | } |
| 547 | 664 | ||
| 548 | #footer > br { | 665 | div#center_column h2 a:hover { |
| 549 | display: none; | 666 | color: color-mix(in srgb, CanvasText, #808080 50%); |
| 550 | } | 667 | } |
| 551 | 668 | ||
| 552 | #footer p { | 669 | div#center_column h2.headline { |
| 553 | margin: .5rem auto; | 670 | margin-top: 10px; |
| 554 | } | 671 | } |
| 555 | 672 | ||
| 556 | #footer a { | 673 | div#center_column .article_partial h2.headline { |
| 557 | margin-left: 1rem; | 674 | padding-top: 30px; |
| 558 | margin-right: 1rem; | 675 | margin-bottom: 0.3rem; |
| 559 | color: CanvasText; | 676 | border-top: 2px solid #cccccc; |
| 560 | } | 677 | } |
| 561 | 678 | ||
| 562 | @media(max-width:1016px) { | 679 | /* except for erfa list */ |
| 563 | #toolbox { | 680 | div#center_column .chapter_partial h2.headline { |
| 564 | display: relative; | 681 | border-top: none; |
| 565 | height: 30px; | ||
| 566 | } | ||
| 567 | } | 682 | } |
| 568 | 683 | ||
| 569 | /* Light and dark mode button magic */ | 684 | div.article_partial h2 a { |
| 570 | @media(max-width:1016px) { | 685 | text-decoration: none; |
| 571 | div#light-mode-div { | ||
| 572 | position: absolute; | ||
| 573 | left: 170px; | ||
| 574 | } | ||
| 575 | } | 686 | } |
| 576 | 687 | ||
| 577 | @media(min-width:1016px) { | 688 | div.article_partial { |
| 578 | div#light-mode-div { | 689 | margin-bottom: 30px; |
| 579 | position: absolute; | ||
| 580 | top: 145px; | ||
| 581 | left: 816px; | ||
| 582 | } | ||
| 583 | } | ||
| 584 | input#light-mode[type="checkbox"] { | ||
| 585 | display: none; | ||
| 586 | } | 690 | } |
| 587 | 691 | ||
| 588 | label[for=light-mode] { | ||
| 589 | font-size: 25px; | ||
| 590 | user-select: none; | ||
| 591 | cursor: pointer; | ||
| 592 | filter: grayscale(1) contrast(10%); | ||
| 593 | } | ||
| 594 | 692 | ||
| 595 | .hide-me { | 693 | div.article_partial p.excerpt { |
| 596 | display: none; | 694 | color: CanvasText; |
| 597 | } | 695 | } |
| 598 | 696 | ||
| 599 | /* Temporary glowing style for easterhegg 22 */ | 697 | div.author_and_date { |
| 600 | #eh22_icon img { | 698 | font-style: italic; |
| 601 | animation: animate 3s linear infinite; | 699 | font-family: Georgia; |
| 700 | color: color-mix(in srgb, CanvasText, #808080); | ||
| 701 | padding-top: .2rem; | ||
| 702 | padding-bottom: .8rem; | ||
| 602 | } | 703 | } |
| 603 | 704 | ||
| 604 | @keyframes animate { | 705 | div.teaser_ruler { |
| 605 | from { | 706 | border-top: 1px solid #CCCCCC; |
| 606 | filter: sepia(100%) hue-rotate(0deg); | 707 | border-bottom: 1px dashed #CCCCCC; |
| 607 | } | 708 | height: 3px; |
| 608 | to { | 709 | margin-top: 30px; |
| 609 | filter: sepia(100%) hue-rotate(360deg); | ||
| 610 | } | ||
| 611 | } | 710 | } |
| 612 | 711 | ||
| 613 | .chapter_partial_layout { | 712 | .chapter_partial_layout { |
| @@ -648,3 +747,11 @@ label[for=light-mode] { | |||
| 648 | float: right; | 747 | float: right; |
| 649 | margin-left: 1rem; | 748 | margin-left: 1rem; |
| 650 | } | 749 | } |
| 750 | |||
| 751 | #asset_credits .glightbox-desc { | ||
| 752 | display: none; | ||
| 753 | } | ||
| 754 | |||
| 755 | #asset_credits .headline_credit { | ||
| 756 | display: block; | ||
| 757 | } | ||
