| 1 | <%#
|
|---|
| 2 | De opmaak van het zoeken: het vlak (balk + vak) en wat erin staat. Staat in
|
|---|
| 3 | de topnav, dus op elke pagina: de overlay kan overal open, en de pagina
|
|---|
| 4 | /search gebruikt precies dezelfde regels.
|
|---|
| 5 | %>
|
|---|
| 6 | <style>
|
|---|
| 7 | /* ── Het vlak: de balk bovenaan, het vak neemt de rest ───────────────────
|
|---|
| 8 | Boven de tabbalk (1050) en de mini-speler (1000), onder een open blad
|
|---|
| 9 | (1100). De vorige overlay lag op 200 en schoof op een telefoon onder de
|
|---|
| 10 | tabbalk, zodat het onderste stuk resultaten wegviel. */
|
|---|
| 11 | .search-surface { position: fixed; inset: 0; z-index: 1060; display: flex; flex-direction: column;
|
|---|
| 12 | background: var(--paper); color: var(--ink); }
|
|---|
| 13 | .search-surface[hidden] { display: none; }
|
|---|
| 14 | .search-bar { flex: 0 0 auto; padding: .75rem 0; padding-top: calc(.75rem + env(safe-area-inset-top, 0px));
|
|---|
| 15 | border-bottom: 1px solid var(--rule);
|
|---|
| 16 | background: color-mix(in srgb, var(--paper) 94%, var(--ink) 6%); }
|
|---|
| 17 | .search-bar-form { display: flex; align-items: center; gap: .5rem; max-width: 760px; margin: 0 auto; padding: 0 1rem; box-sizing: border-box; }
|
|---|
| 18 | .search-bar-form input { flex: 1 1 auto; min-width: 0; min-height: 44px; padding: .7rem 1rem; box-sizing: border-box;
|
|---|
| 19 | border: 1px solid var(--rule); border-radius: 12px; background: var(--paper); color: var(--ink);
|
|---|
| 20 | font-family: var(--font-ui, inherit); font-size: 1rem; }
|
|---|
| 21 | .search-bar-form input:focus { outline: 2px solid var(--accent); outline-offset: 0; border-color: transparent; }
|
|---|
| 22 | .search-bar-btn { flex: 0 0 44px; width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center;
|
|---|
| 23 | border: 0; border-radius: 999px; background: transparent; color: var(--ink-soft, var(--ink)); cursor: pointer;
|
|---|
| 24 | text-decoration: none; -webkit-tap-highlight-color: transparent; }
|
|---|
| 25 | .search-bar-btn:hover { background: color-mix(in srgb, var(--ink) 7%, transparent); color: var(--ink); }
|
|---|
| 26 | .search-bar-btn svg { width: 22px; height: 22px; }
|
|---|
| 27 | /* De goot aan beide kanten houdt de kolom op dezelfde lijn als de balk: een
|
|---|
| 28 | scrollbalk alleen rechts schuift de resultaten anders een stukje naar links. */
|
|---|
| 29 | .search-box { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
|
|---|
| 30 | scrollbar-gutter: stable both-edges; }
|
|---|
| 31 | .search-box-inner { max-width: 760px; margin: 0 auto; padding: .5rem 1rem calc(2rem + env(safe-area-inset-bottom, 0px)); box-sizing: border-box; }
|
|---|
| 32 | .search-box-inner:empty { display: none; }
|
|---|
| 33 | /* Zolang het vlak open is, scrolt de pagina eronder niet mee. */
|
|---|
| 34 | html.search-open, html.search-open body { overflow: hidden; }
|
|---|
| 35 |
|
|---|
| 36 | /* ── Wat er in het vak staat ─────────────────────────────────────────── */
|
|---|
| 37 | .sr-section { margin: 1rem 0 0; }
|
|---|
| 38 | .sr-title { margin: 0 0 .35rem; padding: 0 .25rem; font: 700 .72rem/1.4 var(--font-ui, inherit);
|
|---|
| 39 | text-transform: uppercase; letter-spacing: .06em; color: var(--ink-soft, var(--ink-muted)); }
|
|---|
| 40 | .sr-list { list-style: none; margin: 0; padding: 0; }
|
|---|
| 41 | .sr-item { display: flex; flex-direction: column; gap: .1rem; min-height: 44px; padding: .6rem .6rem; border-radius: 10px;
|
|---|
| 42 | color: var(--ink); text-decoration: none; box-sizing: border-box; }
|
|---|
| 43 | .sr-item:hover, .sr-item:focus-visible { background: var(--paper-2); }
|
|---|
| 44 | .sr-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|---|
| 45 | .sr-item-row { flex-direction: row; align-items: center; justify-content: space-between; }
|
|---|
| 46 | .sr-item-title { font-weight: 600; overflow-wrap: anywhere; }
|
|---|
| 47 | .sr-item:hover .sr-item-title { color: var(--accent); }
|
|---|
| 48 | .sr-item-meta { font-size: .82rem; color: var(--ink-soft, var(--ink-muted)); }
|
|---|
| 49 | .sr-item-snippet { font-size: .9rem; line-height: 1.5; color: var(--ink-soft); overflow: hidden;
|
|---|
| 50 | display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
|---|
| 51 | .sr-item-snippet mark { background: color-mix(in srgb, var(--accent) 22%, transparent); color: inherit; padding: 0 .15em; border-radius: 3px; }
|
|---|
| 52 | .sr-tracks { display: flex; flex-direction: column; gap: .15rem; }
|
|---|
| 53 | .sr-track.post-audio-track { display: flex; align-items: center; gap: .75rem; min-height: 44px; padding: .45rem .6rem; border-radius: 10px; }
|
|---|
| 54 | .sr-track-cover { flex: 0 0 38px; width: 38px; height: 38px; border-radius: 6px; background: var(--paper-2) center / cover; }
|
|---|
| 55 | .sr-track .pat-info { flex: 1; min-width: 0; }
|
|---|
| 56 | .sr-track .pat-title { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|---|
| 57 | .sr-track .pat-artist { font-size: .82rem; color: var(--ink-soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|---|
| 58 | .sr-track-link { flex: 0 0 auto; font-size: .82rem; color: var(--accent); text-decoration: none; white-space: nowrap; }
|
|---|
| 59 | .sr-track-link:hover { text-decoration: underline; }
|
|---|
| 60 | .sr-note { margin: .25rem 0; padding: .7rem .8rem; border-radius: 10px; font-size: .9rem; line-height: 1.5;
|
|---|
| 61 | background: var(--paper-2); color: var(--ink-soft, var(--ink-muted)); }
|
|---|
| 62 | .sr-empty { margin: 3rem 0; text-align: center; color: var(--ink-soft, var(--ink-muted)); }
|
|---|
| 63 | .sr-loading { display: flex; align-items: center; gap: 10px; padding: 1rem .6rem; color: var(--ink-soft, var(--ink-muted)); font-size: .9rem; }
|
|---|
| 64 | .sr-loading::before { content: ''; flex: 0 0 16px; width: 16px; height: 16px; border-radius: 50%;
|
|---|
| 65 | border: 2px solid color-mix(in srgb, var(--accent) 30%, transparent); border-top-color: var(--accent);
|
|---|
| 66 | animation: sr-spin .8s linear infinite; }
|
|---|
| 67 | @keyframes sr-spin { to { transform: rotate(360deg); } }
|
|---|
| 68 | @media (prefers-reduced-motion: reduce) { .sr-loading::before { animation: none; } }
|
|---|
| 69 | .sr-section .rp-card { margin-top: .25rem; }
|
|---|
| 70 | </style>
|
|---|