/* * Lay-out "zijbalk" -- het eerste ingebouwde thema (experimental/theme, op weg * naar 2.0). Een thema is een pakket: theme.json ernaast, dit bestand erin. * * DEZELFDE MARKUP, EEN ANDER STELSEL. Dit thema verandert geen template; het * ordent wat er al staat. Dat is het contract (`"contract": 1` in theme.json): * de ids en klassen waar de JS en de custom_css van beheerders op leunen, * blijven waar ze zijn, en een thema mag alleen daarop bouwen. * * ELKE REGEL ONDER html[data-layout="sidebar"]. De shell zet dat attribuut * alleen als dit het gekozen thema is, dus zolang hij niet gekozen is raakt * dit bestand niets. Voor ingebouwde thema's staat die afbakening er met de * hand; een thema van buiten krijgt hem straks bij installatie opgelegd. * * WIE KIEST: de beheerder van de site, in het beheer. Een bezoeker niet. * * ALLEEN OP EEN BREED SCHERM. Onder de 1024px blijft alles zoals het was: daar * is de onderste tabbalk de navigatie, en een zijbalk zou de inhoud opeten. */ @media (min-width: 1024px) { html[data-layout="sidebar"] { --sidebar-w: 15rem; } /* Alleen ruimte maken als er ook een zijbalk IS. De hub-landing en de in- en uitlogschermen hebben geen kop; die houden de volle breedte. */ html[data-layout="sidebar"] body:has(#pcms-chrome .masthead) { padding-left: var(--sidebar-w); } /* ── De chrome wordt de zijbalk ─────────────────────────────── */ /* Niet de masthead maar het hele #pcms-chrome-slot: daar zitten de masthead, de identiteit van de site (profile-header) en de Lezen/Grid- wissel al samen in, en het slot wordt bij elke htmx-navigatie als geheel ververst. Zo blijft alles bij elkaar dat bij de site hoort, en bepaalt `order` de volgorde -- zonder dat er een regel markup verschuift. */ html[data-layout="sidebar"] #pcms-chrome:has(.masthead) { position: fixed; top: 0; bottom: 0; left: 0; width: var(--sidebar-w); display: flex; flex-direction: column; padding-top: var(--ios-safe-top, 0px); border-right: 1px solid var(--rule); background: var(--paper); z-index: 30; /* GEEN overflow hier: de taal- en gebruikersmenu's klappen naar rechts uit de balk, en een scrollende balk zou ze afknippen. */ } /* ── 1. Bovenaan: wie dit is ─────────────────────────────────── */ /* De specificiteit is opzet: de compacte stand op post-, zoek- en archiefpagina's (foto 40px, geen bio) bestaat om ruimte boven de inhoud te sparen. In een kolom is die ruimte er wel, en een identiteit die per pagina van maat verspringt leest als een andere site. */ html[data-layout="sidebar"] #pcms-chrome .profile-header { order: -2; padding: 1.75rem 0 1.25rem; border-bottom: 1px solid var(--rule); background: transparent; } html[data-layout="sidebar"] #pcms-chrome .profile-header-inner { max-width: none; margin: 0; padding: 0 1.6rem; flex-direction: column; align-items: flex-start; gap: .85rem; } html[data-layout="sidebar"] #pcms-chrome .profile-photo { width: 72px; height: 72px; border-width: 2px; } html[data-layout="sidebar"] #pcms-chrome .profile-photo-fallback { font-size: 1.75rem; } html[data-layout="sidebar"] #pcms-chrome .profile-name { font-size: 1.4rem; margin: 0 0 .3rem; overflow-wrap: anywhere; } html[data-layout="sidebar"] #pcms-chrome .profile-bio { display: block; font-size: .85rem; } html[data-layout="sidebar"] #pcms-chrome .profile-links { flex-wrap: wrap; } /* ── 2. Hoe je de site leest ─────────────────────────────────── */ /* De Lezen/Grid-wissel zit in hetzelfde slot, dus hij komt mee: onder de identiteit, als keuze die bij de site hoort in plaats van boven de stroom. */ html[data-layout="sidebar"] #pcms-chrome .view-switcher-wrap { order: -1; margin: 0; padding: .9rem 0; border-bottom: 1px solid var(--rule); background: transparent; } html[data-layout="sidebar"] #pcms-chrome .view-switcher-wrap .container { max-width: none; padding-inline: 1.6rem; justify-content: flex-start; } /* ── 3. De navigatie vult de rest ────────────────────────────── */ html[data-layout="sidebar"] #pcms-chrome .masthead { position: static; flex: 1 1 auto; display: flex; flex-direction: column; padding: 1rem 0 1.25rem; border: 0; background: transparent; } html[data-layout="sidebar"] .masthead-inner { flex: 1 1 auto; max-width: none; margin: 0; padding-inline: .75rem; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 1rem; } /* Het merk is overal verborgen (de profielkop draagt het), en dan is het een leeg vak met een gat eronder. Behalve op beheerpagina's: daar staat "terug naar de site", en dat is daar de enige weg terug. */ html[data-layout="sidebar"] .masthead-brand:not(:has(.nav-link-admin)) { display: none; } html[data-layout="sidebar"] .masthead-brand { flex: 0 0 auto; overflow: visible; } html[data-layout="sidebar"] .masthead-brand .nav-link-admin { width: 100%; } /* ── De navigatie staat onder elkaar ──────────────────────────── */ html[data-layout="sidebar"] .top-nav-desktop { flex: 1 1 auto; flex-direction: column; align-items: stretch; gap: .15rem; } html[data-layout="sidebar"] .top-nav-desktop > .nav-link, html[data-layout="sidebar"] .top-nav-desktop > .nav-btn, html[data-layout="sidebar"] .top-nav-desktop > details > summary { width: 100%; justify-content: flex-start; padding: .55rem .85rem; } html[data-layout="sidebar"] .top-nav-desktop .nav-label { display: inline; } /* Knoppen die in de kop alleen een pictogram zijn, krijgen hier hun naam. De naam stond al in de markup, als title of aria-label; er is niets bij gekomen. In een kolom onder elkaar leest een rij losse pictogrammen als een raadsel. */ html[data-layout="sidebar"] .top-nav-desktop > .nav-btn[title]::after, html[data-layout="sidebar"] .top-nav-desktop .lang-toggle[title]::after { content: attr(title); } html[data-layout="sidebar"] .top-nav-desktop .user-toggle[aria-label]::after { content: attr(aria-label); } /* Het pijltje hoort bij een menu dat naar beneden valt; hier klapt hij opzij, en tussen de taalcode en de naam las het als "EN ⌄ Language". */ html[data-layout="sidebar"] .top-nav-desktop .lang-caret { display: none; } /* Bovenin wat je zoekt (archief, zoeken); onderin wat bij JOU hoort (thema, taal, meldingen, je account). Het thema is de eerste van dat tweede rijtje, dus die duwt de rest naar beneden. */ html[data-layout="sidebar"] .top-nav-desktop > #theme-toggle { margin-top: auto; } /* ── De uitklapmenu's klappen naar rechts open ───────────────── */ /* In de kop vielen ze naar beneden, rechts uitgelijnd. Onderin een smalle balk zou dat buiten beeld vallen, dus: naast de knop, naar boven toe. */ html[data-layout="sidebar"] .user-dropdown, html[data-layout="sidebar"] .lang-dropdown { top: auto; right: auto; bottom: 0; left: calc(100% + .6rem); transform-origin: bottom left; } html[data-layout="sidebar"] .user-menu, html[data-layout="sidebar"] .lang-menu { position: relative; } /* ── Wat over de volle breedte vastzat, begint nu na de balk ──── */ html[data-layout="sidebar"] body:has(#pcms-chrome .masthead) .audio-player, html[data-layout="sidebar"] body:has(#pcms-chrome .masthead) .audio-sheet { left: var(--sidebar-w); } }