diff --git a/README.md b/README.md index 1d2655b..ae6bcd6 100644 --- a/README.md +++ b/README.md @@ -728,7 +728,6 @@ The `docs/` folder contains dashboard screenshots referenced by this README. The | File | Description | |------|-------------| | `docs/dashboard.png` | Full operator dashboard - hero image at the top of this README | -| `docs/design/modrinth-app-final-concept.png` | Final app-style design reference used for the current shell | | `docs/boot.png` | Boot sequence animation | | `docs/map.png` | Worldview map with marker types and flight arcs | | `docs/globe.png` | 3D WebGL globe view with atmosphere glow and markers | diff --git a/dashboard/public/assets/app-shell-texture.png b/dashboard/public/assets/app-shell-texture.png deleted file mode 100644 index ca61d07..0000000 Binary files a/dashboard/public/assets/app-shell-texture.png and /dev/null differ diff --git a/dashboard/public/jarvis.html b/dashboard/public/jarvis.html index bb5b437..d3efaac 100644 --- a/dashboard/public/jarvis.html +++ b/dashboard/public/jarvis.html @@ -498,100 +498,6 @@ body[data-view="markets"] .lp-macro,body[data-view="markets"] .lp-ideas{max-widt .map-container{min-height:420px} .map-legend{left:8px;right:8px;bottom:8px} } - -/* FINAL APP-SHELL FIDELITY PASS */ -body::before{content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;background-image:linear-gradient(180deg,rgba(10,13,18,.72),rgba(10,13,18,.88)),url('./assets/app-shell-texture.png');background-size:auto,420px 420px;background-blend-mode:normal,soft-light;opacity:.5} -#main.app-root{grid-template-columns:150px minmax(0,1fr);gap:0;background:linear-gradient(180deg,#171a20,#11141a)} -.app-sidebar{width:150px;padding:28px 20px 24px;background:linear-gradient(180deg,#151a21,#10151c);border-right:1px solid rgba(124,138,154,.24);box-shadow:inset -1px 0 rgba(255,255,255,.03)} -.rail-live{height:34px;min-width:86px;padding:0 13px;border-radius:999px;background:rgba(255,255,255,.035);display:flex;align-items:center;justify-content:center;gap:8px;color:var(--app-muted);font-weight:800;font-size:12px} -.app-nav{position:relative;gap:18px;margin-top:6px} -.nav-glider{position:absolute;left:50%;top:0;width:86px;height:86px;border-radius:999px;background:radial-gradient(circle at 50% 46%,rgba(27,217,106,.42),rgba(27,217,106,.2) 48%,rgba(27,217,106,0) 72%);box-shadow:0 0 34px rgba(27,217,106,.34),inset 0 0 0 1px rgba(27,217,106,.22);transform:translate(-50%,0);transition:transform .58s cubic-bezier(.2,.9,.2,1),opacity .28s ease;pointer-events:none} -.nav-glider::after{content:'';position:absolute;inset:13px;border-radius:999px;border:2px solid rgba(27,217,106,.8);box-shadow:0 0 22px rgba(27,217,106,.42)} -.nav-item{position:relative;z-index:1;width:96px;height:92px;border-radius:28px;background:transparent;color:#aeb7c4;gap:8px;transition:transform .24s ease,color .24s ease,filter .24s ease} -.nav-item:hover{background:transparent;color:#f3f7fa;transform:translateY(-2px)} -.nav-item.active{background:transparent;color:#fff;filter:drop-shadow(0 12px 28px rgba(27,217,106,.18))} -.nav-icon{width:46px;height:46px;border:0;border-radius:16px;display:grid;place-items:center;background:rgba(255,255,255,.035);box-shadow:inset 0 0 0 2px currentColor;transition:background .24s ease,box-shadow .24s ease,transform .24s ease} -.nav-icon svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:2.05;stroke-linecap:round;stroke-linejoin:round} -.nav-item.active .nav-icon{background:rgba(27,217,106,.18);box-shadow:inset 0 0 0 2px var(--app-green),0 0 0 10px rgba(27,217,106,.04);transform:scale(1.04)} -.nav-item small{font-size:11px;font-weight:800;line-height:1;color:currentColor;text-shadow:0 1px 14px rgba(0,0,0,.35)} -.sidebar-status{width:96px;border-top-color:rgba(124,138,154,.28);font-size:12px} -.app-shell{margin:14px 16px 14px 0;border-radius:32px;background:#181c23;border-color:#35404c;box-shadow:0 24px 80px rgba(0,0,0,.34),inset 0 1px rgba(255,255,255,.035)} -.topbar{padding:30px 34px 18px;grid-template-columns:minmax(280px,420px) minmax(280px,1fr) auto;background:linear-gradient(180deg,#20242c,#1e222a);gap:26px} -.brand{font-size:28px;letter-spacing:-.01em} -.view-subtitle{max-width:420px;color:#97a2b2} -.regime-chip{display:none} -.app-search{height:56px;border-radius:18px;background:#1a1f27;border-color:#38424e;font-size:15px;box-shadow:inset 0 1px rgba(255,255,255,.03)} -.top-right{grid-column:auto;justify-content:flex-end;align-content:flex-start;gap:10px} -.theme-switch,.meta-pill,.guide-btn,.alert-badge,.perf-pill{min-height:43px;border-radius:20px;border-color:#38424e;background:#1d222b;box-shadow:inset 0 1px rgba(255,255,255,.025)} -.theme-switch{padding:5px} -.theme-btn{min-width:52px;padding:8px 12px;font-size:12px} -.theme-btn.active{box-shadow:0 7px 20px rgba(27,217,106,.22)} -.alert-badge{background:rgba(255,95,111,.13);border-color:rgba(255,95,111,.38)} -.grid{padding:20px 24px 24px;grid-template-columns:300px minmax(0,1fr);gap:18px;background:#181c23} -.top-metric-row{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:14px} -.top-metric-card{position:relative;overflow:hidden;min-height:86px;padding:16px 18px;border:1px solid #333d49;border-radius:19px;background:linear-gradient(145deg,#252b34,#1d232c);box-shadow:inset 0 1px rgba(255,255,255,.035)} -.top-metric-card::after{content:'';position:absolute;inset:auto -20% -65% -20%;height:80%;background:radial-gradient(circle,rgba(27,217,106,.13),transparent 62%);opacity:0;transition:opacity .3s ease} -.top-metric-card:hover::after{opacity:1} -.tm-icon{width:38px;height:38px;border-radius:14px;display:grid;place-items:center;background:rgba(27,217,106,.11);color:var(--app-green);margin-bottom:8px} -.tm-icon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round} -.tm-label{font-size:10px;font-weight:900;letter-spacing:.06em;text-transform:uppercase;color:#98a4b3} -.tm-value{margin-top:2px;font-size:20px;font-weight:900;color:#f3f6f8;letter-spacing:-.02em} -.tm-sub{font-size:11px;color:#8e99a8} -.g-panel,.map-region-bar,.map-container,.glossary-panel{border-color:#333d49;background:linear-gradient(180deg,#252a33,#202630)} -.g-panel{border-radius:20px;padding:18px;box-shadow:inset 0 1px rgba(255,255,255,.035)} -.map-container{border-radius:22px;background:#0c1118;box-shadow:inset 0 1px rgba(255,255,255,.04),0 18px 48px rgba(0,0,0,.22)} -.map-region-bar{border-radius:20px;padding:16px} -.layer-item,.site-row,.econ-row,.src-item,.mc,.signal-row,.sm,.idea-card,.ic,.tk-card{background:#202630;border-color:#303946;transition:transform .22s ease,border-color .22s ease,background .22s ease,box-shadow .22s ease} -.layer-item:hover,.signal-row:hover,.ic:hover,.tk-card.clickable:hover,.mc:hover{transform:translateY(-2px);border-color:rgba(27,217,106,.32);box-shadow:0 12px 32px rgba(0,0,0,.14)} -.layer-count,.site-val,.eval,.sm .smv{font-weight:900;color:var(--app-green)} -.sec-head h3{font-size:18px;letter-spacing:-.01em} -.badge{background:#1c222b;border-color:#33404c} -.right-actions .terminal-output{min-height:72px} -.sm .smb span,.mc .mbar span{background:linear-gradient(90deg,#1bd96a,#7ee787)} -.regime-chip .blink,.sidebar-status-dot{animation:status-pulse 2.2s ease-in-out infinite} -.map-container::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(27,217,106,.035),transparent);transform:translateX(-120%);animation:surface-sweep 8s ease-in-out infinite} -body.view-transitioning .grid{animation:view-shift .42s cubic-bezier(.2,.9,.2,1)} -body.theme-transitioning .app-shell{animation:theme-wash .42s ease} -.motion-stagger{animation:panel-rise .52s cubic-bezier(.2,.9,.2,1) both} -.alert-badge,.delta-badge.new{animation:soft-alert 2.4s ease-in-out infinite} -@keyframes status-pulse{0%,100%{box-shadow:0 0 0 0 rgba(27,217,106,.32)}50%{box-shadow:0 0 0 7px rgba(27,217,106,0)}} -@keyframes surface-sweep{0%,72%{transform:translateX(-120%)}100%{transform:translateX(120%)}} -@keyframes panel-rise{from{opacity:0;transform:translateY(16px) scale(.985);filter:blur(4px)}to{opacity:1;transform:none;filter:none}} -@keyframes view-shift{from{opacity:.18;transform:translateX(18px) scale(.985);filter:blur(8px)}to{opacity:1;transform:none;filter:none}} -@keyframes theme-wash{0%{filter:brightness(.75) saturate(.75)}100%{filter:none}} -@keyframes soft-alert{0%,100%{box-shadow:inset 0 1px rgba(255,255,255,.025)}50%{box-shadow:0 0 0 5px rgba(255,95,111,.05),inset 0 1px rgba(255,255,255,.025)}} -body.low-perf .motion-stagger,body.low-perf .alert-badge,body.low-perf .delta-badge.new,body.low-perf .map-container::after,body.low-perf .regime-chip .blink,body.low-perf .sidebar-status-dot{animation:none!important} -body.low-perf .nav-glider,body.low-perf .nav-item,body.low-perf .layer-item,body.low-perf .signal-row,body.low-perf .ic,body.low-perf .tk-card,body.low-perf .mc{transition:none!important} - -@media(min-width:1320px){ - .grid{grid-template-columns:300px minmax(0,1fr) 380px} - #rightRail{grid-column:auto} -} -@media(max-width:1240px){ - .topbar{grid-template-columns:1fr;gap:14px} - .top-right{justify-content:flex-start} - .top-metric-row{grid-template-columns:repeat(3,minmax(0,1fr))} -} -@media(max-width:760px){ - body::before{background-size:auto,300px 300px} - #main.app-root{display:block;padding:0 0 88px} - .app-sidebar{width:auto;height:78px;padding:8px 12px} - .rail-live,.sidebar-status{display:none} - .app-nav{margin:0;gap:6px} - .nav-glider{left:0;width:58px;height:58px} - .nav-glider::after{inset:8px} - .nav-item{width:56px;height:58px;border-radius:19px} - .nav-icon{width:30px;height:30px;border-radius:10px} - .nav-icon svg{width:18px;height:18px} - .nav-item small{display:none} - .app-shell{margin:10px;border-radius:24px} - .topbar{padding:22px} - .top-metric-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px} - .top-metric-card{min-height:76px;padding:13px} -} -@media(prefers-reduced-motion:reduce){ - *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important} -} @@ -604,15 +510,14 @@ body.low-perf .nav-glider,body.low-perf .nav-item,body.low-perf .layer-item,body