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

O Operator
Diff

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

modified on local at 2026-07-10 23:21:47

Added
+101
lines
Removed
-0
lines
Context
441
unchanged
Blobs
from 2fb9e1d29755
to 1369c2c778fe
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/* Main content area */
156156.app-main { min-width: 0; }
157157.topbar {
158158 padding: 16px 32px;
159159 border-bottom: 1px solid var(--border);
160160 display: flex;
161161 align-items: center;
162162 gap: 16px;
163163 background: rgba(10, 18, 32, 0.5);
164164 backdrop-filter: blur(8px);
165165 position: sticky; top: 0; z-index: 10;
166166}
167167.topbar h1 { margin: 0; font-size: 15px; font-weight: 600; letter-spacing: .3px; }
168168.topbar-spacer { flex: 1; }
169169.topbar-user {
170170 display: flex;
171171 align-items: center;
172172 gap: 10px;
173173 padding: 5px 12px 5px 5px;
174174 background: var(--bg-2);
175175 border: 1px solid var(--border);
176176 border-radius: var(--radius-pill);
177177 font-size: 12.5px;
178178}
179179.topbar-user .initials {
180180 width: 26px; height: 26px;
181181 border-radius: 50%;
182182 background: linear-gradient(135deg, var(--accent) 0%, var(--accent-deep) 100%);
183183 color: #030710;
184184 display: grid; place-items: center;
185185 font-size: 11px; font-weight: 700;
186186 font-family: var(--mono);
187187}
188188
189189.app-content {
190190 padding: 32px 40px 96px;
191191 max-width: 1400px;
192192}
193193
194194/* =========================================================================
195195 * PAGE HEAD
196196 * ========================================================================= */
197197.page-head { margin-bottom: 32px; }
198198.page-eyebrow {
199199 display: inline-flex;
200200 align-items: center;
201201 gap: 8px;
202202 font-size: 10.5px;
203203 letter-spacing: 1.8px;
204204 text-transform: uppercase;
205205 color: var(--accent-hi);
206206 font-weight: 700;
207207 padding: 5px 12px;
208208 background: rgba(20, 184, 166, .10);
209209 border: 1px solid rgba(20, 184, 166, .30);
210210 border-radius: var(--radius-pill);
211211 margin-bottom: 14px;
212212 text-decoration: none;
213213}
214214.page-eyebrow .dot {
215215 width: 6px; height: 6px; border-radius: 50%;
216216 background: var(--accent-hi);
217217 box-shadow: 0 0 10px var(--accent-hi);
218218}
219219.page-title {
220220 margin: 0 0 8px;
221221 font-size: 32px;
222222 font-weight: 800;
223223 letter-spacing: -0.02em;
224224 background: linear-gradient(135deg, #fff 0%, #cbd5e1 60%, var(--accent-hi) 100%);
225225 -webkit-background-clip: text;
226226 background-clip: text;
227227 color: transparent;
228228}
229229.page-subtitle {
230230 color: var(--text-dim);
231231 font-size: 14.5px;
232232 max-width: 780px;
233233 margin: 0;
234234}
235235
236236/* =========================================================================
237237 * MODULES / CARDS
238238 * ========================================================================= */
239239.dash-grid {
240240 display: grid;
241241 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
242242 gap: 16px;
243243 margin-bottom: 20px;
244244}
245245.module {
246246 background: var(--bg-panel);
247247 border: 1px solid var(--border);
248248 border-radius: var(--radius);
249249 overflow: hidden;
250250 transition: border-color .15s ease, box-shadow .15s ease;
251251}
252252.module:hover { border-color: var(--border-hi); }
253253.module-head {
254254 padding: 12px 16px;
255255 border-bottom: 1px solid var(--border);
256256 display: flex;
257257 align-items: center;
258258 justify-content: space-between;
259259 gap: 12px;
260260 background: rgba(20, 184, 166, .03);
261261}
262262.module-head .left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
263263.module-icon {
264264 width: 26px; height: 26px;
265265 border-radius: 7px;
266266 display: grid; place-items: center;
267267 color: var(--accent-hi);
268268 background: rgba(20, 184, 166, .10);
269269 border: 1px solid rgba(20, 184, 166, .30);
270270}
271271.module-title { font-size: 13px; font-weight: 700; letter-spacing: .3px; }
272272.module-subtitle {
273273 font-size: 11.5px;
274274 font-weight: 400;
275275 color: #b8c5d6;
276276 margin-left: 8px;
277277 padding-left: 10px;
278278 border-left: 1px solid var(--border);
279279 line-height: 1.35;
280280}
281281.module-body { padding: 16px; }
282282.module-body.tight { padding: 0; }
283283
284284/* Module glow variants */
285285.module.glow-teal { box-shadow: 0 0 0 1px rgba(20, 184, 166, .20), 0 0 26px rgba(20, 184, 166, .10); }
286286.module.glow-amber { box-shadow: 0 0 0 1px rgba(245, 158, 11, .20), 0 0 26px rgba(245, 158, 11, .10); }
287287.module.glow-rose { box-shadow: 0 0 0 1px rgba(244, 63, 94, .20), 0 0 26px rgba(244, 63, 94, .10); }
288288.module.glow-emerald{ box-shadow: 0 0 0 1px rgba(52, 211, 153, .20), 0 0 26px rgba(52, 211, 153, .10); }
289289.module.glow-sky { box-shadow: 0 0 0 1px rgba(56, 189, 248, .20), 0 0 26px rgba(56, 189, 248, .10); }
290290
291291/* =========================================================================
292292 * KPI TILES
293293 * ========================================================================= */
294294.kpi { padding: 20px 22px; }
295295.kpi .num {
296296 font-size: 34px;
297297 font-weight: 800;
298298 letter-spacing: -0.02em;
299299 line-height: 1.1;
300300 font-variant-numeric: tabular-nums;
301301}
302302.kpi .lbl {
303303 font-size: 11px;
304304 letter-spacing: 1.6px;
305305 text-transform: uppercase;
306306 color: var(--text-muted);
307307 font-weight: 700;
308308 margin-top: 6px;
309309}
310310.kpi .sub { font-size: 12px; color: var(--text-dim); margin-top: 10px; }
311311.kpi-teal .num { color: var(--accent-hi); text-shadow: 0 0 24px rgba(20, 184, 166, .35); }
312312.kpi-amber .num { color: var(--accent-warn-hi); text-shadow: 0 0 24px rgba(245, 158, 11, .30); }
313313.kpi-rose .num { color: var(--accent-danger-hi); text-shadow: 0 0 24px rgba(244, 63, 94, .30); }
314314.kpi-emerald .num { color: var(--accent-ok-hi); text-shadow: 0 0 24px rgba(52, 211, 153, .30); }
315315.kpi-sky .num { color: var(--accent-info); text-shadow: 0 0 24px rgba(56, 189, 248, .30); }
316316
317317/* =========================================================================
318318 * PILLS + STATUS BADGES
319319 * ========================================================================= */
320320.pill {
321321 display: inline-flex;
322322 align-items: center;
323323 padding: 3px 9px;
324324 border-radius: var(--radius-pill);
325325 font-size: 10.5px;
326326 letter-spacing: .6px;
327327 text-transform: uppercase;
328328 font-weight: 700;
329329 border: 1px solid var(--border);
330330}
331331.pill-ok { background: rgba(52, 211, 153, .10); color: #a7f3d0; border-color: rgba(52, 211, 153, .35); }
332332.pill-warn { background: rgba(245, 158, 11, .10); color: var(--accent-warn-hi); border-color: rgba(245, 158, 11, .35); }
333333.pill-bad { background: rgba(244, 63, 94, .10); color: var(--accent-danger-hi); border-color: rgba(244, 63, 94, .35); }
334334.pill-info { background: rgba(56, 189, 248, .10); color: var(--accent-info); border-color: rgba(56, 189, 248, .35); }
335335.pill-mute { background: rgba(255,255,255,.03); color: var(--text-dim); }
336336
337337/* =========================================================================
338338 * TABLES
339339 * ========================================================================= */
340340.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
341341.tbl th {
342342 text-align: left;
343343 padding: 10px 14px;
344344 font-size: 10.5px;
345345 letter-spacing: 1.4px;
346346 text-transform: uppercase;
347347 color: var(--text-muted);
348348 font-weight: 700;
349349 border-bottom: 1px solid var(--border);
350350 background: rgba(255,255,255,.02);
351351}
352352.tbl td {
353353 padding: 12px 14px;
354354 border-bottom: 1px solid rgba(255,255,255,.03);
355355 vertical-align: middle;
356356}
357357.tbl tr:hover td { background: rgba(255,255,255,.02); }
358358.tbl .mono { font-family: var(--mono); font-size: 12.5px; }
359359.tbl .dim { color: var(--text-dim); }
360
361/* =========================================================================
362 * CHIP RANGE PICKER (portfolio-canonical .tr-chip pattern)
363 * ========================================================================= */
364.tr-chip {
365 display: inline-flex;
366 align-items: center;
367 padding: 5px 12px;
368 border-radius: var(--radius-pill);
369 font-size: 12px;
370 font-weight: 600;
371 color: var(--text-muted);
372 text-decoration: none;
373 background: transparent;
374 border: 1px solid var(--border);
375 cursor: pointer;
376 transition: all .15s ease;
377 font-family: inherit;
378}
379.tr-chip:hover { color: var(--text); border-color: var(--accent); }
380.tr-chip.is-active {
381 background: var(--accent);
382 color: #0a1220;
383 border-color: var(--accent);
384}
385.range-bar {
386 display: flex;
387 flex-wrap: wrap;
388 align-items: center;
389 gap: 8px;
390 padding: 10px 14px;
391 background: var(--bg-2);
392 border: 1px solid var(--border);
393 border-radius: var(--radius);
394 margin-bottom: 16px;
395}
396.range-bar .rb-label {
397 font-size: 11px;
398 letter-spacing: 1.4px;
399 text-transform: uppercase;
400 color: var(--text-muted);
401 font-weight: 700;
402}
403.range-bar input[type="text"],
404.range-bar input[type="datetime-local"] {
405 background: var(--bg-1);
406 color: var(--text);
407 border: 1px solid var(--border);
408 border-radius: var(--radius-sm);
409 padding: 5px 10px;
410 font-size: 12.5px;
411 font-family: inherit;
412}
413.range-bar input[type="text"]:focus,
414.range-bar input[type="datetime-local"]:focus {
415 outline: none;
416 border-color: var(--accent);
417}
418
419/* =========================================================================
420 * CHART TOOLTIP (activity timeline etc.)
421 * ========================================================================= */
422.chart-tooltip {
423 position: fixed;
424 z-index: 9999;
425 pointer-events: none;
426 background: var(--bg-3);
427 border: 1px solid var(--accent);
428 border-radius: var(--radius-sm);
429 padding: 8px 12px;
430 font-size: 12px;
431 color: var(--text);
432 box-shadow: 0 8px 24px rgba(0,0,0,0.5);
433 min-width: 160px;
434 transform: translate(-50%, calc(-100% - 10px));
435 opacity: 0;
436 transition: opacity .1s ease;
437}
438.chart-tooltip.on { opacity: 1; }
439.chart-tooltip .ct-date {
440 font-family: var(--mono);
441 font-size: 11px;
442 color: var(--text-muted);
443 letter-spacing: 0.5px;
444 margin-bottom: 4px;
445}
446.chart-tooltip .ct-row {
447 display: flex;
448 align-items: center;
449 gap: 6px;
450 line-height: 1.5;
451}
452.chart-tooltip .ct-swatch {
453 width: 9px; height: 9px; border-radius: 2px; display: inline-block;
454}
455.chart-tooltip .ct-hint {
456 margin-top: 4px;
457 font-size: 10.5px;
458 color: var(--text-muted);
459 font-style: italic;
460}
360461
361462/* =========================================================================
362463 * BUTTONS
363464 * ========================================================================= */
364465.btn {
365466 display: inline-flex;
366467 align-items: center;
367468 gap: 6px;
368469 padding: 8px 16px;
369470 background: var(--accent);
370471 color: #030710;
371472 border: none;
372473 border-radius: var(--radius-pill);
373474 font-family: inherit;
374475 font-size: 12.5px;
375476 font-weight: 700;
376477 cursor: pointer;
377478 text-decoration: none;
378479 transition: transform .1s ease, box-shadow .1s ease, background .12s ease;
379480}
380481.btn:hover { background: var(--accent-hi); box-shadow: 0 4px 14px var(--accent-glow); transform: translateY(-1px); }
381482.btn-secondary {
382483 background: transparent;
383484 color: var(--text);
384485 border: 1px solid var(--border);
385486}
386487.btn-secondary:hover { background: var(--bg-2); border-color: var(--accent); color: var(--accent-hi); }
387488.btn-danger { background: var(--accent-danger); }
388489.btn-danger:hover { background: var(--accent-danger-hi); box-shadow: 0 4px 14px rgba(244, 63, 94, .35); }
389490
390491/* =========================================================================
391492 * FORMS
392493 * ========================================================================= */
393494input[type=text], input[type=email], input[type=password], input[type=number],
394495input[type=date], input[type=datetime-local], textarea, select {
395496 background: var(--bg-2);
396497 color: var(--text);
397498 border: 1px solid var(--border);
398499 border-radius: var(--radius-sm);
399500 padding: 8px 12px;
400501 font-family: inherit;
401502 font-size: 13px;
402503 outline: none;
403504 transition: border-color .12s ease;
404505 color-scheme: dark;
405506}
406507input:focus, textarea:focus, select:focus { border-color: var(--accent); }
407508
408509/* =========================================================================
409510 * MISC UTILITIES
410511 * ========================================================================= */
411512code {
412513 background: rgba(20, 184, 166, .10);
413514 color: var(--accent-hi);
414515 padding: 1px 6px;
415516 border-radius: 4px;
416517 font-family: var(--mono);
417518 font-size: 0.88em;
418519 border: 1px solid rgba(20, 184, 166, .20);
419520}
420521.mono { font-family: var(--mono); }
421522.dim { color: var(--text-dim); }
422523.muted { color: var(--text-muted); }
423524
424525/* Banner */
425526.banner {
426527 padding: 10px 14px;
427528 border-radius: var(--radius-sm);
428529 font-size: 13px;
429530 margin: 10px 0;
430531 border-left: 3px solid;
431532}
432533.banner-ok { background: rgba(52, 211, 153, .08); border-left-color: var(--accent-ok); color: #a7f3d0; }
433534.banner-warn { background: rgba(245, 158, 11, .08); border-left-color: var(--accent-warn); color: var(--accent-warn-hi); }
434535.banner-err { background: rgba(244, 63, 94, .08); border-left-color: var(--accent-danger); color: var(--accent-danger-hi); }
435536.banner-info { background: rgba(56, 189, 248, .08); border-left-color: var(--accent-info); color: var(--accent-info); }
436537
437538/* Scrollbar (webkit) */
438539::-webkit-scrollbar { width: 10px; height: 10px; }
439540::-webkit-scrollbar-track { background: var(--bg-0); }
440541::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 5px; border: 2px solid var(--bg-0); }
441542::-webkit-scrollbar-thumb:hover { background: var(--border-hi); }