parapilot / app /static /css /app.css
LaelaZ's picture
Deploy ParaPilot to HF Spaces (Docker)
d787a09 verified
/* ParaPilot design system — editorial-legal refinement on Tailwind utilities.
Trustworthy editorial: deep navy ink + warm brass accent on cream paper,
serif display headings, generous whitespace, light + dark. */
:root {
/* Editorial-legal palette: deep navy ink + warm brass accent. */
--pp-accent: 47 74 115; /* navy */
--pp-accent-strong: 26 42 71; /* deep navy */
--pp-violet: 166 124 82; /* warm brass */
}
html { scroll-behavior: smooth; }
body {
font-family: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI",
Roboto, Helvetica, Arial, sans-serif;
font-feature-settings: "cv02", "cv03", "cv04", "cv11";
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* Editorial display headings — serif. */
h1, h2, .pp-serif {
font-family: ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino,
Georgia, "Times New Roman", serif;
letter-spacing: -0.005em;
}
/* Subtle page background wash (light + dark). */
.pp-bg {
background-image:
radial-gradient(60rem 60rem at 110% -10%, rgb(var(--pp-violet) / 0.10), transparent 55%),
radial-gradient(50rem 50rem at -10% 0%, rgb(var(--pp-accent) / 0.08), transparent 50%);
}
.dark .pp-bg {
background-image:
radial-gradient(60rem 60rem at 110% -10%, rgb(var(--pp-violet) / 0.14), transparent 55%),
radial-gradient(50rem 50rem at -10% 0%, rgb(var(--pp-accent) / 0.16), transparent 50%);
}
/* Gradient brand text (navy -> brass). */
.pp-gradient-text {
background-image: linear-gradient(
100deg, rgb(var(--pp-accent-strong)), rgb(var(--pp-violet))
);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* Card — warm paper. */
.pp-card {
border-radius: 1rem;
border: 1px solid rgb(223 213 196); /* warm taupe */
background: rgb(255 253 248 / 0.9); /* warm white */
backdrop-filter: blur(6px);
box-shadow: 0 1px 2px rgb(40 33 22 / 0.05), 0 10px 28px -14px rgb(40 33 22 / 0.16);
}
.dark .pp-card {
border-color: rgb(72 66 55 / 0.7); /* warm slate */
background: rgb(24 28 38 / 0.6); /* warm dark */
box-shadow: 0 1px 2px rgb(0 0 0 / 0.3), 0 8px 28px -14px rgb(0 0 0 / 0.6);
}
/* Stepper rail. */
.pp-rail::before {
content: "";
position: absolute;
left: 1.05rem;
top: 1.5rem;
bottom: 1.5rem;
width: 2px;
background: linear-gradient(
to bottom, rgb(var(--pp-accent) / 0.5), rgb(var(--pp-violet) / 0.4)
);
}
/* Step node button. */
.pp-step {
transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease,
background-color .12s ease;
}
.pp-step:hover { transform: translateY(-1px); }
.pp-step[data-active="true"] {
border-color: rgb(var(--pp-accent-strong));
box-shadow: 0 0 0 3px rgb(var(--pp-accent) / 0.18);
}
/* Step index bubble. */
.pp-bubble {
display: grid;
place-items: center;
width: 2.15rem;
height: 2.15rem;
border-radius: 999px;
font-weight: 600;
font-size: 0.85rem;
color: white;
background: linear-gradient(135deg, rgb(var(--pp-accent)), rgb(var(--pp-violet)));
box-shadow: 0 4px 12px -4px rgb(var(--pp-accent) / 0.6);
}
.pp-bubble--sub {
background: linear-gradient(135deg, rgb(180 132 70), rgb(146 99 45)); /* brass -> bronze */
box-shadow: 0 4px 12px -4px rgb(146 99 45 / 0.5);
}
/* Inline citation chip. */
.pp-cite {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 1.15rem;
height: 1.15rem;
padding: 0 0.3rem;
margin: 0 0.08rem;
border-radius: 0.4rem;
font-size: 0.68rem;
font-weight: 700;
line-height: 1;
vertical-align: super;
color: rgb(var(--pp-accent-strong));
background: rgb(var(--pp-accent) / 0.12);
text-decoration: none;
transition: background-color .12s ease;
}
.pp-cite:hover { background: rgb(var(--pp-accent) / 0.24); }
/* Confidence meter. */
.pp-meter { height: 0.5rem; border-radius: 999px; background: rgb(228 220 205); overflow: hidden; }
.dark .pp-meter { background: rgb(60 54 45); }
.pp-meter > span {
display: block; height: 100%;
background: linear-gradient(90deg, rgb(var(--pp-accent)), rgb(var(--pp-violet)));
}
/* htmx loading affordance. */
.htmx-indicator { opacity: 0; transition: opacity .15s ease; }
.htmx-request .htmx-indicator { opacity: 1; }
.htmx-request.htmx-indicator { opacity: 1; }
/* Fade-in for swapped content. */
@keyframes pp-fade-in {
from { opacity: 0; transform: translateY(4px); }
to { opacity: 1; transform: translateY(0); }
}
.pp-fade { animation: pp-fade-in .22s ease both; }
/* Focus ring. */
.pp-focus:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgb(var(--pp-accent) / 0.4);
}