Ignore:
File:
1 edited

Legend:

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

    r5280532 r156baa3  
    55const _csrf = (typeof csrfToken !== 'undefined' && csrfToken) || '';
    66%>
    7 <%# De gedeelde ax-*-primitieven. MOET boven het eigen style-blok van deze
    8     pagina staan: wat hieronder blijft staan wijkt bewust af en hoort dus
    9     later te komen, anders wint de partial ervan. %>
    10 <%- include('../partials/admin-styles') %>
    117<div class="container ax-page">
    128
    13   <%- include('../partials/admin-back') %>
     9  <p><a href="/admin" class="btn">&larr; <%= t('nav.admin') %></a></p>
    1410  <%- include('../partials/media-tabs', { active: 'playlists', audioOn: true }) %>
    1511  <header class="ax-header">
     
    8783
    8884.ax-page { max-width: 880px; margin: 1.5rem auto 4rem; padding: 0 1rem; }
     85.ax-header { display: flex; align-items: flex-start; gap: 0.75rem; margin-bottom: 1.5rem; }
     86.ax-header h1 { font-family: var(--font-display, serif); font-size: 1.75rem; margin: 0 0 0.25rem; }
     87.ax-tagline { color: var(--ink-muted, var(--ink-soft)); margin: 0; font-size: 0.9rem; line-height: 1.5; }
     88.ax-tagline code { background: var(--paper-2); padding: 0.1em 0.4em; border-radius: 4px; font-size: 0.9em; }
     89.ax-back {
     90  display: inline-flex; align-items: center; justify-content: center;
     91  width: 40px; height: 40px;
     92  border: 1px solid var(--rule); border-radius: 8px;
     93  background: var(--paper); color: var(--ink); text-decoration: none;
     94  font-size: 1.1rem; flex-shrink: 0; transition: border-color 120ms;
     95}
     96.ax-back:hover { border-color: var(--accent); }
     97
     98.ax-actions-bar {
     99  display: flex;
     100  margin-bottom: 1rem;
     101}
     102
     103.ax-card {
     104  background: var(--paper);
     105  border: 1px solid var(--rule);
     106  border-radius: 12px;
     107  padding: 1.25rem;
     108  margin-bottom: 1rem;
     109}
     110
     111/* ─── Buttons (same primitives as admin-audio) ─────────────────── */
     112.ax-btn {
     113  display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
     114  padding: 0.6rem 1.1rem;
     115  border: 1px solid var(--rule); background: var(--paper-2);
     116  color: var(--ink);
     117  font-family: var(--font-ui, system-ui), sans-serif;
     118  font-size: 0.95rem; font-weight: 500;
     119  text-decoration: none; border-radius: 8px; cursor: pointer;
     120  min-height: 44px;
     121  transition: background 120ms, border-color 120ms;
     122  -webkit-tap-highlight-color: transparent;
     123}
     124.ax-btn:hover { border-color: var(--accent); }
     125.ax-btn-primary { background: var(--accent); color: white; border-color: var(--accent); }
     126.ax-btn-primary:hover { opacity: 0.92; }
     127
     128.ax-icon-btn {
     129  display: inline-flex; align-items: center; justify-content: center;
     130  width: 40px; height: 40px;
     131  border: 1px solid var(--rule); border-radius: 8px;
     132  background: var(--paper-2); color: var(--ink);
     133  cursor: pointer; font-size: 1rem;
     134  transition: background 120ms, border-color 120ms, color 120ms;
     135}
     136.ax-icon-btn:hover { border-color: var(--accent); }
     137.ax-icon-btn-danger:hover { color: #dc2626; border-color: #dc2626; }
     138
     139/* ─── Empty state ──────────────────────────────────────────────── */
     140.ax-empty { text-align: center; padding: 2rem 1rem; color: var(--ink-muted, var(--ink-soft)); }
     141.ax-empty-icon { font-size: 2.5rem; margin-bottom: 0.5rem; opacity: 0.5; }
     142.ax-empty p { margin: 0; }
     143.ax-empty-sub { font-size: 0.85rem; margin-top: 0.5rem !important; }
     144
     145/* ─── List items (same as audio tracks) ───────────────────────── */
     146.ax-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.6rem; }
     147.ax-track {
     148  display: grid;
     149  grid-template-columns: 64px 1fr auto;
     150  gap: 0.85rem; align-items: center;
     151  padding: 0.85rem;
     152  background: var(--paper);
     153  border: 1px solid var(--rule);
     154  border-radius: 12px;
     155  transition: border-color 120ms;
     156}
     157.ax-track:hover { border-color: var(--accent); }
     158.ax-track-cover {
     159  width: 64px; height: 64px; border-radius: 8px;
     160  background: var(--paper-2);
     161  display: flex; align-items: center; justify-content: center;
     162  font-family: var(--font-display, serif);
     163  font-size: 1.5rem; color: var(--accent);
     164  flex-shrink: 0;
     165}
     166.ax-track-meta { min-width: 0; display: flex; flex-direction: column; gap: 0.25rem; }
     167.ax-track-title {
     168  font-family: var(--font-display, serif);
     169  font-weight: 600; font-size: 1.05rem; color: var(--ink);
     170  display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap;
     171}
     172.ax-pill {
     173  font-family: var(--font-ui);
     174  font-size: 0.7rem; font-weight: 500;
     175  color: var(--ink-soft);
     176  background: var(--paper-2);
     177  padding: 0.15em 0.55em; border-radius: 999px;
     178  letter-spacing: 0;
     179}
     180.ax-track-sub {
     181  font-size: 0.85rem;
     182  color: var(--ink-muted, var(--ink-soft));
     183  display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center;
     184}
     185.ax-track-sep { opacity: 0.5; }
     186.ax-embed {
     187  display: inline-block;
     188  background: var(--paper-2);
     189  padding: 0.15rem 0.5rem;
     190  border-radius: 4px;
     191  font-family: var(--font-mono, ui-monospace, monospace);
     192  font-size: 0.75rem;
     193  color: var(--ink-soft);
     194  cursor: pointer; user-select: all;
     195  margin-top: 0.15rem;
     196  word-break: break-all;
     197  align-self: flex-start;
     198  transition: background 120ms;
     199}
     200.ax-embed:hover { background: var(--rule); }
     201.ax-embed.is-copied { background: rgba(40,160,90,0.2); color: #2a9d5e; }
     202
     203.ax-track-actions { display: flex; gap: 0.4rem; flex-shrink: 0; }
    89204
    90205/* ─── Mobile ──────────────────────────────────────────────────── */
    91206@media (max-width: 480px) {
     207  .ax-track {
     208    grid-template-columns: 56px 1fr;
     209    grid-template-areas: "cover meta" "actions actions";
     210    gap: 0.6rem;
     211  }
     212  .ax-track-cover { grid-area: cover; width: 56px; height: 56px; }
     213  .ax-track-meta  { grid-area: meta; }
     214  .ax-track-actions {
     215    grid-area: actions;
     216    justify-content: flex-end;
     217    border-top: 1px solid var(--rule);
     218    padding-top: 0.5rem;
     219    margin-top: 0.25rem;
     220  }
    92221}
    93222</style>
Note: See TracChangeset for help on using the changeset viewer.