diff --git a/apps/web/src/app.css b/apps/web/src/app.css index bb09fef..8f45140 100644 --- a/apps/web/src/app.css +++ b/apps/web/src/app.css @@ -3,48 +3,49 @@ :root { /* Primary Palette */ --primary: #6366f1; - --primary-glow: rgba(99, 102, 241, 0.5); + --primary-glow: rgba(99, 102, 241, 0.4); --accent: #a855f7; - --accent-glow: rgba(168, 85, 247, 0.4); - + --accent-glow: rgba(168, 85, 247, 0.35); + /* Backgrounds */ --bg-primary: #ffffff; --bg-secondary: #f8fafc; - --bg-glass: rgba(255, 255, 255, 0.7); + --bg-page: #f5f8ff; + --bg-glass: rgba(255, 255, 255, 0.75); --bg-card: #ffffff; - + /* Text */ --text-primary: #0f172a; --text-secondary: #475569; - --text-muted: #94a3b8; - + --text-muted: #64748b; + /* Effects */ - --border: rgba(226, 232, 240, 0.8); - --border-glass: rgba(255, 255, 255, 0.3); + --border: rgba(226, 232, 240, 0.9); + --border-glass: rgba(255, 255, 255, 0.35); --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - - --radius: 12px; - --radius-lg: 20px; - --radius-xl: 32px; - - --theme-transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + --shadow-md: 0 6px 18px -8px rgb(0 0 0 / 0.12), 0 4px 14px -12px rgb(0 0 0 / 0.08); + --shadow-lg: 0 12px 24px -10px rgb(0 0 0 / 0.15), 0 6px 12px -14px rgb(0 0 0 / 0.08); + + --radius: 14px; + --radius-lg: 26px; + --radius-xl: 34px; + + --theme-transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); } html.dark { --bg-primary: #020617; --bg-secondary: #0f172a; - --bg-glass: rgba(15, 23, 42, 0.6); + --bg-page: #050b18; + --bg-glass: rgba(15, 23, 42, 0.72); --bg-card: #0f172a; - + --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-muted: #64748b; - - --border: rgba(30, 41, 59, 0.8); - --border-glass: rgba(255, 255, 255, 0.1); + + --border: rgba(30, 41, 59, 0.85); + --border-glass: rgba(255, 255, 255, 0.12); } * { @@ -55,7 +56,7 @@ html.dark { body { font-family: 'Inter', sans-serif; - background-color: var(--bg-primary); + background: radial-gradient(circle at top, rgba(99, 102, 241, 0.08), transparent 22%), var(--bg-page); color: var(--text-primary); transition: var(--theme-transition); -webkit-font-smoothing: antialiased; @@ -66,7 +67,7 @@ body { h1, h2, h3, h4, h5, h6 { font-family: 'Outfit', sans-serif; font-weight: 700; - line-height: 1.1; + line-height: 1.15; } a { @@ -75,10 +76,20 @@ a { transition: var(--theme-transition); } +button, +.btn-primary, +.btn-secondary { + transition: transform 0.24s ease, box-shadow 0.24s ease, background-color 0.24s ease, border-color 0.24s ease, color 0.24s ease; +} + +button { + font: inherit; +} + .glass { background: var(--bg-glass); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); + backdrop-filter: blur(18px); + -webkit-backdrop-filter: blur(18px); border: 1px solid var(--border-glass); } @@ -90,17 +101,48 @@ a { } .btn-primary { + display: inline-flex; + align-items: center; + justify-content: center; background: linear-gradient(135deg, var(--primary), var(--accent)); color: white; - padding: 0.8rem 1.6rem; - border-radius: var(--radius); - font-weight: 600; - box-shadow: 0 4px 15px var(--primary-glow); + padding: 0.95rem 1.85rem; + border-radius: calc(var(--radius) * 1.2); + font-weight: 700; + box-shadow: 0 18px 35px -18px rgba(99, 102, 241, 0.9); border: none; cursor: pointer; } .btn-primary:hover { transform: translateY(-2px); - box-shadow: 0 6px 20px var(--primary-glow); + box-shadow: 0 22px 40px -16px rgba(99, 102, 241, 0.9); +} + +.btn-primary:focus-visible { + outline: 3px solid rgba(99, 102, 241, 0.35); + outline-offset: 3px; +} + +.btn-secondary { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.85rem 1.75rem; + border-radius: calc(var(--radius) * 1.2); + font-weight: 700; + border: 1px solid rgba(255, 255, 255, 0.14); + background: rgba(255, 255, 255, 0.08); + color: var(--text-primary); + cursor: pointer; +} + +.btn-secondary:hover { + background: rgba(255, 255, 255, 0.14); + border-color: rgba(99, 102, 241, 0.45); +} + +.btn-secondary:focus-visible { + outline: 3px solid rgba(99, 102, 241, 0.18); + outline-offset: 3px; } diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte index 512f905..1925988 100644 --- a/apps/web/src/routes/+page.svelte +++ b/apps/web/src/routes/+page.svelte @@ -102,144 +102,192 @@ nav { position: sticky; - top: 1rem; - margin: 1rem auto; - width: calc(100% - 2rem); + top: 1.25rem; + margin: 0 auto; + width: min(1100px, calc(100% - 2rem)); max-width: 1100px; - border-radius: var(--radius-lg); + border-radius: var(--radius-xl); z-index: 100; - padding: 0.75rem 1.5rem; + padding: 1rem 1.5rem; } .nav-content { display: flex; justify-content: space-between; align-items: center; + gap: 1rem; } .logo { font-family: 'Outfit', sans-serif; font-weight: 800; - font-size: 1.5rem; + font-size: 1.35rem; display: flex; align-items: center; gap: 0.5rem; } .theme-toggle { - background: transparent; - border: none; - font-size: 1.5rem; - cursor: pointer; - padding: 0.5rem; + width: 46px; + height: 46px; + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 50%; - transition: transform 0.3s ease; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1.25rem; + transition: transform 0.24s ease, background-color 0.24s ease, border-color 0.24s ease; } .theme-toggle:hover { - transform: scale(1.1) rotate(10deg); + transform: scale(1.05); + background: rgba(255, 255, 255, 0.14); + } + + .theme-toggle:focus-visible { + outline: 3px solid rgba(99, 102, 241, 0.24); + outline-offset: 3px; } .landing { max-width: 1100px; margin: 0 auto; - padding: 0 1.5rem; + padding: 0 1.25rem; } .hero { text-align: center; - padding: 8rem 0 6rem; + padding: clamp(4rem, 8vw, 6rem) 0 4rem; } .hero-badge { - display: inline-block; - padding: 0.4rem 1rem; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 100px; - font-size: 0.85rem; - font-weight: 600; - margin-bottom: 2rem; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.45rem 1rem; + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 999px; + font-size: 0.88rem; + font-weight: 700; + margin-bottom: 1.75rem; color: var(--primary); } h1 { - font-size: 4.5rem; + font-size: clamp(3rem, 5.8vw, 4.5rem); font-weight: 900; - letter-spacing: -3px; - margin-bottom: 1.5rem; + letter-spacing: -1px; + margin: 0 auto 1.5rem; + max-width: 760px; } .description { - font-size: 1.25rem; + font-size: clamp(1rem, 1.1vw, 1.2rem); color: var(--text-secondary); max-width: 700px; - margin: 0 auto 3rem; - line-height: 1.6; + margin: 0 auto 2.5rem; + line-height: 1.7; } .cta-group { display: flex; - gap: 1.5rem; + gap: 1rem; justify-content: center; + flex-wrap: wrap; } .btn-secondary { - padding: 0.8rem 1.6rem; - border-radius: var(--radius); - font-weight: 600; - border: 1px solid var(--border); - background: var(--bg-card); - transition: all 0.2s; + padding: 0.92rem 1.75rem; + border-radius: calc(var(--radius) * 1.15); + font-weight: 700; + border: 1px solid rgba(255, 255, 255, 0.18); + background: rgba(255, 255, 255, 0.08); + color: var(--text-primary); } .btn-secondary:hover { - background: var(--bg-secondary); - border-color: var(--primary); + background: rgba(255, 255, 255, 0.14); + border-color: rgba(99, 102, 241, 0.45); } .features { display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; - padding: 4rem 0; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.75rem; + padding: 4rem 0 5rem; } .feature-card { - padding: 2.5rem; + padding: 2.4rem; border-radius: var(--radius-xl); - transition: transform 0.3s ease; + box-shadow: var(--shadow-lg); + background: linear-gradient(180deg, rgba(15, 23, 42, 0.75), rgba(15, 23, 42, 0.5)); + border: 1px solid rgba(255, 255, 255, 0.08); + transition: transform 0.35s ease, border-color 0.35s ease, box-shadow 0.35s ease; } .feature-card:hover { - transform: translateY(-10px); + transform: translateY(-8px); + border-color: rgba(99, 102, 241, 0.4); + box-shadow: 0 26px 50px -18px rgba(0, 0, 0, 0.35); } .feature-icon { - font-size: 2.5rem; - margin-bottom: 1.5rem; + font-size: 2.3rem; + margin-bottom: 1.4rem; } h3 { - font-size: 1.5rem; - margin-bottom: 1rem; + font-size: 1.4rem; + margin-bottom: 0.9rem; } .feature-card p { color: var(--text-secondary); - line-height: 1.6; + line-height: 1.7; } .footer { text-align: center; - padding: 6rem 0 3rem; - border-top: 1px solid var(--border); + padding: 3rem 0 2rem; + border-top: 1px solid rgba(255, 255, 255, 0.08); color: var(--text-muted); } - @media (max-width: 768px) { - h1 { font-size: 3rem; letter-spacing: -1px; } - .hero { padding: 4rem 0 3rem; } - .cta-group { flex-direction: column; align-items: stretch; } + @media (max-width: 860px) { + nav { + top: 0.9rem; + padding: 0.85rem 1.1rem; + } + + .hero { + padding: clamp(3rem, 9vw, 5rem) 0 3rem; + } + } + + @media (max-width: 640px) { + h1 { + font-size: 2.6rem; + } + + .cta-group { + flex-direction: column; + align-items: stretch; + } + + .feature-card { + padding: 1.8rem; + } + + .features { + gap: 1.2rem; + } + + .footer { + padding: 2rem 0 1.25rem; + } } diff --git a/apps/web/src/routes/devcard/[id]/+page.svelte b/apps/web/src/routes/devcard/[id]/+page.svelte index a38073f..7423f7b 100644 --- a/apps/web/src/routes/devcard/[id]/+page.svelte +++ b/apps/web/src/routes/devcard/[id]/+page.svelte @@ -104,7 +104,7 @@ diff --git a/apps/web/src/routes/u/[username]/+page.svelte b/apps/web/src/routes/u/[username]/+page.svelte index d75e485..5012136 100644 --- a/apps/web/src/routes/u/[username]/+page.svelte +++ b/apps/web/src/routes/u/[username]/+page.svelte @@ -110,7 +110,7 @@ bottom: 0; background: radial-gradient(circle at 50% 0%, var(--accent), transparent 50%), #020617; - opacity: 0.15; + opacity: 0.18; z-index: -1; } @@ -119,10 +119,10 @@ display: flex; flex-direction: column; align-items: center; - padding: 4rem 1.5rem; + padding: clamp(2rem, 6vw, 5rem) 1.25rem 3rem; opacity: 0; - transform: translateY(20px); - transition: all 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + transform: translateY(22px); + transition: opacity 0.65s ease, transform 0.65s ease; } .profile-container.loaded { @@ -132,65 +132,67 @@ .profile-card { width: 100%; - max-width: 480px; + max-width: 540px; border-radius: var(--radius-xl); - padding: 3rem 2rem; - box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); + padding: 2.5rem 2rem; + box-shadow: 0 26px 60px -20px rgba(0, 0, 0, 0.55); position: relative; overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(15, 23, 42, 0.96); } .profile-header { text-align: center; - margin-bottom: 3rem; + margin-bottom: 2.5rem; } .avatar-wrapper { position: relative; - width: 110px; - height: 110px; - margin: 0 auto 1.5rem; + width: 120px; + height: 120px; + margin: 0 auto 1.75rem; } .avatar { width: 100%; height: 100%; - border-radius: 35% 65% 70% 30% / 30% 30% 70% 70%; + border-radius: 32% 68% 63% 37% / 34% 36% 64% 66%; object-fit: cover; - border: 3px solid white; + border: 3px solid rgba(255, 255, 255, 0.18); position: relative; z-index: 2; - animation: morph 8s ease-in-out infinite; } - @keyframes morph { - 0%, 100% { border-radius: 35% 65% 70% 30% / 30% 30% 70% 70%; } - 50% { border-radius: 65% 35% 30% 70% / 70% 70% 30% 30%; } - } - - .avatar-glow { - position: absolute; - top: 0; left: 0; right: 0; bottom: 0; - filter: blur(20px); - opacity: 0.4; - z-index: 1; - border-radius: 50%; + .avatar-placeholder { + width: 100%; + height: 100%; + border-radius: 32% 68% 63% 37% / 34% 36% 64% 66%; + display: flex; + align-items: center; + justify-content: center; + font-size: 3rem; + font-weight: 800; + color: white; } .display-name { - font-size: 2.25rem; + font-size: clamp(2rem, 4vw, 2.5rem); font-weight: 800; - letter-spacing: -1px; - margin-bottom: 0.5rem; + letter-spacing: -0.5px; + margin-bottom: 0.75rem; } .role-badge { - display: inline-block; - padding: 0.4rem 1rem; - background: rgba(255, 255, 255, 0.1); - border-radius: 100px; - font-size: 0.85rem; - font-weight: 600; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.45rem 1rem; + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 999px; + font-size: 0.9rem; + font-weight: 700; color: var(--text-secondary); margin-bottom: 1rem; } @@ -198,72 +200,83 @@ .bio { color: var(--text-secondary); font-size: 1rem; - line-height: 1.6; - max-width: 320px; + line-height: 1.85; + max-width: 640px; margin: 0 auto; } .links-grid { display: flex; flex-direction: column; - gap: 0.75rem; + gap: 1rem; } .link-tile { display: flex; align-items: center; padding: 1rem; - border-radius: var(--radius-lg); - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + border-radius: calc(var(--radius) * 1.1); + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.06); + box-shadow: 0 12px 30px -18px rgba(0, 0, 0, 0.35); + transition: transform 0.25s ease, background 0.25s ease, border-color 0.25s ease; animation: slideIn 0.5s ease-out forwards; animation-delay: var(--delay); opacity: 0; } + .link-tile:hover, + .link-tile:focus-visible { + background: rgba(255, 255, 255, 0.13); + transform: translateY(-2px); + border-color: rgba(99, 102, 241, 0.35); + } + + .link-tile:focus-visible { + outline: 3px solid rgba(99, 102, 241, 0.2); + outline-offset: 3px; + } + @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } - .link-tile:hover { - background: rgba(255, 255, 255, 0.15); - transform: scale(1.02) translateX(5px); - } - .tile-icon { - width: 44px; - height: 44px; - border-radius: 12px; + width: 46px; + height: 46px; + border-radius: 15px; display: flex; align-items: center; justify-content: center; color: white; font-weight: 800; - font-size: 1.2rem; - box-shadow: 0 4px 12px rgba(0,0,0,0.2); + font-size: 1.1rem; + box-shadow: 0 8px 18px -10px rgba(0,0,0,0.4); } .tile-content { flex: 1; - margin-left: 1.25rem; + margin-left: 1.1rem; } .platform-name { display: block; font-weight: 700; - font-size: 1.05rem; + font-size: 1rem; } .username { display: block; - font-size: 0.85rem; + font-size: 0.9rem; color: var(--text-muted); + margin-top: 0.1rem; } .arrow { - opacity: 0.3; + opacity: 0.45; font-size: 1.2rem; - transition: all 0.3s; + transition: transform 0.25s ease, opacity 0.25s ease; } .link-tile:hover .arrow { @@ -272,48 +285,59 @@ } .card-footer { - margin-top: 3rem; - padding-top: 2rem; - border-top: 1px solid rgba(255,255,255,0.05); + margin-top: 2.5rem; + padding-top: 1.75rem; + border-top: 1px solid rgba(255,255,255,0.08); display: flex; justify-content: space-between; align-items: center; color: var(--text-muted); - font-size: 0.75rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 1px; + font-size: 0.82rem; + gap: 1rem; + flex-wrap: wrap; } .logo-sm { color: var(--text-secondary); font-family: 'Outfit', sans-serif; + font-weight: 700; } .get-your-own { - margin-top: 3rem; + margin-top: 2rem; text-align: center; } .get-your-own p { - font-size: 0.9rem; - color: var(--text-muted); margin-bottom: 0.5rem; + font-size: 0.95rem; + color: var(--text-muted); } .get-your-own a { font-weight: 700; - font-size: 1.1rem; + font-size: 1.05rem; } .error-glass { text-align: center; - padding: 4rem; + padding: 3rem; border-radius: var(--radius-xl); + width: min(100%, 520px); } - @media (max-width: 480px) { + @media (max-width: 720px) { .profile-card { padding: 2rem 1.5rem; } - .display-name { font-size: 1.75rem; } + .profile-header { margin-bottom: 2rem; } + .avatar-wrapper { width: 108px; height: 108px; margin-bottom: 1.5rem; } + .card-footer { flex-direction: column; align-items: flex-start; } + } + + @media (max-width: 520px) { + .profile-container { padding: 2rem 1rem 2.5rem; } + .display-name { font-size: 2rem; } + .link-tile { padding: 0.95rem; } + .tile-content { margin-left: 0.9rem; } + .card-footer { text-align: left; } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5bcffdd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,334 @@ +{ + "name": "devcard", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "devcard", + "version": "1.0.0", + "license": "Apache-2.0", + "devDependencies": { + "concurrently": "^9.2.1" + }, + "engines": { + "node": ">=20.0.0", + "pnpm": ">=9.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +}