/* 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); }