Skip to content

Commit 3d1b81d

Browse files
authored
Merge pull request #224 from itsmeakhil/Devtools_1.0
Devtools 1.0
2 parents ca526da + d993981 commit 3d1b81d

12 files changed

Lines changed: 952 additions & 63 deletions

File tree

apps/web/src/app/globals.css

Lines changed: 260 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -841,9 +841,12 @@ body {
841841
}
842842

843843
.dark .glass-overlay {
844-
background: hsl(var(--surface-1) / 0.7);
845-
border: 1px solid rgba(255, 255, 255, 0.06);
846-
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.04);
844+
background: linear-gradient(180deg, rgba(122, 107, 245, 0.05), transparent 42%), var(--mdt-surface);
845+
backdrop-filter: blur(16px);
846+
-webkit-backdrop-filter: blur(16px);
847+
border: 1px solid var(--mdt-border);
848+
border-radius: 18px;
849+
box-shadow: 0 18px 50px -24px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.05);
847850
}
848851

849852
/* Modals, command palette, dropdowns */
@@ -856,9 +859,9 @@ body {
856859
}
857860

858861
.dark .glass-modal {
859-
background: hsl(var(--surface-2) / 0.94);
860-
border: 1px solid rgba(255, 255, 255, 0.07);
861-
box-shadow: 0 24px 64px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.06);
862+
background: linear-gradient(180deg, rgba(122, 107, 245, 0.06), transparent 38%), var(--mdt-surface-hi);
863+
border: 1px solid var(--mdt-border);
864+
box-shadow: 0 24px 64px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.06);
862865
}
863866

