Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d6f22f9
docs: add detailed Orbital UI design specification
ivan-kalachikov Mar 6, 2026
8ee34a1
docs: add Orbital implementation plan with quality gates
ivan-kalachikov Mar 6, 2026
f28d0a5
feat(orbital): add Space Grotesk + Inter fonts to index.html
ivan-kalachikov Mar 6, 2026
05a37fc
feat(orbital): replace global CSS with Orbital design system variable…
ivan-kalachikov Mar 6, 2026
44ea4f5
feat(orbital): add HeaderBar with app name, breathing dot, and status…
ivan-kalachikov Mar 6, 2026
9cd17d3
feat(orbital): add Sphere play/pause component with breathing, rings,…
ivan-kalachikov Mar 6, 2026
a0bcdab
feat(orbital): add DataList reusable component with search, scroll, a…
ivan-kalachikov Mar 6, 2026
817a5d6
feat(orbital): add GlassPanel with adaptive glassmorphism, 3D tilt, g…
ivan-kalachikov Mar 6, 2026
8c0b056
feat(orbital): rewrite Main.vue with sphere + glass panels desktop la…
ivan-kalachikov Mar 6, 2026
39011bf
feat(orbital): restyle Footer to minimal single-line glassmorphic bar
ivan-kalachikov Mar 6, 2026
fde8039
fix(orbital): remove vue-audio-visual import from main.js
ivan-kalachikov Mar 6, 2026
7d94781
feat(orbital): add Starfield canvas with parallax and audio reactivity
ivan-kalachikov Mar 6, 2026
15c7683
feat(orbital): add useAudioAnalyser composable for Web Audio API
ivan-kalachikov Mar 6, 2026
45070fb
fix(orbital): address code quality review findings for Starfield and …
ivan-kalachikov Mar 6, 2026
ee6d835
feat(orbital): add ParticleCanvas with dual orbit system and audio re…
ivan-kalachikov Mar 6, 2026
6d0df45
fix(orbital): address code quality review findings for ParticleCanvas…
ivan-kalachikov Mar 6, 2026
7400f64
feat(orbital): add MobileDrawer and responsive layout for mobile/tablet
ivan-kalachikov Mar 6, 2026
0699ab1
fix(orbital): address code quality review for MobileDrawer
ivan-kalachikov Mar 6, 2026
a1ccc2a
fix(orbital): move ghost text near sphere, add play/pause icons, wire…
ivan-kalachikov Mar 6, 2026
45f6a2b
fix(orbital): hide footer on mobile to prevent drawer overlap (QG3)
ivan-kalachikov Mar 6, 2026
d1f350c
feat(orbital): add global keyboard shortcuts for playback and volume
ivan-kalachikov Mar 6, 2026
5624976
chore(orbital): remove old components, vue-audio-visual, and christma…
ivan-kalachikov Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,161 changes: 1,161 additions & 0 deletions docs/design/2026-03-06-orbital-concept-refined.md

Large diffs are not rendered by default.

1,492 changes: 1,492 additions & 0 deletions docs/plans/2026-03-06-orbital-implementation-plan.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="color-scheme" content="dark">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=Inter:wght@300;400;500&display=swap" rel="stylesheet">
<title>Focused</title>
</head>
<body>
Expand Down
51 changes: 0 additions & 51 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
},
"dependencies": {
"vue": "^3.5.0",
"vue-audio-visual": "git+https://github.com/Ivankalachikov/vue-audio-visual.git",
"vue-i18n": "^11.0.0",
"vuex": "^4.1.0"
},
Expand Down
215 changes: 94 additions & 121 deletions src/App.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<template>
<div class="layout">
<HeaderBar />
<Main />
<Footer />
<transition name="fade">
Expand All @@ -12,12 +13,14 @@

<script>
import { mapState, mapMutations } from 'vuex';
import HeaderBar from './components/HeaderBar.vue';
import Main from './components/Main.vue';
import Footer from './components/Footer.vue';

