styles.css (10.0 KB)
1 :root { 2 --color-shift-ms: 350ms; 3 --type-char-ms: 0.5ms; 4 --event-color: antiquewhite; 5 --link-pad: 6px; 6 } 7 8 html, body { 9 margin: 0; 10 height: 100%; 11 overflow: hidden; 12 overscroll-behavior: none; 13 background-color: var(--event-color); 14 transition: background-color var(--color-shift-ms) ease-in-out; 15 font-family: serif; 16 } 17 18 ::selection { 19 background: antiquewhite; 20 } 21 22 #boxes { 23 display: flex; 24 flex-direction: row; 25 height: 100vh; 26 height: 100dvh; 27 } 28 #left-box { 29 width: 50%; 30 height: 100%; 31 box-sizing: border-box; 32 position: relative; 33 overflow: hidden; 34 -webkit-user-select: none; 35 user-select: none; 36 } 37 #right-box { 38 width: 50%; 39 height: 100%; 40 box-sizing: border-box; 41 container: text-box / inline-size; 42 padding: 22px; 43 padding-top: 14px; 44 margin: 0; 45 color: black; 46 overflow-y: scroll; 47 overscroll-behavior: contain; 48 scrollbar-color: #00000060 transparent; 49 background-color: var(--event-color); 50 transition: background-color var(--color-shift-ms) ease-in-out; 51 } 52 53 #right-box ::selection { 54 background: black; 55 color: var(--event-color); 56 } 57 #right-box h1 { 58 margin: 0; 59 font-weight: normal; 60 font-size: 38px; 61 margin-bottom: -3px; 62 min-height: 44px; 63 } 64 #right-box p, #text-content { 65 font-size: 22px; 66 line-height: 29px; 67 margin-top: 16px; 68 } 69 #text-content > p { 70 margin: 0; 71 } 72 .detail-list { 73 margin: 16px 0 0; 74 padding-left: 1.2em; 75 list-style-position: outside; 76 } 77 .detail-list li { 78 margin-top: 2px; 79 list-style: disc; 80 } 81 .detail-list li::marker { 82 color: transparent; 83 } 84 .detail-list li.li-typing::marker { 85 color: currentColor; 86 } 87 88 .intro-list { 89 display: grid; 90 grid-template-columns: minmax(0, max-content) minmax(0, 1fr) max-content minmax(0, 1fr) max-content; 91 column-gap: 16px; 92 row-gap: 2px; 93 font-size: 22px; 94 line-height: 29px; 95 } 96 .intro-row { 97 display: grid; 98 grid-column: 1 / -1; 99 grid-template-columns: subgrid; 100 align-items: baseline; 101 padding: var(--link-pad); 102 margin: 0 calc(-1 * var(--link-pad)); 103 cursor: pointer; 104 -webkit-tap-highlight-color: transparent; 105 } 106 .intro-name { 107 grid-column: 1; 108 min-width: 0; 109 white-space: nowrap; 110 overflow: hidden; 111 text-overflow: ellipsis; 112 text-decoration: underline; 113 text-underline-offset: 3px; 114 } 115 .intro-when { 116 grid-column: 3; 117 white-space: nowrap; 118 } 119 .intro-where { 120 grid-column: 5; 121 min-width: 0; 122 white-space: nowrap; 123 overflow: hidden; 124 text-overflow: ellipsis; 125 } 126 @media (hover: hover) { 127 .intro-row:hover { 128 background: black; 129 color: antiquewhite; 130 } 131 .intro-row:hover .intro-name { 132 text-decoration: none; 133 } 134 } 135 136 /* panel.js drops columns by class when the title would otherwise ellipsize: date first 137 (.cols-2), then location (.cols-1). Title is always shown. */ 138 .intro-list.cols-2 { 139 grid-template-columns: minmax(0, max-content) minmax(0, 1fr) max-content; 140 } 141 .intro-list.cols-2 .intro-when { 142 display: none; 143 } 144 .intro-list.cols-2 .intro-where { 145 grid-column: 3; 146 } 147 .intro-list.cols-1 { 148 grid-template-columns: minmax(0, 1fr); 149 } 150 .intro-list.cols-1 .intro-when, 151 .intro-list.cols-1 .intro-where { 152 display: none; 153 } 154 155 #text-content, #text-title, #action-wrap { 156 transition: opacity 0.125s ease-in-out; 157 } 158 .type-hidden { 159 visibility: hidden; 160 } 161 #text-content.fading, #text-title.fading, #action-wrap.fading { 162 opacity: 0; 163 } 164 165 #action-wrap { 166 margin-top: 25px; 167 margin-bottom: 50px; 168 text-align: center; 169 } 170 .action-row { 171 font-size: 22px; 172 line-height: 29px; 173 } 174 .action-row + .action-row { 175 margin-top: 18px; 176 } 177 .action-link { 178 display: inline-block; 179 color: #000000; 180 text-decoration: underline; 181 text-underline-offset: 3px; 182 padding: var(--link-pad); 183 margin: calc(-1 * var(--link-pad)); 184 cursor: pointer; 185 -webkit-tap-highlight-color: transparent; 186 } 187 .intro-row, .action-link { 188 position: relative; 189 } 190 .intro-row::before, .intro-row::after, 191 .action-link::before, .action-link::after { 192 content: ""; 193 position: absolute; 194 left: 0; 195 right: 0; 196 height: 3px; 197 } 198 .intro-row::before, .action-link::before { 199 top: -3px; 200 } 201 .intro-row::after, .action-link::after { 202 bottom: -3px; 203 } 204 @media (hover: hover) { 205 a.action-link:hover { 206 background: black; 207 color: var(--event-color); 208 text-decoration: none; 209 } 210 } 211 212 .action-typing { 213 position: relative; 214 display: inline-block; 215 text-align: left; 216 white-space: pre; 217 } 218 .action-sizer { 219 visibility: hidden; 220 } 221 .action-shown { 222 position: absolute; 223 left: var(--link-pad); 224 top: var(--link-pad); 225 text-decoration: underline; 226 text-underline-offset: 3px; 227 } 228 229 #map-stage { 230 position: absolute; 231 top: 50%; 232 left: 50%; 233 transform-origin: center center; 234 will-change: transform; 235 } 236 #map-stage:not([style*="width"]) { 237 inset: 0; 238 top: 0; 239 left: 0; 240 } 241 242 #map-container { 243 height: 100%; 244 } 245 246 #map-container .leaflet-tile, 247 #map-container .leaflet-tile-container, 248 #map-container canvas.leaflet-tile-container { 249 pointer-events: none; 250 } 251 252 #map-container .leaflet-zoom-anim .leaflet-zoom-animated { 253 transition: transform 0.12s cubic-bezier(0, 0, 0.25, 1); 254 } 255 256 #map-container.map-grabbing, 257 #map-container.map-grabbing .leaflet-grab, 258 #map-container.map-grabbing .leaflet-interactive { 259 cursor: grabbing !important; 260 } 261 262 #compass { 263 display: none; 264 position: absolute; 265 right: 12px; 266 bottom: 12px; 267 z-index: 1000; 268 width: 48px; 269 height: 48px; 270 border-radius: 50%; 271 background: rgba(255, 255, 255, 0.7); 272 -webkit-backdrop-filter: blur(8px); 273 backdrop-filter: blur(8px); 274 -webkit-tap-highlight-color: transparent; 275 box-shadow: 0 1px 3px #00000040; 276 transition: box-shadow 0.12s linear; 277 align-items: center; 278 justify-content: center; 279 pointer-events: none; 280 } 281 #compass.compass-enabled { 282 display: flex; 283 } 284 @media (pointer: coarse) { 285 #compass::after { 286 content: ""; 287 position: absolute; 288 top: 0; 289 left: 0; 290 right: -12px; 291 bottom: -12px; 292 border-radius: 24px 0 0 0; 293 } 294 } 295 #compass svg { 296 display: block; 297 transform-origin: center center; 298 transform: rotate(var(--compass-angle, 0deg)); 299 } 300 #compass .needle-n { fill: #e8483a; } 301 #compass .needle-s { fill: #b8bcc2; } 302 #compass .needle-hub { fill: #fafafa; stroke: #b8bcc2; stroke-width: 1; } 303 #compass.active { 304 box-shadow: 0 1px 3px #00000040, inset 0 0 0 2.5px cornflowerblue; 305 } 306 #compass.active.paused { 307 box-shadow: 0 1px 3px #00000040, inset 0 0 0 2.5px #b8bcc2; 308 } 309 #compass .compass-ring { 310 position: absolute; 311 inset: 0; 312 transform: rotate(-90deg); 313 pointer-events: none; 314 } 315 #compass .ring-arc { 316 fill: none; 317 stroke: cornflowerblue; 318 stroke-width: 2.5; 319 stroke-dasharray: 100; 320 stroke-dashoffset: 100; 321 } 322 323 .ladybug-line-svg { 324 position: absolute; 325 top: 0; 326 left: 0; 327 width: 1px; 328 height: 1px; 329 pointer-events: none; 330 overflow: visible; 331 display: none; 332 } 333 .ladybug-line-svg.visible { 334 display: block; 335 } 336 .ladybug-line { 337 stroke-width: 4; 338 stroke-linecap: round; 339 fill: none; 340 } 341 342 .ladybug-pin { 343 width: 40px; 344 height: 40px; 345 display: flex; 346 align-items: center; 347 justify-content: center; 348 font-size: 30px; 349 line-height: 1; 350 transform: rotate(var(--pin-counter, 0deg)); 351 transform-origin: center center; 352 opacity: 0; 353 transition: opacity 0.4s ease; 354 } 355 .ladybug-pin.visible { 356 opacity: 1; 357 } 358 359 .map-error { 360 display: flex; 361 align-items: center; 362 justify-content: center; 363 box-sizing: border-box; 364 padding: 22px; 365 background: #f0eee4; 366 color: black; 367 font-weight: normal; 368 font-size: 38px; 369 text-align: center; 370 -webkit-user-select: none; 371 user-select: none; 372 } 373 374 .event-pin { 375 width: 48px; 376 height: 48px; 377 box-sizing: border-box; 378 padding: 4px 6px; 379 transform: rotate(var(--pin-counter, 0deg)); 380 transform-origin: center center; 381 display: flex; 382 flex-direction: column; 383 justify-content: center; 384 font-family: -apple-system, Arial, Helvetica, sans-serif; 385 line-height: 1.1; 386 color: black; 387 text-align: center; 388 box-shadow: 0 1px 3px #00000040; 389 cursor: pointer; 390 border-radius: 0; 391 transition: border-radius 150ms ease-in-out; 392 } 393 .event-pin.active { 394 border-radius: 50%; 395 } 396 .event-pin .pin-month { 397 font-size: 11px; 398 text-transform: uppercase; 399 letter-spacing: 0.5px; 400 } 401 .event-pin .pin-day { 402 font-size: 18px; 403 font-weight: bold; 404 } 405 406 @media (orientation: portrait) { 407 #boxes { 408 flex-direction: column; 409 } 410 #left-box, #right-box { 411 width: 100%; 412 height: 50%; 413 } 414 } 415 416 #flyer { 417 display: none; 418 } 419 420 #flyer.flyer-measuring { 421 display: flex; 422 flex-direction: column; 423 position: fixed; 424 left: -9999px; 425 top: 0; 426 width: 197.3mm; 427 height: 266.7mm; 428 box-sizing: border-box; 429 font-family: serif; 430 color: #000; 431 background: #fff; 432 } 433 434 .flyer-body { 435 flex: 1 1 auto; 436 display: flex; 437 flex-direction: column; 438 min-height: 0; 439 overflow: hidden; 440 } 441 .flyer-title { 442 margin: 1.5mm 0 7mm; 443 font-weight: normal; 444 font-size: 48pt; 445 line-height: 1.05; 446 overflow-wrap: break-word; 447 } 448 .flyer-flow { 449 flex: 1 1 auto; 450 min-height: 0; 451 display: flow-root; 452 } 453 .flyer-desc { 454 margin: 0; 455 text-align: justify; 456 } 457 .flyer-details { 458 margin: 7mm 0; 459 padding-left: 1.2em; 460 list-style: disc; 461 } 462 .flyer-details li { 463 margin-top: 0.15em; 464 } 465 466 .flyer-flow > .flyer-qr { 467 float: right; 468 margin-left: 7mm; 469 margin-bottom: 7mm; 470 margin-top: 2mm; 471 } 472 473 .flyer-tabs { 474 flex: 0 0 auto; 475 display: flex; 476 height: 78mm; 477 border-top: 1px dashed #000; 478 } 479 .flyer-tab { 480 flex: 1 1 0; 481 position: relative; 482 overflow: hidden; 483 border-left: 1px dashed #000; 484 } 485 .flyer-tab:last-child { 486 border-right: 1px dashed #000; 487 } 488 .flyer-tab-inner { 489 position: absolute; 490 top: 50%; 491 left: 50%; 492 width: 78mm; 493 height: 19.73mm; 494 transform: translate(-50%, -50%) rotate(90deg); 495 transform-origin: center center; 496 box-sizing: border-box; 497 padding: 2.5mm 2.5mm 2.5mm 1.5mm; 498 display: flex; 499 flex-direction: row; 500 align-items: center; 501 justify-content: center; 502 gap: 2.5mm; 503 overflow: hidden; 504 font-size: 7pt; 505 } 506 .flyer-tab-text { 507 flex: 1 1 auto; 508 min-width: 0; 509 text-align: left; 510 } 511 .flyer-tab-title { 512 font-size: 1.3em; 513 font-weight: bold; 514 line-height: 1.1; 515 overflow-wrap: break-word; 516 } 517 .flyer-tab-when, 518 .flyer-tab-where { 519 margin-top: 0.1em; 520 line-height: 1.15; 521 } 522 .flyer-tab .flyer-qr { 523 flex: 0 0 auto; 524 } 525 526 @page { 527 size: auto; 528 margin: 0; 529 } 530 531 @media print { 532 .flyer-print * { 533 -webkit-print-color-adjust: exact !important; 534 print-color-adjust: exact !important; 535 } 536 html.flyer-print, .flyer-print body { 537 background: #fff !important; 538 } 539 .flyer-print #boxes { 540 display: none !important; 541 } 542 .flyer-print #flyer { 543 display: flex !important; 544 flex-direction: column; 545 width: 197.3mm; 546 height: 266.7mm; 547 margin: 6.35mm auto; 548 box-sizing: border-box; 549 font-family: serif; 550 color: #000; 551 background: #fff; 552 } 553 }