source: Klonkt/src/views/partials/shared-styles.ejs@ 11a6871

main
Last change on this file since 11a6871 was 11a6871, checked in by roboburr <roboburr@…>, 3 months ago

style: grey out view-switcher on a standalone post

Timeline/Grid + 2/3/4-columns make no sense on a post detail page (no
feed to switch). We grey out the bar (opacity 0.4) + make it unclickable
(pointer-events:none) instead of hiding it, so the chrome doesn't shift
during HTMX navigation. Works via body.on-post (class switches client-side
on HTMX nav).

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

  • Property mode set to 100644
File size: 6.7 KB
Line 
1<style>
2/* ─────────────────────────────────────────────────
3 View switcher (timeline ↔ grid + grid-cols picker)
4 ───────────────────────────────────────────────── */
5.view-switcher-wrap {
6 border-bottom: 1px solid var(--rule);
7 background: var(--paper);
8 /* Breathing room: profile-header has padding-bottom 1.5rem already, so a
9 small additional margin-top gives the switcher its own visual layer. */
10 margin-top: 0.5rem;
11}
12.view-switcher-wrap .container {
13 display: flex; align-items: center; justify-content: center; gap: 0.75rem;
14 /* Slimmer bar: was 0.4rem (≈12px total chrome above pill); now 0.25rem. */
15 padding: 0.25rem 1rem;
16 max-width: 1200px; margin: 0 auto;
17 flex-wrap: wrap;
18}
19.view-switcher {
20 display: inline-flex;
21 background: var(--paper-2);
22 border: 1px solid var(--rule);
23 border-radius: 999px;
24 padding: 0.15rem;
25}
26.view-switch-btn {
27 display: inline-flex; align-items: center; gap: 0.35rem;
28 padding: 0.35rem 0.85rem;
29 border: 0; background: transparent; color: var(--ink-muted, var(--ink-soft));
30 cursor: pointer; border-radius: 999px;
31 font-size: 0.85rem; font-family: inherit;
32 transition: background 120ms, color 120ms;
33}
34.view-switch-btn:hover { color: var(--ink); }
35.view-switch-btn[aria-selected="true"] { background: var(--paper); color: var(--ink); box-shadow: 0 1px 2px rgba(0,0,0,.06); }
36
37.grid-cols-picker {
38 display: none; /* desktop-only, see media query */
39 gap: 0.2rem;
40}
41.grid-cols-btn {
42 width: 28px; height: 28px;
43 border: 1px solid var(--rule);
44 background: var(--paper-2);
45 color: var(--ink-muted, var(--ink-soft));
46 border-radius: 4px;
47 font-size: 0.8rem; font-weight: 600;
48 cursor: pointer;
49 font-variant-numeric: tabular-nums;
50}
51.grid-cols-btn:hover { color: var(--ink); border-color: var(--accent); }
52.grid-cols-btn.is-active { background: var(--accent); color: white; border-color: var(--accent); }
53
54/* Show grid-cols picker only on grid view + desktop */
55@media (min-width: 720px) {
56 body[data-feed-view="grid"] .grid-cols-picker { display: inline-flex; }
57}
58
59/* Switcher is hidden only on admin pages — admin has a dedicated layout
60 and its own back-button flow where Tijdlijn/Grid is irrelevant. On
61 every other page (home, post, tag, archive, search, account) it stays
62 visible so the user keeps a consistent return-to-feed control. */
63.on-admin .view-switcher-wrap { display: none; }
64
65/* Op een losse post slaat de feed-weergave (Tijdlijn/Grid + 2/3/4 kolommen)
66 nergens op — er is geen feed om te schakelen. We laten 'm staan (geen layout-
67 sprong bij HTMX-navigatie) maar grijzen 'm uit + maken 'm onklikbaar.
68 Body-class wisselt client-side bij HTMX-nav, dus dit werkt ook zonder reload. */
69.on-post .view-switcher-wrap {
70 opacity: 0.4;
71 pointer-events: none;
72 user-select: none;
73}
74
75/* Spacing between switcher-bar and the page content below.
76 .feed-timeline (used on home + archive + post-list pages) gets a top
77 margin so the first post doesn't collide with the switcher's border.
78 .feed-grid already has its own top spacing from grid-tile padding. */
79.view-switcher-wrap + #pcms-main .feed-timeline,
80.view-switcher-wrap + #pcms-main .container:first-child {
81 margin-top: 1.5rem;
82}
83
84/* Feed layout switching is in the v9 style.css (style.css):
85 .feed-timeline always rendered, .feed-grid hidden unless on-home + grid-mode. */
86
87/* ─────────────────────────────────────────────────
88 PWA install button (lives in topnav, hidden by default)
89 ───────────────────────────────────────────────── */
90#pwa-install-btn { color: var(--accent); }
91#pwa-install-btn:hover { background: var(--paper-2); }
92
93/* Shared button + form styles (used across pages) */
94.btn {
95 display: inline-flex;
96 align-items: center;
97 gap: 0.4rem;
98 padding: 0.55rem 1rem;
99 border: 1px solid var(--rule);
100 background: var(--paper-2);
101 color: var(--ink);
102 font-family: var(--font-ui, system-ui), sans-serif;
103 font-size: 0.9rem;
104 font-weight: 500;
105 text-decoration: none;
106 border-radius: 5px;
107 cursor: pointer;
108 transition: background 150ms, border-color 150ms;
109}
110.btn:hover { border-color: var(--accent); }
111.btn-primary { background: var(--accent); color: white; border-color: var(--accent); }
112.btn-primary:hover { opacity: 0.92; border-color: var(--accent); }
113.btn-success { background: #16a34a; color: white; border-color: #16a34a; }
114.btn-danger { background: #dc2626; color: white; border-color: #dc2626; }
115
116.alert { padding: 0.75rem 1rem; border-radius: 5px; margin-bottom: 1rem; }
117.alert-error { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; }
118.alert-success { background: #d1fae5; color: #065f46; border: 1px solid #a7f3d0; }
119
120.auth-page { max-width: 420px; margin: 3rem auto; padding: 0 1rem; }
121.auth-page h1 { font-family: var(--font-display, serif); text-align: center; margin: 0 0 1.5rem; }
122.auth-form { display: flex; flex-direction: column; gap: 1rem; }
123.auth-form label { display: flex; flex-direction: column; gap: 0.3rem; }
124.auth-form label > span { font-size: 0.85rem; font-weight: 600; color: var(--ink-soft); }
125.auth-form input { padding: 0.6rem 0.75rem; border: 1px solid var(--rule); border-radius: 4px; background: var(--paper); color: var(--ink); font-size: 1rem; }
126.auth-form .btn { justify-content: center; padding: 0.7rem; font-size: 1rem; margin-top: 0.5rem; }
127.auth-link { text-align: center; color: var(--ink-muted); font-size: 0.9rem; margin: 1rem 0 0; }
128.auth-link a { color: var(--accent); }
129.auth-google { align-items: stretch; }
130.auth-intro { text-align: center; color: var(--ink-muted); font-size: 0.95rem; margin: 0 0 1rem; }
131.btn-google {
132 justify-content: center; gap: 0.6rem; padding: 0.7rem; font-size: 1rem;
133 background: #fff; color: #1f1f1f; border: 1px solid #dadce0;
134}
135.btn-google:hover { background: #f7f8f8; border-color: #dadce0; }
136.btn-google .g-icon { flex-shrink: 0; }
137.auth-divider { display: flex; align-items: center; gap: 0.75rem; margin: 1.25rem 0; color: var(--ink-muted); font-size: 0.85rem; }
138.auth-divider::before, .auth-divider::after { content: ''; flex: 1; height: 1px; background: var(--rule); }
139
140/* HTMX loading indicator */
141.pcms-loading {
142 display: none;
143 position: fixed;
144 top: 60px;
145 right: 1rem;
146 width: 24px;
147 height: 24px;
148 border: 3px solid var(--paper-2);
149 border-top-color: var(--accent);
150 border-radius: 50%;
151 animation: spin 0.8s linear infinite;
152 z-index: 1000;
153}
154.htmx-request .pcms-loading { display: block; }
155@keyframes spin { to { transform: rotate(360deg); } }
156</style>
Note: See TracBrowser for help on using the repository browser.