export default {
name: 'App',
components: {
HeaderBar,
Main,
Footer,
},
Expand All @@ -34,160 +37,130 @@ export default {
</script>

<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

/* ── Orbital Design System ── */

/* 1. CSS Variables (spec 1.1) */
:root {
--bg: #080812;
--bg-gradient-from: #0D0B1A;
--bg-gradient-to: #0A1A1A;
--surface: rgba(255, 255, 255, 0.04);
--surface-active: rgba(255, 255, 255, 0.10);
--glass-border: rgba(255, 255, 255, 0.08);
--glass-border-active: rgba(255, 255, 255, 0.18);
--text-primary: #E8E8EC;
--text-dim: rgba(232, 232, 236, 0.5);
--text-muted: rgba(232, 232, 236, 0.25);
--accent-warm: #FFCC66;
--accent-warm-glow: rgba(255, 204, 102, 0.25);
--accent-cool: #44FFBB;
--accent-cool-glow: rgba(68, 255, 187, 0.25);
--accent-neutral: #AA88FF;
--accent-neutral-glow: rgba(170, 136, 255, 0.3);
--error: #FF6655;
--warning: #FFB844;
--star-color: rgba(255, 255, 255, 0.6);
--font-display: 'Space Grotesk', sans-serif;
--font-body: 'Inter', sans-serif;
}

/* 2. Global reset */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}

html, body {
height: 100%;
background: #191921;
background: var(--bg);
}

#app {
font-family: Roboto, Helvetica, Arial, sans-serif;
font-family: var(--font-body);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #dadada;
color: var(--text-primary);
height: 100%;
}
a { color: var(--text-primary); text-decoration: none; }
a:hover { color: #fff; }

a {
color: #bbb;
text-decoration: none;
}

a:hover, a:active {
color: #eee;
}

/* 3. Layout with aurora background (spec 1.4) */
.layout {
min-height: 100%;
overflow: hidden;
position: relative;
background: #191921;
display: flex;
flex-direction: column;
}

/* Shared layout utilities */
.row {
display: flex;
flex-wrap: wrap;
}

.justify-center {
justify-content: center;
}

/* Shared card styles */
.card-col {
width: 100%;
max-width: 360px;
}

.card {
background: #23242B;
border-radius: 8px;
padding: 16px;
}

.card-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 12px;
}

/* Text utilities */
.text-secondary {
color: #888;
}

/* Shared slider styles */
.slider {
-webkit-appearance: none;
appearance: none;
width: 100%;
height: 6px;
background: #393744;
border-radius: 3px;
outline: none;
margin-top: 4px;
}

.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 14px;
height: 14px;
background: #3949D3;
border-radius: 50%;
cursor: pointer;
}

.slider::-moz-range-thumb {
width: 14px;
height: 14px;
background: #3949D3;
border-radius: 50%;
cursor: pointer;
border: none;
}

.slider:disabled {
opacity: 0.5;
cursor: not-allowed;
}

/* Shared icon wrapper */
.icon-wrapper {
position: relative;
flex-shrink: 0;
width: 40px;
}

.icon-wrapper.error path {
fill: #6f2b39;
}

.icon-wrapper.error circle {
stroke: #6f2b39;
}

.spinner {
position: absolute;
top: -1px;
left: -1px;
}

/* Toast notifications */
background-color: var(--bg);
background-image:
radial-gradient(ellipse at 20% 50%, rgba(13, 11, 26, 0.8) 0%, transparent 60%),
radial-gradient(ellipse at 80% 50%, rgba(10, 26, 26, 0.8) 0%, transparent 60%),
radial-gradient(ellipse at 50% 100%, rgba(68, 255, 187, 0.03) 0%, transparent 40%),
radial-gradient(ellipse at 50% 0%, rgba(170, 136, 255, 0.04) 0%, transparent 40%);
background-size: 200% 200%;
animation: aurora 20s ease-in-out infinite alternate;
display: grid;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header"
"main"
"footer";
}
@keyframes aurora {
0%, 100% { background-position: 40% 50%; }
50% { background-position: 60% 50%; }
}
@media (prefers-reduced-motion: reduce) {
.layout { animation: none; }
}

/* 4. Toast styles (spec 3.8) */
.toast {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
padding: 10px 24px;
border-radius: 6px;
color: #dadada;
font-size: 14px;
padding: 12px 20px;
border-radius: 12px;
color: var(--text-primary);
font-family: var(--font-body);
font-size: 13px;
z-index: 1000;
background: var(--surface-active);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid var(--glass-border-active);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}

.toast--error {
background: #5E2551;
border: 1px solid #6f2b39;
border-color: var(--error);
color: var(--error);
}

/* 5. Transitions */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
transition: opacity 0.3s, transform 0.3s;
}

.fade-enter-from,
.fade-leave-to {
opacity: 0;
transform: translateX(-50%) translateY(-20px);
}
.fade-enter-to,
.fade-leave-from {
opacity: 1;
transform: translateX(-50%) translateY(0);
}

/* 6. Focus states (spec 4.3) */
*:focus-visible {
outline: none;
box-shadow: 0 0 0 2px var(--accent-neutral), 0 0 12px var(--accent-neutral-glow);
}

/* 7. Backdrop-filter fallback (spec 11) */
@supports not (backdrop-filter: blur(1px)) {
.panel, .header, .footer, .toast, .drawer {
background: rgba(15, 15, 25, 0.85) !important;
}
}
</style>
Binary file removed src/assets/christmas-hat.png
Binary file not shown.
Loading