dhnkhr's picture
Production-ready: Clean code with Groq API integration, LoRA model support, and FastAPI app
9753ee2
:root {
--bg-1: #081a1d;
--bg-2: #0f2c30;
--panel: rgba(10, 23, 26, 0.76);
--panel-stroke: rgba(180, 223, 210, 0.2);
--text: #f6f4ee;
--muted: #b5d2ca;
--accent-hot: #ff6a3d;
--accent-cool: #2ce0bf;
--accent-gold: #f5c85b;
--passenger-accent: #f5c85b;
--flight-accent: #73d8ff;
--danger: #ff4f4f;
--shadow: 0 22px 55px rgba(0, 0, 0, 0.36);
}
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
min-height: 100%;
}
body {
color: var(--text);
font-family: "Space Grotesk", "Trebuchet MS", sans-serif;
line-height: 1.45;
background:
radial-gradient(circle at 14% 16%, #215157 0%, transparent 31%),
radial-gradient(circle at 88% 0%, #612a12 0%, transparent 27%),
linear-gradient(155deg, var(--bg-1), var(--bg-2));
padding: 1.4rem;
position: relative;
overflow-x: hidden;
}
.shape {
position: fixed;
pointer-events: none;
z-index: 0;
border-radius: 999px;
filter: blur(36px);
opacity: 0.42;
}
.shape-a {
width: 220px;
height: 220px;
left: -60px;
top: 22%;
background: #2ad8b6;
}
.shape-b {
width: 280px;
height: 280px;
right: -120px;
top: -80px;
background: #ff7348;
}
.shape-c {
width: 190px;
height: 190px;
right: 30%;
bottom: -80px;
background: #ebb94e;
}
.hero,
.grid,
.timeline {
position: relative;
z-index: 1;
}
.hero {
display: flex;
justify-content: space-between;
gap: 1.25rem;
align-items: flex-start;
margin-bottom: 1.2rem;
animation: reveal-up 500ms ease-out both;
}
.hero-title-wrap {
max-width: 760px;
}
.eyebrow {
margin: 0;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--accent-cool);
font-weight: 700;
}
h1,
h2,
h3 {
font-family: "Bricolage Grotesque", "Segoe UI", sans-serif;
margin: 0;
line-height: 1.08;
}
h1 {
font-size: clamp(1.75rem, 3.3vw, 2.8rem);
margin-top: 0.25rem;
}
.subtitle {
margin: 0.6rem 0 0;
color: var(--muted);
max-width: 60ch;
line-height: 1.4;
}
.hero-badges {
display: flex;
gap: 0.65rem;
flex-wrap: wrap;
justify-content: flex-end;
}
.badge {
background: rgba(14, 39, 44, 0.82);
border: 1px solid var(--panel-stroke);
border-radius: 999px;
padding: 0.42rem 0.78rem;
font-size: 0.85rem;
}
.badge-accent {
border-color: rgba(44, 224, 191, 0.7);
}
.badge-score {
border-color: rgba(245, 200, 91, 0.65);
}
.grid {
display: grid;
grid-template-columns: 1fr 1.5fr 1fr;
gap: 1.2rem;
margin-bottom: 1.2rem;
}
.panel {
border: 1px solid var(--panel-stroke);
border-radius: 1rem;
background: var(--panel);
backdrop-filter: blur(8px);
box-shadow: var(--shadow);
padding: 1.15rem;
}
.panel h2 {
font-size: 1.22rem;
margin-bottom: 0.9rem;
}
label {
display: block;
font-size: 0.84rem;
color: var(--muted);
margin-top: 0.62rem;
}
select,
button {
font: inherit;
}
select {
width: 100%;
border-radius: 0.65rem;
border: 1px solid rgba(170, 225, 210, 0.34);
background: rgba(4, 18, 21, 0.85);
color: var(--text);
padding: 0.58rem 0.68rem;
margin-top: 0.3rem;
}
select:focus,
button:focus {
outline: 2px solid rgba(44, 224, 191, 0.55);
outline-offset: 1px;
}
.button-row {
display: flex;
gap: 0.6rem;
margin-top: 0.82rem;
flex-wrap: wrap;
}
.button-row.stacked {
margin-top: 0.9rem;
}
.btn {
border: none;
border-radius: 0.65rem;
padding: 0.6rem 0.84rem;
cursor: pointer;
font-weight: 700;
transition: transform 120ms ease, filter 120ms ease;
}
.btn:hover {
transform: translateY(-1px);
filter: brightness(1.08);
}
.btn:disabled {
opacity: 0.45;
cursor: not-allowed;
transform: none;
}
.btn-primary {
background: linear-gradient(135deg, #ff6a3d, #ff914f);
color: #1c0f05;
}
.btn-secondary {
background: linear-gradient(135deg, #26ccad, #58f2ca);
color: #072523;
}
.btn-danger {
background: linear-gradient(135deg, #ea3f3f, #ff6d55);
color: #2a0404;
}
.btn-ghost {
background: rgba(14, 35, 39, 0.84);
color: var(--text);
border: 1px solid rgba(167, 220, 207, 0.3);
}
.btn.compact {
padding: 0.32rem 0.55rem;
}
.task-meta {
margin-top: 0.85rem;
color: var(--muted);
line-height: 1.5;
min-height: 3rem;
}
.metrics {
margin-top: 0.85rem;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.62rem;
}
.metric {
background: rgba(9, 28, 33, 0.8);
border: 1px solid rgba(164, 219, 205, 0.26);
border-radius: 0.72rem;
padding: 0.62rem;
}
.metric-label {
margin: 0;
color: var(--muted);
font-size: 0.76rem;
}
.metric-value {
margin: 0.24rem 0 0;
font-size: 1.05rem;
font-weight: 700;
}
.panel-head {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.82rem;
}
.chip {
font-size: 0.78rem;
padding: 0.24rem 0.52rem;
border-radius: 999px;
background: rgba(15, 43, 50, 0.84);
border: 1px solid rgba(167, 218, 204, 0.28);
}
.split {
display: grid;
grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
gap: 0.95rem;
}
.observation-group {
border: 1px solid rgba(157, 214, 200, 0.26);
border-radius: 0.9rem;
padding: 0.7rem;
background: rgba(5, 20, 24, 0.5);
}
.group-head {
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.55rem;
margin-bottom: 0.55rem;
}
.group-head h3 {
margin: 0;
display: flex;
align-items: center;
gap: 0.45rem;
}
.group-dot {
width: 0.55rem;
height: 0.55rem;
border-radius: 999px;
display: inline-block;
box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.04);
}
.group-tag {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.06em;
border-radius: 999px;
padding: 0.2rem 0.46rem;
border: 1px solid transparent;
}
.observation-passengers {
border-color: rgba(245, 200, 91, 0.34);
background: linear-gradient(160deg, rgba(245, 200, 91, 0.08), rgba(5, 20, 24, 0.56));
}
.observation-passengers .group-dot {
background: var(--passenger-accent);
}
.observation-passengers .group-tag {
color: #ffe1a6;
border-color: rgba(245, 200, 91, 0.55);
background: rgba(100, 73, 17, 0.34);
}
.observation-flights {
border-color: rgba(115, 216, 255, 0.34);
background: linear-gradient(160deg, rgba(115, 216, 255, 0.08), rgba(5, 20, 24, 0.56));
}
.observation-flights .group-dot {
background: var(--flight-accent);
}
.observation-flights .group-tag {
color: #bdeaff;
border-color: rgba(115, 216, 255, 0.56);
background: rgba(12, 59, 77, 0.35);
}
.list-passengers {
border-top: 1px dashed rgba(245, 200, 91, 0.3);
padding-top: 0.52rem;
}
.list-flights {
border-top: 1px dashed rgba(115, 216, 255, 0.3);
padding-top: 0.52rem;
}
.split h3 {
font-size: 0.98rem;
margin-bottom: 0.58rem;
line-height: 1.2;
}
.scroll-list {
display: grid;
gap: 0.52rem;
max-height: 320px;
overflow-y: auto;
padding-right: 0.28rem;
}
.card {
border-radius: 0.72rem;
border: 1px solid rgba(161, 218, 203, 0.27);
background: rgba(8, 26, 31, 0.83);
padding: 0.68rem;
}
.card-passenger {
border-color: rgba(245, 200, 91, 0.38);
background: linear-gradient(160deg, rgba(79, 58, 13, 0.33), rgba(8, 26, 31, 0.86));
}
.card-passenger .card-title {
color: #ffe7bc;
}
.card-flight {
border-color: rgba(115, 216, 255, 0.38);
background: linear-gradient(160deg, rgba(14, 46, 59, 0.42), rgba(8, 26, 31, 0.86));
}
.card-flight .card-title {
color: #caedff;
}
.card-top {
display: flex;
justify-content: space-between;
gap: 0.5rem;
align-items: center;
}
.card-title {
font-weight: 700;
}
.card-sub {
color: var(--muted);
font-size: 0.83rem;
margin-top: 0.3rem;
line-height: 1.35;
}
.tier-pill {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.05em;
border-radius: 999px;
padding: 0.24rem 0.45rem;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.tier-Platinum {
color: #fce3a1;
border-color: rgba(245, 200, 91, 0.7);
}
.tier-Gold {
color: #ffca87;
border-color: rgba(255, 170, 89, 0.72);
}
.tier-Silver {
color: #d6ecf0;
border-color: rgba(174, 202, 210, 0.72);
}
.tier-Standard {
color: #b2d0c8;
border-color: rgba(158, 204, 192, 0.56);
}
.result-box {
margin-top: 1rem;
}
.result-head {
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.55rem;
margin-bottom: 0.45rem;
}
.result-box h3 {
font-size: 0.95rem;
margin-bottom: 0;
}
.latest-summary {
border: 1px solid rgba(170, 221, 208, 0.28);
border-radius: 0.72rem;
background: rgba(4, 16, 18, 0.78);
padding: 0.68rem;
display: grid;
gap: 0.36rem;
}
.latest-status {
font-size: 0.74rem;
text-transform: uppercase;
letter-spacing: 0.06em;
width: fit-content;
border-radius: 999px;
padding: 0.2rem 0.5rem;
border: 1px solid transparent;
}
.latest-status-active {
color: #bff7e8;
border-color: rgba(65, 210, 173, 0.58);
background: rgba(10, 69, 56, 0.35);
}
.latest-status-done {
color: #fff0bf;
border-color: rgba(245, 200, 91, 0.6);
background: rgba(98, 74, 18, 0.33);
}
.latest-status-reset {
color: #d2ecff;
border-color: rgba(115, 216, 255, 0.58);
background: rgba(13, 53, 73, 0.35);
}
.latest-status-error {
color: #ffd0d0;
border-color: rgba(255, 109, 109, 0.62);
background: rgba(88, 16, 16, 0.36);
}
.latest-row {
display: grid;
grid-template-columns: 110px minmax(0, 1fr);
gap: 0.55rem;
align-items: baseline;
}
.latest-label {
color: var(--muted);
font-size: 0.77rem;
}
.latest-value {
color: #e7fbf5;
font-size: 0.82rem;
font-weight: 600;
overflow-wrap: anywhere;
}
.latest-note {
font-size: 0.77rem;
color: #bee8dd;
line-height: 1.35;
}
.latest-note-error {
color: #ffb5b5;
}
.latest-empty {
color: var(--muted);
font-size: 0.82rem;
}
.latest-raw {
margin-top: 0.52rem;
}
.hidden {
display: none !important;
}
pre {
margin: 0;
max-height: 210px;
overflow: auto;
padding: 0.72rem;
border-radius: 0.7rem;
border: 1px solid rgba(170, 221, 208, 0.28);
background: rgba(4, 16, 18, 0.88);
color: #d8f7ef;
font-size: 0.78rem;
line-height: 1.42;
}
.timeline {
animation: reveal-up 640ms ease-out both;
}
.log-list {
display: grid;
gap: 0.65rem;
max-height: 320px;
overflow-y: auto;
}
.log-item {
border-radius: 0.72rem;
border: 1px solid rgba(163, 220, 205, 0.22);
background: rgba(7, 23, 27, 0.87);
padding: 0.65rem;
}
.log-item strong {
color: var(--accent-cool);
}
.log-meta {
color: var(--muted);
font-size: 0.8rem;
margin-top: 0.2rem;
}
.empty {
border: 1px dashed rgba(173, 223, 210, 0.33);
border-radius: 0.72rem;
color: var(--muted);
padding: 0.72rem;
}
.empty-passengers {
border-color: rgba(245, 200, 91, 0.42);
background: rgba(81, 60, 15, 0.2);
}
.empty-flights {
border-color: rgba(115, 216, 255, 0.42);
background: rgba(11, 50, 67, 0.22);
}
.action-console form {
display: grid;
gap: 0.15rem;
}
@keyframes reveal-up {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (max-width: 1200px) {
.grid {
grid-template-columns: 1fr 1fr;
}
.action-console {
grid-column: 1 / -1;
}
}
@media (max-width: 1380px) {
.split {
grid-template-columns: 1fr;
}
}
@media (max-width: 760px) {
body {
padding: 0.75rem;
}
.hero {
flex-direction: column;
}
.hero-badges {
justify-content: flex-start;
}
.grid {
grid-template-columns: 1fr;
}
.metrics {
grid-template-columns: 1fr;
}
.latest-row {
grid-template-columns: 1fr;
gap: 0.2rem;
}
}