Changeset 102d2f0 in Klonkt


Ignore:
Timestamp:
06/14/2026 11:12:05 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
67d4067
Parents:
ddecd9a
Message:

fix: tablet/auto full-player overrides now win (cascade order) + cover

My tablet media query was BEFORE the base sheet rules (.audio-sheet-cover/
info/controls at ~446+), so the base overrode the tablet overrides -> cover
stayed 320px, buttons small. Block moved to AFTER the base rules. Cover now
scales with 48vh, play 108px, panel full-width. audio.css v=2->v=3.

(Verified live via Chrome at 768-1199px: panel full-width, cover ~437px at
tablet height, large buttons.)

Co-Authored-By: Claude <noreply@…>

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/assets/css/audio.css

    rddecd9a r102d2f0  
    377377}
    378378
     379/* (De grote tablet/auto-variant staat onderaan deze sectie — NÁ de basis cover/
     380   info/controls-regels — anders overschrijft de basis die overrides.) */
     381
     382.audio-sheet-panel.is-dragging {
     383  transition: none;
     384  will-change: transform;
     385}
     386[data-theme="dark"] .audio-sheet-panel {
     387  background: var(--paper, #1a1a1a);
     388  box-shadow: 0 -20px 60px rgba(0, 0, 0, .5);
     389}
     390
     391.audio-sheet-drag-zone {
     392  flex-shrink: 0;
     393  display: flex;
     394  flex-direction: column;
     395  align-items: stretch;
     396  gap: 1rem;
     397  /* MUST be 'none' so pointer events reach JS (drag-down-to-close handler).
     398     'pan-y' would let the browser claim the vertical gesture for scroll. */
     399  touch-action: none;
     400  user-select: none;
     401  -webkit-user-select: none;
     402  cursor: grab;
     403  margin: -.75rem -1.5rem 0;
     404  padding: .75rem 1.5rem 0;
     405}
     406.audio-sheet-drag-zone:active { cursor: grabbing; }
     407
     408@media (hover: hover) and (pointer: fine) {
     409  .audio-sheet-drag-zone {
     410    touch-action: auto;
     411    cursor: default;
     412    pointer-events: none;
     413  }
     414  .audio-sheet-drag-zone .audio-sheet-handle {
     415    pointer-events: auto;
     416    cursor: pointer;
     417  }
     418}
     419
     420.audio-sheet-handle {
     421  display: block;
     422  width: 48px; height: 4px;
     423  border-radius: 2px;
     424  background: color-mix(in srgb, var(--ink, #000) 25%, transparent);
     425  border: 0; padding: 0;
     426  margin: 0 auto .5rem;
     427  cursor: pointer;
     428  flex-shrink: 0;
     429  position: relative;
     430}
     431.audio-sheet-handle::before {
     432  content: ""; position: absolute;
     433  inset: -10px -20px;
     434}
     435
     436.audio-sheet-cover {
     437  width: 100%;
     438  max-width: 320px;
     439  aspect-ratio: 1;
     440  margin: 0 auto;
     441  border-radius: 12px;
     442  background:
     443    linear-gradient(135deg,
     444      var(--accent, #c2410c),
     445      color-mix(in srgb, var(--accent, #c2410c) 55%, #000));
     446  background-size: cover; background-position: center;
     447  display: flex; align-items: center; justify-content: center;
     448  color: rgba(255,255,255,0.9);
     449  box-shadow: 0 8px 32px rgba(0,0,0,0.18);
     450}
     451.audio-sheet-cover svg { width: 30%; height: 30%; }
     452.audio-sheet-cover.has-image svg { display: none; }
     453
     454.audio-sheet-info { text-align: center; min-width: 0; }
     455.audio-sheet-title  { font-family: var(--font-display, serif); font-size: 1.5rem; font-weight: 600; line-height: 1.2; }
     456.audio-sheet-artist { color: var(--ink-soft, rgba(0,0,0,.55)); margin-top: .25rem; }
     457.audio-sheet-album  { color: var(--ink-muted, rgba(0,0,0,.45)); font-size: 0.85rem; margin-top: .15rem; }
     458
     459.audio-sheet-progress {
     460  display: flex;
     461  gap: .75rem;
     462  align-items: center;
     463  padding: 0 1rem;
     464}
     465
     466.audio-sheet-controls {
     467  display: flex;
     468  justify-content: center;
     469  align-items: center;
     470  gap: 1rem;
     471  flex-wrap: nowrap;
     472  min-height: 64px;
     473}
     474.audio-sheet-btn { width: 48px; height: 48px; }
     475.audio-sheet-btn svg { width: 22px; height: 22px; }
     476.audio-sheet-play {
     477  background: var(--accent, #c2410c);
     478  color: #fff;
     479  width: 64px; height: 64px;
     480  border-radius: 50%;
     481  padding: 0;
     482}
     483.audio-sheet-play svg { width: 24px; height: 24px; }
     484.audio-sheet-play .icon-pause { display: none; }
     485/* Both descendant AND sibling — works whether the sheet is nested in
     486   .audio-player (legacy) or detached as a body sibling (current fix). */
     487.audio-player.is-playing .audio-sheet-play .icon-play,
     488.audio-player.is-playing ~ .audio-sheet .audio-sheet-play .icon-play,
     489body.audio-is-playing .audio-sheet-play .icon-play { display: none; }
     490.audio-player.is-playing .audio-sheet-play .icon-pause,
     491.audio-player.is-playing ~ .audio-sheet .audio-sheet-play .icon-pause,
     492body.audio-is-playing .audio-sheet-play .icon-pause { display: block; }
     493
     494.audio-sheet-queue {
     495  border-top: 1px solid var(--rule);
     496  padding-top: 1rem;
     497}
     498.audio-sheet-queue-label {
     499  font-size: 0.85rem;
     500  color: var(--ink-muted, rgba(0,0,0,.55));
     501  text-transform: uppercase;
     502  letter-spacing: 0.05em;
     503  margin-bottom: 0.5rem;
     504}
     505.audio-sheet-queue-list {
     506  list-style: none;
     507  margin: 0; padding: 0;
     508}
     509.audio-sheet-queue-item {
     510  display: flex;
     511  align-items: baseline;
     512  gap: 0.4rem;
     513  padding: 0.5rem 0.6rem;
     514  border-radius: 4px;
     515  cursor: pointer;
     516  font-size: 0.95rem;
     517}
     518.audio-sheet-queue-item:hover { background: color-mix(in srgb, var(--ink, #000) 5%, transparent); }
     519.audio-sheet-queue-item.is-current { color: var(--accent); font-weight: 600; }
     520.audio-sheet-queue-item .aqi-num { color: var(--ink-muted, rgba(0,0,0,.45)); min-width: 1.6em; }
     521.audio-sheet-queue-item .aqi-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
     522.audio-sheet-queue-item .aqi-artist {
     523  color: var(--ink-muted, rgba(0,0,0,.45));
     524  font-size: 0.85rem;
     525  margin-left: auto;
     526}
     527
    379528/* TABLET / AUTO (768–1199px): grote, landscape, knop-vriendelijke full-player
    380529   voor tablets + een tablet-in-de-auto. Bewust full-screen + grote touch-targets.
    381    Desktop (≥1200px) opent de full player NIET (afgehandeld in audio-player.js),
    382    dus daar is geen sheet-styling nodig. */
     530   STAAT BEWUST NA de basis-sheet-regels hierboven, anders overschrijft de basis
     531   deze overrides (cascade-volgorde). Desktop (≥1200px) opent de full player NIET
     532   (afgehandeld in audio-player.js), dus daar is geen sheet-styling nodig. */
    383533@media (min-width: 768px) and (max-width: 1199.98px) {
    384534  .audio-sheet-panel {
     
    411561}
    412562
    413 .audio-sheet-panel.is-dragging {
    414   transition: none;
    415   will-change: transform;
    416 }
    417 [data-theme="dark"] .audio-sheet-panel {
    418   background: var(--paper, #1a1a1a);
    419   box-shadow: 0 -20px 60px rgba(0, 0, 0, .5);
    420 }
    421 
    422 .audio-sheet-drag-zone {
    423   flex-shrink: 0;
    424   display: flex;
    425   flex-direction: column;
    426   align-items: stretch;
    427   gap: 1rem;
    428   /* MUST be 'none' so pointer events reach JS (drag-down-to-close handler).
    429      'pan-y' would let the browser claim the vertical gesture for scroll. */
    430   touch-action: none;
    431   user-select: none;
    432   -webkit-user-select: none;
    433   cursor: grab;
    434   margin: -.75rem -1.5rem 0;
    435   padding: .75rem 1.5rem 0;
    436 }
    437 .audio-sheet-drag-zone:active { cursor: grabbing; }
    438 
    439 @media (hover: hover) and (pointer: fine) {
    440   .audio-sheet-drag-zone {
    441     touch-action: auto;
    442     cursor: default;
    443     pointer-events: none;
    444   }
    445   .audio-sheet-drag-zone .audio-sheet-handle {
    446     pointer-events: auto;
    447     cursor: pointer;
    448   }
    449 }
    450 
    451 .audio-sheet-handle {
    452   display: block;
    453   width: 48px; height: 4px;
    454   border-radius: 2px;
    455   background: color-mix(in srgb, var(--ink, #000) 25%, transparent);
    456   border: 0; padding: 0;
    457   margin: 0 auto .5rem;
    458   cursor: pointer;
    459   flex-shrink: 0;
    460   position: relative;
    461 }
    462 .audio-sheet-handle::before {
    463   content: ""; position: absolute;
    464   inset: -10px -20px;
    465 }
    466 
    467 .audio-sheet-cover {
    468   width: 100%;
    469   max-width: 320px;
    470   aspect-ratio: 1;
    471   margin: 0 auto;
    472   border-radius: 12px;
    473   background:
    474     linear-gradient(135deg,
    475       var(--accent, #c2410c),
    476       color-mix(in srgb, var(--accent, #c2410c) 55%, #000));
    477   background-size: cover; background-position: center;
    478   display: flex; align-items: center; justify-content: center;
    479   color: rgba(255,255,255,0.9);
    480   box-shadow: 0 8px 32px rgba(0,0,0,0.18);
    481 }
    482 .audio-sheet-cover svg { width: 30%; height: 30%; }
    483 .audio-sheet-cover.has-image svg { display: none; }
    484 
    485 .audio-sheet-info { text-align: center; min-width: 0; }
    486 .audio-sheet-title  { font-family: var(--font-display, serif); font-size: 1.5rem; font-weight: 600; line-height: 1.2; }
    487 .audio-sheet-artist { color: var(--ink-soft, rgba(0,0,0,.55)); margin-top: .25rem; }
    488 .audio-sheet-album  { color: var(--ink-muted, rgba(0,0,0,.45)); font-size: 0.85rem; margin-top: .15rem; }
    489 
    490 .audio-sheet-progress {
    491   display: flex;
    492   gap: .75rem;
    493   align-items: center;
    494   padding: 0 1rem;
    495 }
    496 
    497 .audio-sheet-controls {
    498   display: flex;
    499   justify-content: center;
    500   align-items: center;
    501   gap: 1rem;
    502   flex-wrap: nowrap;
    503   min-height: 64px;
    504 }
    505 .audio-sheet-btn { width: 48px; height: 48px; }
    506 .audio-sheet-btn svg { width: 22px; height: 22px; }
    507 .audio-sheet-play {
    508   background: var(--accent, #c2410c);
    509   color: #fff;
    510   width: 64px; height: 64px;
    511   border-radius: 50%;
    512   padding: 0;
    513 }
    514 .audio-sheet-play svg { width: 24px; height: 24px; }
    515 .audio-sheet-play .icon-pause { display: none; }
    516 /* Both descendant AND sibling — works whether the sheet is nested in
    517    .audio-player (legacy) or detached as a body sibling (current fix). */
    518 .audio-player.is-playing .audio-sheet-play .icon-play,
    519 .audio-player.is-playing ~ .audio-sheet .audio-sheet-play .icon-play,
    520 body.audio-is-playing .audio-sheet-play .icon-play { display: none; }
    521 .audio-player.is-playing .audio-sheet-play .icon-pause,
    522 .audio-player.is-playing ~ .audio-sheet .audio-sheet-play .icon-pause,
    523 body.audio-is-playing .audio-sheet-play .icon-pause { display: block; }
    524 
    525 .audio-sheet-queue {
    526   border-top: 1px solid var(--rule);
    527   padding-top: 1rem;
    528 }
    529 .audio-sheet-queue-label {
    530   font-size: 0.85rem;
    531   color: var(--ink-muted, rgba(0,0,0,.55));
    532   text-transform: uppercase;
    533   letter-spacing: 0.05em;
    534   margin-bottom: 0.5rem;
    535 }
    536 .audio-sheet-queue-list {
    537   list-style: none;
    538   margin: 0; padding: 0;
    539 }
    540 .audio-sheet-queue-item {
    541   display: flex;
    542   align-items: baseline;
    543   gap: 0.4rem;
    544   padding: 0.5rem 0.6rem;
    545   border-radius: 4px;
    546   cursor: pointer;
    547   font-size: 0.95rem;
    548 }
    549 .audio-sheet-queue-item:hover { background: color-mix(in srgb, var(--ink, #000) 5%, transparent); }
    550 .audio-sheet-queue-item.is-current { color: var(--accent); font-weight: 600; }
    551 .audio-sheet-queue-item .aqi-num { color: var(--ink-muted, rgba(0,0,0,.45)); min-width: 1.6em; }
    552 .audio-sheet-queue-item .aqi-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    553 .audio-sheet-queue-item .aqi-artist {
    554   color: var(--ink-muted, rgba(0,0,0,.45));
    555   font-size: 0.85rem;
    556   margin-left: auto;
    557 }
    558 
    559563/* ============================================================
    560564   External-link variant ([[link:url]])
  • src/views/shell.ejs

    rddecd9a r102d2f0  
    168168     anywhere (admin previews, post embeds, etc). The player itself is
    169169     a singleton — see the script tag near </body>. -->
    170 <link rel="stylesheet" href="/assets/css/audio.css?v=2">
     170<link rel="stylesheet" href="/assets/css/audio.css?v=3">
    171171
    172172<%- include('partials/shared-styles') %>
Note: See TracChangeset for help on using the changeset viewer.