Changeset 5280532 in Klonkt for src


Ignore:
Timestamp:
08/16/2026 01:17:20 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
38d5e40
Parents:
daa8eb8
Message:

Beheer: admin-audio neemt de maten van de gedeelde romp over

Robin zag dat /admin/audio nog de oude knop had en /admin/playlists de
goede. De markup was al gelijk -- beide gebruiken de terugknop-partial --
maar admin-audio had een EIGEN .ax-btn in zijn style-blok, en die staat
na de include en wint dus.

Het bleek geen los geval. admin-audio droeg een oudere, systematisch
kleinere kopie van het hele systeem:

.ax-btn 40px / radius 6 / 0.9rem -> 44px / radius 8 / 0.95rem
.ax-track hoes 56px / radius 10 -> 64px / radius 12
.ax-track-title 0.95rem -> 1.05rem
.ax-track-sub 0.8rem -> 0.85rem
@media 480px hoes 48px -> 56px

De partial kwam van admin-playlists, en dat is precies de versie die er
"goed" uitzag. Alle tien de afwijkingen zijn nu weg; audio en playlists
hebben nul regels die van de partial verschillen.

TWEE DINGEN DIE ECHT VERANDEREN, en niet alleen in maat:

  • Lange tracktitels op /admin/audio WRAPPEN nu in plaats van af te kappen met een ellipsis. De gedeelde .ax-track-title is een flex-regel (playlists zet er een pill in) en text-overflow werkt daar niet. De hele titel blijft zo zichtbaar; dat leek me de betere kant van de ruil, maar het is een keuze en geen bijvangst.
  • Het ♫-teken in de lege toestand verliest zijn display-font en eigen kleur, en erft nu van .ax-empty.

object-fit: cover staat nu OP .ax-track-cover en niet alleen op een img
erbinnen: admin-audio zet die klasse rechtstreeks op een <img>,
admin-listeners op een omhulsel. Op een niet-vervangen element doet
object-fit niets, dus de tweede vorm merkt er niets van. Zonder dit had
het weghalen van audio's kopie de hoezen uitgerekt.

scripts/admin-css.mjs heeft er --forceer bij: die haalt OOK de afwijkende
regels weg, zodat de pagina de vorm van de partial overneemt. Apart van
--doen, want --doen verplaatst alleen en dit VERANDERT hoe een pagina
eruitziet -- dat hoort een expliciete keuze te zijn. Met --toon laat hij
per eigenschap zien wat er verschilt; zo zijn bovenstaande maten
gevonden.

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

Location:
src/views
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/views/pages/admin-audio.ejs

    rdaa8eb8 r5280532  
    254254.ax-form-actions[hidden] { display: none; }
    255255
    256 /* ─── Buttons ──────────────────────────────────────────────────── */
    257 .ax-btn {
    258   display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
    259   padding: 0.55rem 1rem;
    260   border: 1px solid var(--rule);
    261   background: var(--paper-2);
    262   color: var(--ink);
    263   font-family: var(--font-ui, system-ui), sans-serif;
    264   font-size: 0.9rem; font-weight: 500;
    265   text-decoration: none;
    266   border-radius: 6px;
    267   cursor: pointer;
    268   min-height: 40px;
    269   transition: background 120ms, border-color 120ms;
    270   -webkit-tap-highlight-color: transparent;
    271 }
    272 
    273256.ax-track-play.is-playing {
    274257  border-color: var(--accent);
     
    277260}
    278261.ax-track-play-icon { font-size: 0.85rem; line-height: 1; }
    279 .ax-empty-icon {
    280   font-size: 2.5rem;
    281   font-family: var(--font-display, serif);
    282   color: var(--ink-soft);
    283   opacity: 0.4;
    284   margin-bottom: 0.5rem;
    285 }
    286 .ax-track {
    287   display: grid;
    288   grid-template-columns: 56px 1fr auto;
    289   gap: 0.85rem;
    290   align-items: center;
    291   padding: 0.75rem;
    292   background: var(--paper-2);
    293   border: 1px solid var(--rule);
    294   border-radius: 10px;
    295   transition: border-color 120ms;
    296 }
    297 .ax-track-cover {
    298   width: 56px; height: 56px;
    299   border-radius: 6px;
    300   object-fit: cover;
    301   background: var(--paper);
    302   display: flex; align-items: center; justify-content: center;
    303   font-family: var(--font-display, serif);
    304   font-size: 1.5rem;
    305   color: var(--accent);
    306   flex-shrink: 0;
    307 }
    308262.ax-track-cover-empty { /* span variant */ }
    309 .ax-track-meta {
    310   min-width: 0;  /* allow text-overflow on long titles */
    311   display: flex; flex-direction: column; gap: 0.2rem;
    312 }
    313 .ax-track-title {
    314   font-weight: 600;
    315   font-size: 0.95rem;
    316   color: var(--ink);
    317   overflow: hidden;
    318   text-overflow: ellipsis;
    319   white-space: nowrap;
    320 }
    321 .ax-track-sub {
    322   font-size: 0.8rem;
    323   color: var(--ink-muted, var(--ink-soft));
    324   display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center;
    325 }
    326 .ax-embed {
    327   display: inline-block;
    328   background: var(--paper);
    329   padding: 0.15rem 0.5rem;
    330   border-radius: 4px;
    331   font-family: var(--font-mono, ui-monospace, monospace);
    332   font-size: 0.75rem;
    333   color: var(--ink-soft);
    334   cursor: pointer;
    335   user-select: all;
    336   margin-top: 0.15rem;
    337   word-break: break-all;
    338   align-self: flex-start;
    339   transition: background 120ms;
    340 }
    341263.ax-track-delete { display: inline; }
    342264
    343265/* ─── Mobile tweaks ───────────────────────────────────────────── */
    344266@media (max-width: 480px) {
    345   .ax-track {
    346     grid-template-columns: 48px 1fr;
    347     grid-template-areas: "cover meta" "actions actions";
    348     gap: 0.6rem;
    349   }
    350   .ax-track-cover { grid-area: cover; width: 48px; height: 48px; }
    351267}
    352268
  • src/views/pages/admin-playlists.ejs

    rdaa8eb8 r5280532  
    8787
    8888.ax-page { max-width: 880px; margin: 1.5rem auto 4rem; padding: 0 1rem; }
    89 .ax-btn-primary:hover { opacity: 0.92; }
    90 .ax-track-cover {
    91   width: 64px; height: 64px; border-radius: 8px;
    92   background: var(--paper-2);
    93   display: flex; align-items: center; justify-content: center;
    94   font-family: var(--font-display, serif);
    95   font-size: 1.5rem; color: var(--accent);
    96   flex-shrink: 0;
    97 }
    9889
    9990/* ─── Mobile ──────────────────────────────────────────────────── */
  • src/views/partials/admin-styles.ejs

    rdaa8eb8 r5280532  
    133133}
    134134.ax-track:hover { border-color: var(--accent); }
     135/* object-fit staat OOK op het element zelf, niet alleen op een img erbinnen:
     136   admin-audio zet .ax-track-cover rechtstreeks op een <img>, admin-listeners
     137   op een omhulsel met een img erin. Op een niet-vervangen element doet
     138   object-fit niets, dus het kost de tweede vorm niets. */
    135139.ax-track-cover {
    136140  width: 64px; height: 64px; border-radius: 8px;
     
    141145  flex-shrink: 0;
    142146  overflow: hidden;
     147  object-fit: cover;
    143148}
    144149.ax-track-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
Note: See TracChangeset for help on using the changeset viewer.