astra integration module

This commit is contained in:
Boof2015
2026-03-29 18:55:36 -04:00
parent 6cd30cac39
commit 6f73802252
30 changed files with 2314 additions and 39 deletions
+300
View File
@@ -571,6 +571,264 @@ select {
background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.12), transparent);
}
.astra-scope {
--astra-cover-size: clamp(56px, min(34cqi, 72cqb), 220px);
--astra-card-gap: clamp(8px, min(3cqi, 3cqb), 14px);
display: flex;
width: 100%;
height: 100%;
min-height: 0;
overflow: auto;
background: var(--astra-bg);
color: var(--astra-text);
container-type: size;
scrollbar-width: none;
}
.astra-scope::-webkit-scrollbar {
display: none;
}
.astra-scope--empty {
align-items: center;
justify-content: center;
padding: 12px;
}
.astra-scope__card {
flex: 1;
display: grid;
grid-template-columns: var(--astra-cover-size) minmax(0, 1fr);
align-items: center;
gap: var(--astra-card-gap);
width: 100%;
height: 100%;
padding: clamp(10px, 3cqi, 12px);
}
.astra-scope__card--no-cover {
grid-template-columns: minmax(0, 1fr);
}
.astra-scope__cover-shell {
display: flex;
align-items: center;
justify-content: flex-start;
align-self: center;
justify-self: start;
width: var(--astra-cover-size);
min-width: 0;
}
.astra-scope__cover {
width: 100%;
aspect-ratio: 1;
border-radius: 12px;
border: 1px solid var(--astra-border);
object-fit: cover;
background: var(--astra-surface);
}
.astra-scope__cover--fallback {
display: flex;
align-items: center;
justify-content: center;
color: var(--astra-accent);
font-family: 'JetBrains Mono', monospace;
font-size: clamp(20px, 4vw, 38px);
letter-spacing: 0.14em;
text-transform: uppercase;
background: var(--astra-surface);
}
.astra-scope__body {
width: 100%;
min-height: 0;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
gap: clamp(8px, min(2.4cqi, 2.4cqb), 10px);
}
.astra-scope__meta {
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.astra-scope__title {
min-width: 0;
color: var(--astra-text);
font-size: clamp(14px, 2vw, 20px);
font-weight: 600;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.astra-scope__artist {
min-width: 0;
color: var(--astra-subtext);
font-size: 12px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.astra-scope__transport {
min-width: 0;
display: flex;
flex-direction: column;
gap: 8px;
}
.astra-scope__progress {
width: 100%;
height: 7px;
overflow: hidden;
border-radius: 999px;
background: var(--astra-progress-track);
}
.astra-scope__progress-fill {
height: 100%;
border-radius: inherit;
background: var(--astra-progress-fill);
}
.astra-scope__time {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--astra-subtext);
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
letter-spacing: 0.08em;
}
.astra-scope__controls {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
flex-wrap: nowrap;
}
.astra-scope__control {
flex: 0 0 auto;
min-width: 36px;
height: 32px;
padding: 0 12px;
border-radius: 999px;
border: 1px solid var(--control-border);
background: var(--control-bg);
color: var(--text-secondary);
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
letter-spacing: 0.08em;
cursor: pointer;
transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}
.astra-scope__control--primary {
flex: 1 1 72px;
min-width: 72px;
}
.astra-scope__control:hover:not(:disabled),
.astra-scope__control:focus-visible {
background: var(--control-bg-hover);
border-color: var(--control-border-active);
color: var(--text-primary);
outline: none;
}
.astra-scope__control:active:not(:disabled) {
background: var(--control-bg-active);
}
.astra-scope__control:disabled {
opacity: 0.45;
cursor: default;
}
.astra-scope__status,
.astra-scope__placeholder {
display: inline-flex;
align-items: center;
align-self: flex-start;
min-height: 28px;
padding: 0 10px;
border-radius: 999px;
border: 1px solid var(--astra-border);
color: var(--astra-subtext);
background: var(--astra-surface);
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.astra-scope__status.is-ok {
color: var(--astra-status-ok);
}
.astra-scope__status.is-error {
color: var(--astra-status-error);
border-color: var(--astra-status-error);
}
@container (max-width: 420px) {
.astra-scope {
--astra-cover-size: clamp(44px, min(28cqi, 60cqb), 132px);
--astra-card-gap: 8px;
}
.astra-scope__title {
font-size: 14px;
}
.astra-scope__artist,
.astra-scope__time,
.astra-scope__control {
font-size: 11px;
}
.astra-scope__control {
padding: 0 10px;
}
}
@container (max-width: 260px) {
.astra-scope {
--astra-cover-size: 40px;
--astra-card-gap: 8px;
}
.astra-scope__controls {
flex-wrap: wrap;
}
}
@container (max-height: 180px) {
.astra-scope {
--astra-cover-size: clamp(40px, min(22cqi, 46cqb), 88px);
--astra-card-gap: 8px;
}
.astra-scope__card {
padding: 8px;
}
.astra-scope__control {
height: 30px;
}
}
.settings-panel {
background: linear-gradient(180deg, rgba(7, 10, 15, 0.95), rgba(4, 6, 10, 0.98));
display: flex;
@@ -954,6 +1212,16 @@ select {
background: linear-gradient(180deg, rgba(34, 197, 94, 0.14), rgba(7, 10, 15, 0.96));
}
.settings-status-pill.is-connected .settings-status-pill__dot {
background: var(--success);
box-shadow: 0 0 8px rgba(34, 197, 94, 0.34);
}
.settings-status-pill.is-connected {
border-color: rgba(34, 197, 94, 0.28);
background: linear-gradient(180deg, rgba(34, 197, 94, 0.12), rgba(7, 10, 15, 0.96));
}
.settings-status-pill.is-error .settings-status-pill__dot {
background: var(--danger);
box-shadow: 0 0 8px rgba(248, 113, 113, 0.36);
@@ -1089,6 +1357,10 @@ select {
min-width: 228px;
}
.bottom-bar__section--astra {
min-width: 520px;
}
.bottom-bar__section--source {
min-width: 360px;
}
@@ -1175,6 +1447,34 @@ select {
max-width: 280px;
}
.bottom-bar__text-input {
height: 32px;
padding: 0 10px;
border-radius: 10px;
border: 1px solid var(--input-border);
background: var(--input-bg);
color: var(--text-primary);
font-size: 12px;
outline: none;
}
.bottom-bar__text-input::placeholder {
color: var(--text-muted);
}
.bottom-bar__text-input:focus {
border-color: var(--input-border-focus);
background: var(--input-bg-focus);
}
.bottom-bar__text-input--url {
width: 190px;
}
.bottom-bar__text-input--token {
width: 180px;
}
.bottom-bar__fps-pill {
min-width: 84px;
justify-content: center;