gabriel / musehub public
_explore.scss
213 lines 5.5 KB
Raw
sha256:1dd27e6d5c24550177b01b0a171e8375c07cf046b549e7683364706b6522d3bc docs(#139): mark all 11 checklist items resolved, document … Sonnet 5 12 days ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Page: Explore
3 // File: src/scss/pages/_explore.scss
4 //
5 // Structural layout only — zero colors, zero typography.
6 // All visual rules live in components/_search.scss and patterns/_surfaces.scss.
7 // ─────────────────────────────────────────────────────────────────────────────
8
9 // Explore's hero/search-results render via {% block content %} as
10 // siblings of #browse-layout (issue #139) — all three are direct flex
11 // items of #content (app-shell). The hero/search-results must not grow;
12 // #browse-layout takes whatever's left.
13 .hero--explore,
14 #search-results {
15 flex-shrink: 0;
16 }
17
18 // ── Browse layout — filter sidebar + main grid ────────────────────────────────
19 // Independently-scrolling columns — each is `flex: 1` within the
20 // app-shell's remaining space, not a calc()'d height. See
21 // docs/issues/two-column-app-shell-refactor.md.
22 .browse-layout {
23 display: grid;
24 grid-template-columns: 220px 1fr;
25 align-items: stretch;
26 gap: 0;
27 min-height: 0;
28 flex: 1;
29 padding-top: var(--space-3);
30
31 @media (max-width: 900px) {
32 grid-template-columns: 1fr;
33 }
34 }
35
36 .browse-layout__sidebar {
37 padding: var(--space-4) var(--space-4) var(--space-4) var(--space-3);
38 min-height: 0;
39 overflow-y: auto;
40 scrollbar-width: thin;
41 scrollbar-color: var(--border-default) transparent;
42
43 @media (max-width: 900px) {
44 overflow-y: visible;
45 display: none;
46 }
47 }
48
49 .browse-layout__content {
50 padding: 0 var(--space-4);
51 min-width: 0;
52 min-height: 0;
53 overflow-y: auto;
54 scrollbar-width: thin;
55 scrollbar-color: var(--border-default) transparent;
56
57 @media (max-width: 900px) { overflow-y: visible; }
58 }
59
60 // ── Sidebar components ────────────────────────────────────────────────────────
61 .sidebar-section {
62 padding: var(--space-3) 0;
63 border-bottom: 1px solid var(--border-subtle);
64
65 &:last-child { border-bottom: none; }
66
67 &--header { padding-bottom: var(--space-2); }
68 }
69
70 .sidebar-section__hd {
71 display: flex;
72 align-items: center;
73 justify-content: space-between;
74 }
75
76 .sidebar-section-title {
77 display: flex;
78 align-items: center;
79 gap: 6px;
80 font-size: var(--text-xs);
81 font-weight: var(--weight-bold);
82 letter-spacing: 0.08em;
83 text-transform: uppercase;
84 color: var(--text-muted);
85 margin: 0 0 var(--space-2);
86 }
87
88 .sidebar-clear {
89 font-size: var(--text-xs);
90 color: var(--color-accent);
91 text-decoration: none;
92 opacity: 0.8;
93
94 &:hover { opacity: 1; text-decoration: underline; }
95 }
96
97 .sidebar-radio {
98 display: flex;
99 align-items: center;
100 gap: 8px;
101 font-size: 12px;
102 color: var(--text-secondary);
103 cursor: pointer;
104 padding: 3px 0;
105
106 &:hover { color: var(--text-primary); }
107
108 input[type="radio"] {
109 appearance: none;
110 -webkit-appearance: none;
111 width: 14px;
112 height: 14px;
113 border-radius: 50%;
114 border: 1.5px solid var(--border-default);
115 background: transparent;
116 flex-shrink: 0;
117 position: relative;
118 cursor: pointer;
119 transition: border-color var(--transition-fast), background var(--transition-fast);
120
121 &::after {
122 content: '';
123 position: absolute;
124 inset: 3px;
125 border-radius: 50%;
126 background: transparent;
127 transition: background var(--transition-fast);
128 }
129
130 &:checked {
131 border-color: var(--color-accent);
132 &::after { background: var(--color-accent); }
133 }
134
135 &:hover { border-color: var(--color-accent); }
136 }
137 }
138
139 .sidebar-links {
140 display: flex;
141 flex-direction: column;
142 gap: 2px;
143 margin-top: var(--space-2);
144 }
145
146 .sidebar-link {
147 display: flex;
148 align-items: center;
149 gap: 6px;
150 font-size: 12px;
151 color: var(--text-secondary);
152 text-decoration: none;
153 padding: 3px 0;
154 transition: color var(--transition-fast);
155
156 svg { opacity: 0.5; flex-shrink: 0; }
157
158 &:hover { color: var(--color-accent); svg { opacity: 1; } }
159 }
160
161 .chip-group {
162 display: flex;
163 gap: 5px;
164 flex-wrap: wrap;
165 margin-top: var(--space-2);
166 }
167
168 .sidebar-empty {
169 font-size: 12px;
170 color: var(--text-muted);
171 margin: var(--space-2) 0 0;
172 font-style: italic;
173 }
174
175 .sidebar-select {
176 width: 100%;
177 padding: 6px var(--space-3);
178 border-radius: var(--radius-sm);
179 background: var(--bg-overlay);
180 color: var(--text-secondary);
181 border: 1px solid var(--border-default);
182 font-size: 12px;
183 cursor: pointer;
184 appearance: none;
185 -webkit-appearance: none;
186
187 &:focus { outline: none; border-color: var(--color-accent); }
188 }
189
190 // ── Grid header ───────────────────────────────────────────────────────────────
191 .grid-header {
192 display: flex;
193 align-items: center;
194 justify-content: space-between;
195 margin-bottom: var(--space-3);
196 padding: var(--space-3) 0 var(--space-2);
197 border-bottom: 1px solid var(--border-subtle);
198 }
199
200 .grid-header__title {
201 font-size: var(--text-xs);
202 font-weight: var(--weight-bold);
203 color: var(--text-secondary);
204 text-transform: uppercase;
205 letter-spacing: 0.06em;
206 margin: 0;
207 }
208
209 .grid-header__count {
210 font-size: 12px;
211 color: var(--text-muted);
212 font-family: var(--font-mono);
213 }
File History 2 commits
sha256:1dd27e6d5c24550177b01b0a171e8375c07cf046b549e7683364706b6522d3bc docs(#139): mark all 11 checklist items resolved, document … Sonnet 5 12 days ago
sha256:649011bedd713e22f7dca4c4be94bdefbf3b10950d9fc80235928d0b0b823be8 docs: track issue #139 (two-column app-shell refactor) plan… Sonnet 5 12 days ago