864867
/* Core workspace — NO glass, solid crisp background */
@@ -1445,4 +1448,254 @@ body {
14451448
.dark .todo-app .paper-grain::before {
14461449
mix-blend-mode: screen;
14471450
opacity: 0.04;
1448-
}
1451+
}
1452+
/* ─────────────────────────────────────────────────────────────────────────
1453+
MYDEVTOOLS · DECK DESIGN LAYER (matches the investor-deck aesthetic)
1454+
Theme-independent — marketing surfaces always render the dark "deck" look.
1455+
───────────────────────────────────────────────────────────────────────── */
1456+
:root {
1457+
--mdt-bg: #08090f;
1458+
--mdt-bg2: #0d0f18;
1459+
--mdt-surface: #14161f;
1460+
--mdt-surface-hi: #1c1f2b;
1461+
--mdt-border: #2a2e3d;
1462+
--mdt-text: #f4f5fa;
1463+
--mdt-muted: #9aa0b4;
1464+
--mdt-faint: #5b6076;
1465+
--mdt-indigo: #5b63f0;
1466+
--mdt-violet: #9a5cf2;
1467+
--mdt-cyan: #4fd0e6;
1468+
--mdt-green: #3fd79a;
1469+
--mdt-amber: #f2a93b;
1470+
--mdt-grad: linear-gradient(100deg, #5b63f0 0%, #9a5cf2 52%, #4fd0e6 100%);
1471+
--mdt-grad-soft: linear-gradient(100deg, rgba(91,99,240,.16), rgba(154,92,242,.16) 52%, rgba(79,208,230,.16));
1472+
}
1473+
1474+
/* dark base retuned to the deck palette */
1475+
.dark {
1476+
--background: 232 30% 5%;
1477+
--foreground: 228 50% 97%;
1478+
--card: 230 24% 9%;
1479+
--card-foreground: 228 50% 97%;
1480+
--popover: 230 24% 9%;
1481+
--popover-foreground: 228 50% 97%;
1482+
--muted: 232 26% 10%;
1483+
--muted-foreground: 228 16% 70%;
1484+
--border: 232 22% 15%;
1485+
--input: 232 22% 15%;
1486+
--surface-1: 232 30% 6%;
1487+
--surface-2: 232 28% 8%;
1488+
--surface-3: 232 26% 11%;
1489+
}
1490+
1491+
/* deck canvas wrapper — forces the dark premium look on marketing pages */
1492+
html { overflow-x: hidden; }
1493+
.mdt-deck {
1494+
position: relative;
1495+
background: var(--mdt-bg);
1496+
color: var(--mdt-text);
1497+
isolation: isolate;
1498+
}
1499+
/* ambient color depth fixed behind all content (kills flat grey sections) */
1500+
.mdt-deck::before {
1501+
content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
1502+
background:
1503+
radial-gradient(52% 42% at 88% 6%, rgba(122,107,245,.15), transparent 60%),
1504+
radial-gradient(48% 40% at 4% 70%, rgba(79,140,235,.12), transparent 60%),
1505+
radial-gradient(85% 55% at 52% 118%, rgba(154,92,242,.11), transparent 60%);
1506+
}
1507+
.mdt-deck ::selection { background: rgba(122,107,245,.35); }
1508+
1509+
/* atmospheric backdrop: orbs + grid + grain, behind all content */
1510+
.mdt-backdrop { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
1511+
.mdt-orb { position: absolute; border-radius: 9999px; filter: blur(40px); opacity: .9; }
1512+
.mdt-orb--brand { background: radial-gradient(circle at 35% 35%, rgba(154,92,242,.55), rgba(91,99,240,.28) 45%, transparent 70%); }
1513+
.mdt-orb--cyan { background: radial-gradient(circle, rgba(79,208,230,.32), transparent 70%); }
1514+
.mdt-orb--blue { background: radial-gradient(circle, rgba(79,140,235,.30), transparent 70%); }
1515+
.mdt-grid {
1516+
position: absolute; inset: 0; pointer-events: none;
1517+
background-image:
1518+
linear-gradient(to right, rgba(160,172,255,.045) 1px, transparent 1px),
1519+
linear-gradient(to bottom, rgba(160,172,255,.045) 1px, transparent 1px);
1520+
background-size: 64px 64px;
1521+
-webkit-mask-image: radial-gradient(130% 110% at 0% 0%, #000 0%, transparent 62%);
1522+
mask-image: radial-gradient(130% 110% at 0% 0%, #000 0%, transparent 62%);
1523+
}
1524+
.mdt-noise {
1525+
position: absolute; inset: 0; pointer-events: none; opacity: .28; mix-blend-mode: soft-light;
1526+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
1527+
}
1528+
/* content stacks above the backdrop naturally; backdrop sits at z-index:-1.
1529+
(No blanket position rule — it would override fixed/sticky children.) */
1530+
1531+
/* typography helpers */
1532+
.mdt-grad-text {
1533+
background: var(--mdt-grad);
1534+
-webkit-background-clip: text; background-clip: text;
1535+
-webkit-text-fill-color: transparent; color: transparent;
1536+
}
1537+
.mdt-kicker {
1538+
font-family: var(--font-geist-mono), ui-monospace, monospace;
1539+
text-transform: uppercase; letter-spacing: .22em;
1540+
font-size: .78rem; color: var(--mdt-muted);
1541+
}
1542+
.mdt-mono { font-family: var(--font-geist-mono), ui-monospace, monospace; }
1543+
.mdt-text-muted { color: var(--mdt-muted); }
1544+
.mdt-text-faint { color: var(--mdt-faint); }
1545+
1546+
/* surfaces, rails, pills */
1547+
.mdt-surface {
1548+
background: linear-gradient(180deg, rgba(255,255,255,.02), transparent), var(--mdt-surface);
1549+
border: 1px solid var(--mdt-border);
1550+
border-radius: 18px;
1551+
}
1552+
.mdt-surface-hi { background: var(--mdt-surface-hi); border: 1px solid var(--mdt-border); border-radius: 18px; }
1553+
.mdt-rail { background: var(--mdt-grad); }
1554+
.mdt-pill {
1555+
display: inline-flex; align-items: center; gap: .5rem;
1556+
border: 1px solid var(--mdt-border); border-radius: 9999px;
1557+
background: var(--mdt-surface); padding: .35rem .85rem;
1558+
font-family: var(--font-geist-mono), monospace; font-size: .8rem; color: var(--mdt-muted);
1559+
}
1560+
.mdt-card-hover { transition: transform .3s cubic-bezier(.16,1,.3,1), border-color .3s, box-shadow .3s; }
1561+
.mdt-card-hover:hover { transform: translateY(-4px); border-color: rgba(122,107,245,.5); box-shadow: 0 20px 60px -20px rgba(91,99,240,.35); }
1562+
1563+
/* gradient-stroke icons (uses the hidden <linearGradient id="mdtGrad">) */
1564+
.mdt-icon-grad svg, svg.mdt-icon-grad { stroke: url(#mdtGrad); }
1565+
1566+
/* buttons */
1567+
.mdt-btn-grad {
1568+
background: var(--mdt-grad); color: #0a0b12; border: none;
1569+
font-weight: 600; transition: filter .2s, transform .2s, box-shadow .2s;
1570+
box-shadow: 0 10px 30px -10px rgba(122,107,245,.6);
1571+
}
1572+
.mdt-btn-grad:hover { filter: brightness(1.08); transform: translateY(-2px); box-shadow: 0 16px 40px -10px rgba(122,107,245,.7); }
1573+
.mdt-btn-ghost {
1574+
background: rgba(255,255,255,.03); color: var(--mdt-text);
1575+
border: 1px solid var(--mdt-border); transition: background .2s, border-color .2s, transform .2s;
1576+
}
1577+
.mdt-btn-ghost:hover { background: rgba(255,255,255,.06); border-color: rgba(122,107,245,.5); transform: translateY(-2px); }
1578+
1579+
/* gradient hairline divider */
1580+
.mdt-hr { height: 1px; border: 0; background: linear-gradient(90deg, transparent, var(--mdt-border) 20%, var(--mdt-border) 80%, transparent); }
1581+
1582+
/* ─── DECK FX: futuristic motion + interaction (scoped to .mdt-deck) ───────── */
1583+
@property --mdt-angle { syntax: "<angle>"; initial-value: 0deg; inherits: false; }
1584+
1585+
/* cursor-following gradient border on every surface card */
1586+
.mdt-deck .glass-overlay { position: relative; }
1587+
.mdt-deck .glass-overlay::before {
1588+
content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px;
1589+
pointer-events: none; z-index: 3;
1590+
background: radial-gradient(180px circle at var(--mx, 50%) var(--my, 50%), rgba(150,160,255,.9), rgba(122,107,245,.18) 45%, transparent 66%);
1591+
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1592+
mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1593+
-webkit-mask-composite: xor; mask-composite: exclude;
1594+
opacity: 0; transition: opacity .4s ease;
1595+
}
1596+
.mdt-deck .glass-overlay:hover::before { opacity: 1; }
1597+
1598+
/* animated gradient border-beam for a featured card */
1599+
.mdt-deck .mdt-beam { position: relative; }
1600+
.mdt-deck .mdt-beam::after {
1601+
content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1.5px;
1602+
pointer-events: none; z-index: 3;
1603+
background: conic-gradient(from var(--mdt-angle), transparent 0 62%, #5b63f0 78%, #9a5cf2 88%, #4fd0e6 96%, transparent 100%);
1604+
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1605+
mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1606+
-webkit-mask-composite: xor; mask-composite: exclude;
1607+
animation: mdt-spin 6s linear infinite;
1608+
}
1609+
@keyframes mdt-spin { to { --mdt-angle: 360deg; } }
1610+
1611+
/* scroll-progress beam */
1612+
.mdt-progress { position: fixed; top: 0; left: 0; right: 0; height: 2px; transform-origin: 0 50%; background: var(--mdt-grad); z-index: 60; }
1613+
1614+
/* slow sheen across gradient headline text */
1615+
.mdt-grad-anim { background-size: 220% 100%; animation: mdt-sheen 9s ease-in-out infinite; }
1616+
@keyframes mdt-sheen { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } }
1617+
1618+
/* aurora canvas in hero */
1619+
.mdt-aurora { position: absolute; inset: 0; width: 100%; height: 100%; filter: blur(72px) saturate(1.25); opacity: .5; mix-blend-mode: screen; pointer-events: none; }
1620+
1621+
/* infinite tool-name ticker */
1622+
.mdt-marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent); mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent); }
1623+
.mdt-marquee__track { display: inline-flex; gap: 2.5rem; padding-right: 2.5rem; white-space: nowrap; animation: mdt-scroll 45s linear infinite; will-change: transform; }
1624+
.mdt-marquee:hover .mdt-marquee__track { animation-play-state: paused; }
1625+
@keyframes mdt-scroll { to { transform: translateX(-50%); } }
1626+
1627+
@media (prefers-reduced-motion: reduce) {
1628+
.mdt-marquee__track, .mdt-grad-anim, .mdt-deck .mdt-beam::after { animation: none !important; }
1629+
}
1630+
1631+
/* ─── DECK MOTION TOKENS (from motion-design skill) ───────────────────────── */
1632+
:root {
1633+
--dur-1: 120ms; --dur-2: 180ms; --dur-3: 240ms; --dur-4: 300ms; --dur-5: 500ms;
1634+
--ease-out-quart: cubic-bezier(.165, .84, .44, 1);
1635+
--ease-out-quint: cubic-bezier(.23, 1, .32, 1);
1636+
--ease-out-expo: cubic-bezier(.19, 1, .22, 1);
1637+
--ease-in-out-cubic: cubic-bezier(.645, .045, .355, 1);
1638+
}
1639+
1640+
/* living background: slow grid drift + slightly richer aurora */
1641+
.mdt-grid { animation: mdt-grid-drift 64s linear infinite; }
1642+
@keyframes mdt-grid-drift { to { background-position: 64px 64px, 64px 64px; } }
1643+
.mdt-aurora { opacity: .6; }
1644+
1645+
/* card hover easing aligned to tokens (transform/shadow only) */
1646+
.mdt-card-hover { transition: transform var(--dur-3) var(--ease-out-quart), border-color var(--dur-3) ease, box-shadow var(--dur-3) ease; }
1647+
1648+
/* header scroll-translucent transition (subtle state change) */
1649+
.mdt-nav { transition: background-color var(--dur-3) ease, backdrop-filter var(--dur-3) ease, border-color var(--dur-3) ease, box-shadow var(--dur-3) ease; }
1650+
1651+
/* accessibility: honor reduced-motion globally */
1652+
@media (prefers-reduced-motion: reduce) {
1653+
*, *::before, *::after {
1654+
animation-duration: .01ms !important;
1655+
animation-iteration-count: 1 !important;
1656+
transition-duration: .01ms !important;
1657+
scroll-behavior: auto !important;
1658+
}
1659+
}
1660+
1661+
/* ─── CRT BOOT LOADER (monitor illustration) ──────────────────────────────── */
1662+
.crt-boot { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; overflow: hidden;
1663+
background: radial-gradient(120% 120% at 50% 28%, #0c0e16 0%, #050608 58%, #030305 100%); }
1664+
.crt-boot--out { animation: crt-out 600ms cubic-bezier(.19,1,.22,1) forwards; }
1665+
@keyframes crt-out { to { opacity: 0; transform: scale(1.06); filter: blur(8px); visibility: hidden; } }
1666+
1667+
.crt { width: min(540px, 84vw); transform: perspective(1500px) rotateX(2deg); }
1668+
.crt__monitor { position: relative; border-radius: 26px; padding: 24px 24px 28px;
1669+
background: linear-gradient(180deg, #262932, #16181f 58%, #0f1116);
1670+
box-shadow: 0 44px 100px -34px rgba(0,0,0,.92), inset 0 1px 0 rgba(255,255,255,.07), inset 0 -3px 10px rgba(0,0,0,.6); }
1671+
.crt__screen { position: relative; aspect-ratio: 4 / 3; border-radius: 14px; overflow: hidden; padding: 18px 18px 16px;
1672+
background: radial-gradient(120% 120% at 50% 42%, #0a1510 0%, #060d0a 68%, #040706 100%);
1673+
box-shadow: inset 0 0 70px rgba(0,0,0,.9), inset 0 0 0 2px rgba(0,0,0,.55), 0 0 34px rgba(94,242,160,.1); }
1674+
.crt__screen::before { content: ""; position: absolute; inset: 0; z-index: 5; pointer-events: none;
1675+
background: repeating-linear-gradient(0deg, transparent 0 2px, rgba(0,0,0,.3) 2px 3px); }
1676+
.crt__screen::after { content: ""; position: absolute; inset: 0; z-index: 6; pointer-events: none;
1677+
background: radial-gradient(130% 80% at 50% -10%, rgba(160,210,255,.14), transparent 55%); }
1678+
.crt__flicker { animation: crt-flicker 3.6s infinite steps(60); }
1679+
@keyframes crt-flicker { 0%,100%{opacity:1} 8%{opacity:.92} 10%{opacity:1} 50%{opacity:.96} 52%{opacity:1} }
1680+
.crt__code { position: relative; z-index: 2; height: 100%; font-family: var(--font-geist-mono), monospace;
1681+
font-size: clamp(10px, 1.5vw, 13px); line-height: 1.72; color: #5ef2a0; text-shadow: 0 0 6px rgba(94,242,160,.5); }
1682+
.crt__line { white-space: pre-wrap; word-break: break-word; }
1683+
.crt__accent { color: #7fd7ff; text-shadow: 0 0 6px rgba(127,215,255,.6); }
1684+
.crt__cursor { display: inline-block; width: 7px; height: 1em; transform: translateY(2px);
1685+
background: #5ef2a0; box-shadow: 0 0 8px #5ef2a0; animation: crt-blink 1s steps(2) infinite; }
1686+
@keyframes crt-blink { 50% { opacity: 0; } }
1687+
.crt__brand { display: flex; align-items: center; justify-content: space-between; margin-top: 14px; padding: 0 6px; }
1688+
.crt__brand span { font-family: var(--font-geist-mono), monospace; font-size: 10px; letter-spacing: .34em; color: #5b6076; }
1689+
.crt__led { width: 8px; height: 8px; border-radius: 50%; background: #5ef2a0; box-shadow: 0 0 10px #5ef2a0; animation: crt-blink 1.4s steps(2) infinite; }
1690+
.crt__neck { width: 78px; height: 24px; margin: 0 auto; background: linear-gradient(180deg, #1a1c22, #101116); }
1691+
.crt__base { width: 196px; height: 14px; margin: 0 auto; border-radius: 0 0 14px 14px;
1692+
background: linear-gradient(180deg, #1d1f26, #0e0f14); box-shadow: 0 20px 44px -18px rgba(0,0,0,.9); }
1693+
@media (prefers-reduced-motion: reduce) {
1694+
.crt__flicker, .crt__cursor, .crt__led { animation: none !important; }
1695+
.crt { transform: none; }
1696+
}
1697+
1698+
1699+
/* dashboard editor caret */
1700+
.mdt-dash-caret { background: var(--mdt-cyan); box-shadow: 0 0 8px var(--mdt-cyan); border-radius: 1px; animation: mdt-caret-blink 1.1s steps(2) infinite; }
1701+
@keyframes mdt-caret-blink { 50% { opacity: 0; } }

0 commit comments

Comments
 (0)