Diff -- /var/www/vhosts/3dshawn.com/site1/assets/styles/drift_sense.css
Diff

/var/www/vhosts/3dshawn.com/site1/assets/styles/drift_sense.css

modified on local at 2026-07-12 23:12:59

Added
+0
lines
Removed
-0
lines
Context
735
unchanged
Blobs
from 7f63099f72e3
to 7f63099f72e3
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
11/* =========================================================================
22 * DriftSense -- design system + component styles
33 * -------------------------------------------------------------------------
44 * Palette: midnight navy background + steel-teal primary + amber warnings.
55 * Distinct from every portfolio site (cyan/indigo/violet/emerald/burgundy/amber)
66 * -- reads as "watchtower / observatory / cool precision instrument."
77 * ========================================================================= */
88
99:root {
1010 /* Backgrounds -- deep, cool, with subtle blue tint */
1111 --bg-0: #030710;
1212 --bg-1: #0a1220;
1313 --bg-2: #131e30;
1414 --bg-3: #1a2740;
1515 --bg-panel: linear-gradient(180deg, #131e30 0%, #0a1220 100%);
1616
1717 /* Borders */
1818 --border: #223050;
1919 --border-hi: #2d3d5f;
2020 --border-focus: #14b8a6;
2121
2222 /* Text */
2323 --text: #e5edf5;
2424 --text-dim: #96a3b8;
2525 --text-muted: #6a7a94;
2626
2727 /* Accents */
2828 --accent: #14b8a6; /* Teal -- primary, "sense" color */
2929 --accent-hi: #2dd4bf;
3030 --accent-deep: #0f766e;
3131 --accent-glow: rgba(20, 184, 166, 0.35);
3232
3333 --accent-warn: #f59e0b; /* Amber -- drift alert */
3434 --accent-warn-hi: #fbbf24;
3535
3636 --accent-danger: #f43f5e; /* Rose -- critical */
3737 --accent-danger-hi: #fb7185;
3838
3939 --accent-ok: #34d399; /* Emerald -- clean baseline */
4040 --accent-ok-hi: #6ee7b7;
4141
4242 --accent-info: #38bdf8; /* Sky-blue -- info notices */
4343
4444 /* Typography */
4545 --mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
4646 --sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
4747
4848 /* Sizing */
4949 --radius: 12px;
5050 --radius-sm: 8px;
5151 --radius-pill: 999px;
5252 --sidebar-w: 240px;
5353}
5454
5555* { box-sizing: border-box; }
5656html, body { margin: 0; padding: 0; }
5757body {
5858 font-family: var(--sans);
5959 color: var(--text);
6060 background: var(--bg-0);
6161 background-image:
6262 radial-gradient(ellipse 1000px 600px at 15% 0%, rgba(20, 184, 166, 0.10), transparent 65%),
6363 radial-gradient(ellipse 900px 500px at 90% 100%, rgba(56, 189, 248, 0.08), transparent 65%);
6464 background-attachment: fixed;
6565 line-height: 1.6;
6666 -webkit-font-smoothing: antialiased;
6767 min-height: 100vh;
6868}
6969
7070/* =========================================================================
7171 * APP SHELL -- sidebar + main
7272 * ========================================================================= */
7373.app {
7474 display: grid;
7575 grid-template-columns: var(--sidebar-w) 1fr;
7676 min-height: 100vh;
7777}
7878@media (max-width: 780px) {
7979 .app { grid-template-columns: 1fr; }
8080 .sidebar { display: none; }
8181}
8282
8383/* Sidebar */
8484.sidebar {
8585 background: linear-gradient(180deg, #0a1220 0%, #050810 100%);
8686 border-right: 1px solid var(--border);
8787 padding: 20px 0;
8888 position: sticky; top: 0;
8989 height: 100vh;
9090 overflow-y: auto;
9191}
9292.sidebar-brand {
9393 padding: 8px 20px 20px;
9494 display: flex;
9595 align-items: center;
9696 gap: 12px;
9797 text-decoration: none;
9898 color: var(--text);
9999 border-bottom: 1px solid var(--border);
100100 margin-bottom: 12px;
101101}
102102.sidebar-brand .logo {
103103 width: 38px; height: 38px;
104104 border-radius: 10px;
105105 background: linear-gradient(135deg, var(--accent) 0%, var(--accent-deep) 100%);
106106 display: grid; place-items: center;
107107 color: #030710;
108108 font-family: var(--mono);
109109 font-weight: 800;
110110 font-size: 14px;
111111 box-shadow: 0 4px 14px var(--accent-glow), inset 0 1px 0 rgba(255,255,255,0.15);
112112}
113113.sidebar-brand .name {
114114 font-weight: 700;
115115 font-size: 15px;
116116 letter-spacing: -0.01em;
117117}
118118.sidebar-brand .name .accent { color: var(--accent-hi); }
119119.sidebar-brand .role {
120120 font-size: 10px;
121121 letter-spacing: 1.6px;
122122 text-transform: uppercase;
123123 color: var(--text-muted);
124124 font-weight: 700;
125125 margin-top: 2px;
126126}
127127.sidebar-section-label {
128128 font-size: 10.5px;
129129 letter-spacing: 1.6px;
130130 text-transform: uppercase;
131131 color: var(--text-muted);
132132 font-weight: 700;
133133 padding: 12px 20px 6px;
134134}
135135.sidebar-link {
136136 display: flex;
137137 align-items: center;
138138 gap: 11px;
139139 padding: 9px 20px;
140140 color: var(--text-dim);
141141 text-decoration: none;
142142 font-size: 13.5px;
143143 border-left: 2px solid transparent;
144144 transition: color .12s ease, background .12s ease, border-left-color .12s ease;
145145}
146146.sidebar-link svg { width: 15px; height: 15px; flex: 0 0 auto; opacity: 0.85; }
147147.sidebar-link:hover { color: var(--text); background: rgba(255,255,255,.02); }
148148.sidebar-link.active {
149149 color: var(--accent-hi);
150150 background: linear-gradient(90deg, rgba(20, 184, 166, .12), transparent 90%);
151151 border-left-color: var(--accent);
152152}
153153.sidebar-link.active svg { opacity: 1; }
154154
155155/* Trend arrows on KPI tiles (Wave 5) */
156156.ds-trend {
157157 display: inline-flex;
158158 align-items: center;
159159 gap: 3px;
160160 padding: 2px 8px;
161161 border-radius: 999px;
162162 font-size: 10.5px;
163163 font-weight: 700;
164164 letter-spacing: 0.3px;
165165 vertical-align: 3px;
166166 margin-left: 8px;
167167}
168168.ds-trend.ds-trend-up {
169169 background: rgba(52, 211, 153, .14);
170170 color: #86efac;
171171 border: 1px solid rgba(52, 211, 153, .35);
172172}
173173.ds-trend.ds-trend-down {
174174 background: rgba(244, 63, 94, .14);
175175 color: #fda4af;
176176 border: 1px solid rgba(244, 63, 94, .35);
177177}
178178.ds-trend.ds-trend-flat {
179179 background: rgba(148, 163, 184, .14);
180180 color: var(--text-dim);
181181 border: 1px solid rgba(148, 163, 184, .30);
182182}
183183.ds-trend svg {
184184 width: 10px; height: 10px;
185185}
186186
187187/* Site links in sidebar (Wave 5) */
188188.ds-site-link {
189189 font-size: 12.5px;
190190 padding: 6px 20px 6px 20px;
191191}
192192.ds-site-badge {
193193 display: inline-grid;
194194 place-items: center;
195195 width: 22px; height: 22px;
196196 border-radius: 6px;
197197 background: linear-gradient(135deg, rgba(20, 184, 166, .18), rgba(6, 78, 74, .12));
198198 border: 1px solid rgba(20, 184, 166, .25);
199199 color: var(--accent-hi);
200200 font-size: 9.5px;
201201 font-weight: 800;
202202 letter-spacing: 0;
203203 flex: 0 0 auto;
204204}
205205.ds-site-label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
206206.ds-site-dot {
207207 width: 8px; height: 8px; border-radius: 50%;
208208 flex: 0 0 auto;
209209 background: #334155;
210210}
211211.ds-site-dot.ds-dot-live { background: #34d399; box-shadow: 0 0 6px rgba(52,211,153,.6); }
212212.ds-site-dot.ds-dot-warm { background: #f59e0b; box-shadow: 0 0 6px rgba(245,158,11,.5); }
213213.ds-site-dot.ds-dot-hot { background: #f43f5e; box-shadow: 0 0 8px rgba(244,63,94,.7); }
214214.ds-site-dot.ds-dot-quiet { background: #334155; }
215215
216216/* Stable release links in sidebar (Wave 5) */
217217.ds-stable-link {
218218 font-size: 12.5px;
219219 padding: 6px 20px;
220220}
221221.ds-stable-tag {
222222 display: inline-grid;
223223 place-items: center;
224224 width: 20px; height: 20px;
225225 border-radius: 5px;
226226 background: linear-gradient(135deg, #34d399, #0f766e);
227227 color: #052e2b;
228228 font-size: 10.5px;
229229 font-weight: 900;
230230 flex: 0 0 auto;
231231 box-shadow: 0 0 0 1px rgba(52,211,153,.35);
232232}
233233.ds-stable-link:hover .ds-stable-tag { box-shadow: 0 0 12px rgba(52,211,153,.7); }
234234
235235/* Main content area */
236236.app-main { min-width: 0; }
237237.topbar {
238238 padding: 16px 32px;
239239 border-bottom: 1px solid var(--border);
240240 display: flex;
241241 align-items: center;
242242 gap: 16px;
243243 background: rgba(10, 18, 32, 0.5);
244244 backdrop-filter: blur(8px);
245245 position: sticky; top: 0; z-index: 10;
246246}
247247.topbar h1 { margin: 0; font-size: 15px; font-weight: 600; letter-spacing: .3px; }
248248.topbar-spacer { flex: 1; }
249249.topbar-user {
250250 display: flex;
251251 align-items: center;
252252 gap: 10px;
253253 padding: 5px 12px 5px 5px;
254254 background: var(--bg-2);
255255 border: 1px solid var(--border);
256256 border-radius: var(--radius-pill);
257257 font-size: 12.5px;
258258}
259259.topbar-user .initials {
260260 width: 26px; height: 26px;
261261 border-radius: 50%;
262262 background: linear-gradient(135deg, var(--accent) 0%, var(--accent-deep) 100%);
263263 color: #030710;
264264 display: grid; place-items: center;
265265 font-size: 11px; font-weight: 700;
266266 font-family: var(--mono);
267267}
268268
269269.app-content {
270270 padding: 32px 40px 96px;
271271 max-width: 1400px;
272272}
273273
274274/* =========================================================================
275275 * PAGE HEAD
276276 * ========================================================================= */
277277.page-head { margin-bottom: 32px; }
278278.page-eyebrow {
279279 display: inline-flex;
280280 align-items: center;
281281 gap: 8px;
282282 font-size: 10.5px;
283283 letter-spacing: 1.8px;
284284 text-transform: uppercase;
285285 color: var(--accent-hi);
286286 font-weight: 700;
287287 padding: 5px 12px;
288288 background: rgba(20, 184, 166, .10);
289289 border: 1px solid rgba(20, 184, 166, .30);
290290 border-radius: var(--radius-pill);
291291 margin-bottom: 14px;
292292 text-decoration: none;
293293}
294294.page-eyebrow .dot {
295295 width: 6px; height: 6px; border-radius: 50%;
296296 background: var(--accent-hi);
297297 box-shadow: 0 0 10px var(--accent-hi);
298298}
299299.page-title {
300300 margin: 0 0 8px;
301301 font-size: 32px;
302302 font-weight: 800;
303303 letter-spacing: -0.02em;
304304 background: linear-gradient(135deg, #fff 0%, #cbd5e1 60%, var(--accent-hi) 100%);
305305 -webkit-background-clip: text;
306306 background-clip: text;
307307 color: transparent;
308308}
309309.page-subtitle {
310310 color: var(--text-dim);
311311 font-size: 14.5px;
312312 max-width: 780px;
313313 margin: 0;
314314}
315315
316316/* =========================================================================
317317 * MODULES / CARDS
318318 * ========================================================================= */
319319.dash-grid {
320320 display: grid;
321321 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
322322 gap: 16px;
323323 margin-bottom: 20px;
324324}
325325.module {
326326 background: var(--bg-panel);
327327 border: 1px solid var(--border);
328328 border-radius: var(--radius);
329329 overflow: hidden;
330330 transition: border-color .15s ease, box-shadow .15s ease;
331331}
332332.module:hover { border-color: var(--border-hi); }
333333.module-head {
334334 padding: 12px 16px;
335335 border-bottom: 1px solid var(--border);
336336 display: flex;
337337 align-items: center;
338338 justify-content: space-between;
339339 gap: 12px;
340340 background: rgba(20, 184, 166, .03);
341341}
342342.module-head .left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
343343.module-icon {
344344 width: 26px; height: 26px;
345345 border-radius: 7px;
346346 display: grid; place-items: center;
347347 color: var(--accent-hi);
348348 background: rgba(20, 184, 166, .10);
349349 border: 1px solid rgba(20, 184, 166, .30);
350350}
351351.module-title { font-size: 13px; font-weight: 700; letter-spacing: .3px; }
352352.module-subtitle {
353353 font-size: 11.5px;
354354 font-weight: 400;
355355 color: #b8c5d6;
356356 margin-left: 8px;
357357 padding-left: 10px;
358358 border-left: 1px solid var(--border);
359359 line-height: 1.35;
360360}
361361.module-body { padding: 16px; }
362362.module-body.tight { padding: 0; }
363363
364364/* Module glow variants */
365365.module.glow-teal { box-shadow: 0 0 0 1px rgba(20, 184, 166, .20), 0 0 26px rgba(20, 184, 166, .10); }
366366.module.glow-amber { box-shadow: 0 0 0 1px rgba(245, 158, 11, .20), 0 0 26px rgba(245, 158, 11, .10); }
367367.module.glow-rose { box-shadow: 0 0 0 1px rgba(244, 63, 94, .20), 0 0 26px rgba(244, 63, 94, .10); }
368368.module.glow-emerald{ box-shadow: 0 0 0 1px rgba(52, 211, 153, .20), 0 0 26px rgba(52, 211, 153, .10); }
369369.module.glow-sky { box-shadow: 0 0 0 1px rgba(56, 189, 248, .20), 0 0 26px rgba(56, 189, 248, .10); }
370370
371371/* =========================================================================
372372 * KPI TILES
373373 * ========================================================================= */
374374.kpi { padding: 20px 22px; }
375375.kpi .num {
376376 font-size: 34px;
377377 font-weight: 800;
378378 letter-spacing: -0.02em;
379379 line-height: 1.1;
380380 font-variant-numeric: tabular-nums;
381381}
382382.kpi .lbl {
383383 font-size: 11px;
384384 letter-spacing: 1.6px;
385385 text-transform: uppercase;
386386 color: var(--text-muted);
387387 font-weight: 700;
388388 margin-top: 6px;
389389}
390390.kpi .sub { font-size: 12px; color: var(--text-dim); margin-top: 10px; }
391391.kpi-teal .num { color: var(--accent-hi); text-shadow: 0 0 24px rgba(20, 184, 166, .35); }
392392.kpi-amber .num { color: var(--accent-warn-hi); text-shadow: 0 0 24px rgba(245, 158, 11, .30); }
393393.kpi-rose .num { color: var(--accent-danger-hi); text-shadow: 0 0 24px rgba(244, 63, 94, .30); }
394394.kpi-emerald .num { color: var(--accent-ok-hi); text-shadow: 0 0 24px rgba(52, 211, 153, .30); }
395395.kpi-sky .num { color: var(--accent-info); text-shadow: 0 0 24px rgba(56, 189, 248, .30); }
396396
397397/* =========================================================================
398398 * PILLS + STATUS BADGES
399399 * ========================================================================= */
400400.pill {
401401 display: inline-flex;
402402 align-items: center;
403403 padding: 3px 9px;
404404 border-radius: var(--radius-pill);
405405 font-size: 10.5px;
406406 letter-spacing: .6px;
407407 text-transform: uppercase;
408408 font-weight: 700;
409409 border: 1px solid var(--border);
410410}
411411.pill-ok { background: rgba(52, 211, 153, .10); color: #a7f3d0; border-color: rgba(52, 211, 153, .35); }
412412.pill-warn { background: rgba(245, 158, 11, .10); color: var(--accent-warn-hi); border-color: rgba(245, 158, 11, .35); }
413413.pill-bad { background: rgba(244, 63, 94, .10); color: var(--accent-danger-hi); border-color: rgba(244, 63, 94, .35); }
414414.pill-info { background: rgba(56, 189, 248, .10); color: var(--accent-info); border-color: rgba(56, 189, 248, .35); }
415415.pill-mute { background: rgba(255,255,255,.03); color: var(--text-dim); }
416416
417417/* =========================================================================
418418 * TABLES
419419 * ========================================================================= */
420420.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
421421.tbl th {
422422 text-align: left;
423423 padding: 10px 14px;
424424 font-size: 10.5px;
425425 letter-spacing: 1.4px;
426426 text-transform: uppercase;
427427 color: var(--text-muted);
428428 font-weight: 700;
429429 border-bottom: 1px solid var(--border);
430430 background: rgba(255,255,255,.02);
431431}
432432.tbl td {
433433 padding: 12px 14px;
434434 border-bottom: 1px solid rgba(255,255,255,.03);
435435 vertical-align: middle;
436436}
437437.tbl tr:hover td { background: rgba(255,255,255,.02); }
438438.tbl .mono { font-family: var(--mono); font-size: 12.5px; }
439439.tbl .dim { color: var(--text-dim); }
440440
441441/* =========================================================================
442442 * CHIP RANGE PICKER (portfolio-canonical .tr-chip pattern)
443443 * ========================================================================= */
444444.tr-chip {
445445 display: inline-flex;
446446 align-items: center;
447447 padding: 5px 12px;
448448 border-radius: var(--radius-pill);
449449 font-size: 12px;
450450 font-weight: 600;
451451 color: var(--text-muted);
452452 text-decoration: none;
453453 background: transparent;
454454 border: 1px solid var(--border);
455455 cursor: pointer;
456456 transition: all .15s ease;
457457 font-family: inherit;
458458}
459459.tr-chip:hover { color: var(--text); border-color: var(--accent); }
460460.tr-chip.is-active {
461461 background: var(--accent);
462462 color: #0a1220;
463463 border-color: var(--accent);
464464}
465465.range-bar {
466466 display: flex;
467467 flex-wrap: wrap;
468468 align-items: center;
469469 gap: 8px;
470470 padding: 10px 14px;
471471 background: var(--bg-2);
472472 border: 1px solid var(--border);
473473 border-radius: var(--radius);
474474 margin-bottom: 16px;
475475}
476476.range-bar .rb-label {
477477 font-size: 11px;
478478 letter-spacing: 1.4px;
479479 text-transform: uppercase;
480480 color: var(--text-muted);
481481 font-weight: 700;
482482}
483483.range-bar input[type="text"],
484484.range-bar input[type="datetime-local"] {
485485 background: var(--bg-1);
486486 color: var(--text);
487487 border: 1px solid var(--border);
488488 border-radius: var(--radius-sm);
489489 padding: 5px 10px;
490490 font-size: 12.5px;
491491 font-family: inherit;
492492}
493493.range-bar input[type="text"]:focus,
494494.range-bar input[type="datetime-local"]:focus {
495495 outline: none;
496496 border-color: var(--accent);
497497}
498498
499499/* =========================================================================
500500 * CHART TOOLTIP (activity timeline etc.)
501501 * ========================================================================= */
502502.chart-tooltip {
503503 position: fixed;
504504 z-index: 9999;
505505 pointer-events: none;
506506 background: var(--bg-3);
507507 border: 1px solid var(--accent);
508508 border-radius: var(--radius-sm);
509509 padding: 8px 12px;
510510 font-size: 12px;
511511 color: var(--text);
512512 box-shadow: 0 8px 24px rgba(0,0,0,0.5);
513513 min-width: 160px;
514514 transform: translate(-50%, calc(-100% - 10px));
515515 opacity: 0;
516516 transition: opacity .1s ease;
517517}
518518.chart-tooltip.on { opacity: 1; }
519519.chart-tooltip .ct-date {
520520 font-family: var(--mono);
521521 font-size: 11px;
522522 color: var(--text-muted);
523523 letter-spacing: 0.5px;
524524 margin-bottom: 4px;
525525}
526526.chart-tooltip .ct-row {
527527 display: flex;
528528 align-items: center;
529529 gap: 6px;
530530 line-height: 1.5;
531531}
532532.chart-tooltip .ct-swatch {
533533 width: 9px; height: 9px; border-radius: 2px; display: inline-block;
534534}
535535.chart-tooltip .ct-hint {
536536 margin-top: 4px;
537537 font-size: 10.5px;
538538 color: var(--text-muted);
539539 font-style: italic;
540540}
541541
542542/* =========================================================================
543543 * BUTTONS
544544 * ========================================================================= */
545545.btn {
546546 display: inline-flex;
547547 align-items: center;
548548 gap: 6px;
549549 padding: 8px 16px;
550550 background: var(--accent);
551551 color: #030710;
552552 border: none;
553553 border-radius: var(--radius-pill);
554554 font-family: inherit;
555555 font-size: 12.5px;
556556 font-weight: 700;
557557 cursor: pointer;
558558 text-decoration: none;
559559 transition: transform .1s ease, box-shadow .1s ease, background .12s ease;
560560}
561561.btn:hover { background: var(--accent-hi); box-shadow: 0 4px 14px var(--accent-glow); transform: translateY(-1px); }
562562.btn-secondary {
563563 background: transparent;
564564 color: var(--text);
565565 border: 1px solid var(--border);
566566}
567567.btn-secondary:hover { background: var(--bg-2); border-color: var(--accent); color: var(--accent-hi); }
568568.btn-danger { background: var(--accent-danger); }
569569.btn-danger:hover { background: var(--accent-danger-hi); box-shadow: 0 4px 14px rgba(244, 63, 94, .35); }
570570
571571/* =========================================================================
572572 * FORMS
573573 * ========================================================================= */
574574input[type=text], input[type=email], input[type=password], input[type=number],
575575input[type=date], input[type=datetime-local], textarea, select {
576576 background: var(--bg-2);
577577 color: var(--text);
578578 border: 1px solid var(--border);
579579 border-radius: var(--radius-sm);
580580 padding: 8px 12px;
581581 font-family: inherit;
582582 font-size: 13px;
583583 outline: none;
584584 transition: border-color .12s ease;
585585 color-scheme: dark;
586586}
587587input:focus, textarea:focus, select:focus { border-color: var(--accent); }
588588
589589/* =========================================================================
590590 * MISC UTILITIES
591591 * ========================================================================= */
592592code {
593593 background: rgba(20, 184, 166, .10);
594594 color: var(--accent-hi);
595595 padding: 1px 6px;
596596 border-radius: 4px;
597597 font-family: var(--mono);
598598 font-size: 0.88em;
599599 border: 1px solid rgba(20, 184, 166, .20);
600600}
601601.mono { font-family: var(--mono); }
602602.dim { color: var(--text-dim); }
603603.muted { color: var(--text-muted); }
604604
605605/* Banner */
606606.banner {
607607 padding: 10px 14px;
608608 border-radius: var(--radius-sm);
609609 font-size: 13px;
610610 margin: 10px 0;
611611 border-left: 3px solid;
612612}
613613.banner-ok { background: rgba(52, 211, 153, .08); border-left-color: var(--accent-ok); color: #a7f3d0; }
614614.banner-warn { background: rgba(245, 158, 11, .08); border-left-color: var(--accent-warn); color: var(--accent-warn-hi); }
615615.banner-err { background: rgba(244, 63, 94, .08); border-left-color: var(--accent-danger); color: var(--accent-danger-hi); }
616616.banner-info { background: rgba(56, 189, 248, .08); border-left-color: var(--accent-info); color: var(--accent-info); }
617617
618618/* Scrollbar (webkit) */
619619::-webkit-scrollbar { width: 10px; height: 10px; }
620620::-webkit-scrollbar-track { background: var(--bg-0); }
621621::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 5px; border: 2px solid var(--bg-0); }
622622::-webkit-scrollbar-thumb:hover { background: var(--border-hi); }
623623
624624
625625/* =========================================================================
626626 * META-ADMIN UI PARITY — 2026-07-12
627627 * app-shell alias for .app, brand-text tokens, topbar-title/actions/iconbtn/
628628 * search/pill, profile dropdown, avatar, sidebar-link-logout.
629629 * Palette re-uses the existing DriftSense teal/rose/emerald tokens.
630630 * ========================================================================= */
631631.app-shell { display: grid; grid-template-columns: var(--sidebar-w) 1fr; min-height: 100vh; }
632632
633633/* Sidebar brand extra text nodes (kept .name/.role as legacy) */
634634.sidebar-brand .brand-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.05; }
635635.sidebar-brand .brand-name { font-family: var(--sans); font-weight: 700; letter-spacing: -.02em; font-size: 17px; color: var(--text); line-height: 1.1; }
636636.sidebar-brand .brand-name .accent { color: var(--accent-hi); }
637637.sidebar-brand .brand-sub { font-family: var(--sans); font-weight: 600; font-size: 9.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-muted); margin-top: 4px; }
638638
639639/* Sign-out link at the bottom of the sidebar */
640640.sidebar-link-logout { color: var(--text-muted); }
641641.sidebar-link-logout:hover { color: var(--accent-danger-hi); background: rgba(244,63,94,.06); }
642642.sidebar-link-logout svg { opacity: .8; }
643643
644644/* Topbar polish + new elements */
645645.topbar-title { font-size: 15px; font-weight: 600; letter-spacing: .3px; color: var(--text); margin: 0; }
646646.topbar-actions { display: flex; align-items: center; gap: 8px; margin-left: 4px; }
647647.topbar-iconbtn {
648648 width: 34px; height: 34px; display: grid; place-items: center;
649649 border-radius: var(--radius-sm); color: var(--text-muted);
650650 background: transparent; border: 1px solid transparent; cursor: pointer;
651651 text-decoration: none;
652652 transition: color .15s, border-color .15s, box-shadow .15s;
653653}
654654.topbar-iconbtn:hover { color: var(--text); border-color: var(--accent); box-shadow: 0 0 8px var(--accent-glow); }
655655.topbar-iconbtn svg { width: 18px; height: 18px; }
656656.topbar-search {
657657 display: flex; align-items: center; gap: 8px;
658658 background: var(--bg-2); border: 1px solid var(--border);
659659 padding: 6px 12px; border-radius: var(--radius-sm);
660660 width: 260px; max-width: 100%;
661661 transition: border-color .15s, box-shadow .15s;
662662}
663663.topbar-search:focus-within { border-color: var(--border-focus); box-shadow: 0 0 0 3px var(--accent-glow); }
664664.topbar-search input { flex: 1; background: transparent; border: 0; outline: none; color: var(--text); font-size: 13px; font-family: var(--mono); }
665665.topbar-search input::placeholder { color: var(--text-muted); }
666666.topbar-search svg { width: 14px; height: 14px; color: var(--text-dim); }
667667
668668/* Avatar */
669669.avatar {
670670 width: 30px; height: 30px; border-radius: 50%;
671671 background: linear-gradient(135deg, var(--accent) 0%, var(--accent-deep) 100%);
672672 color: #030710;
673673 display: grid; place-items: center;
674674 font-size: 11.5px; font-weight: 700;
675675 font-family: var(--mono);
676676 flex: 0 0 auto;
677677}
678678
679679/* Profile dropdown */
680680.profile-dropdown { position: relative; }
681681.profile-btn {
682682 display: flex; align-items: center; gap: 8px;
683683 background: transparent; border: 1px solid transparent;
684684 padding: 4px 10px 4px 4px; border-radius: var(--radius-sm);
685685 cursor: pointer; color: var(--text);
686686 transition: border-color .15s, box-shadow .15s;
687687}
688688.profile-btn:hover { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow); }
689689.profile-dropdown-menu {
690690 display: none;
691691 position: absolute; right: 0; top: calc(100% + 8px);
692692 min-width: 280px;
693693 background: linear-gradient(180deg, var(--bg-2) 0%, var(--bg-1) 100%);
694694 border: 1px solid var(--border);
695695 border-radius: var(--radius-sm);
696696 box-shadow: 0 10px 40px rgba(0,0,0,.6), 0 0 0 1px rgba(20,184,166,.15);
697697 padding: 6px;
698698 z-index: 100;
699699}
700700.profile-dropdown-menu.open { display: block; }
701701.profile-dropdown-menu::before {
702702 content: ''; position: absolute; top: -6px; right: 20px;
703703 width: 10px; height: 10px;
704704 background: var(--bg-2);
705705 border-left: 1px solid var(--border);
706706 border-top: 1px solid var(--border);
707707 transform: rotate(45deg);
708708}
709709.profile-dropdown-menu a {
710710 display: flex; align-items: center; gap: 10px;
711711 padding: 7px 12px;
712712 color: var(--text-dim);
713713 text-decoration: none;
714714 font-size: 12.5px;
715715 border-radius: 6px;
716716 transition: color .1s, background .1s;
717717}
718718.profile-dropdown-menu a:hover { color: var(--text); background: rgba(20,184,166,.06); }
719719.profile-dropdown-menu a .dropdown-icon { color: var(--text-muted); display: inline-flex; }
720720.profile-dropdown-menu a:hover .dropdown-icon { color: var(--accent-hi); }
721721.profile-dropdown-section {
722722 padding: 10px 12px 4px;
723723 font-size: 10px; letter-spacing: .12em; text-transform: uppercase;
724724 color: var(--text-muted); font-weight: 700;
725725}
726726.profile-dropdown-divider { height: 1px; background: var(--border); margin: 6px 4px; }
727727
728728/* Sidebar-collapsed mode (desktop) */
729729html.sidebar-collapsed .app-shell { grid-template-columns: 64px 1fr; }
730730html.sidebar-collapsed .sidebar-brand .brand-text,
731731html.sidebar-collapsed .sidebar-link span,
732732html.sidebar-collapsed .sidebar-section-label,
733733html.sidebar-collapsed .ds-stable-tag { display: none; }
734734html.sidebar-collapsed .sidebar-link { justify-content: center; padding: 10px 0; }
735735html.sidebar-collapsed .sidebar-brand { justify-content: center; padding: 8px 0 16px; }
Keyboard: j next diff k previous diff g top G bottom r restore c compile-check ? help