logicsrc/apps/logicsrc-web/src/styles.css
Anthony Ettinger 08490aecf3
Some checks failed
CI / build (push) Has been cancelled
test / test (push) Has been cancelled
fix(web): scope sidebar navigation styles away from breadcrumbs
2026-09-13 16:02:00 +00:00

1006 lines
16 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:root {
color: #101418;
background: #f6f7f4;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 16px;
letter-spacing: 0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
}
a {
color: #0a7d59;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
button {
border: 0;
font: inherit;
cursor: pointer;
}
button:disabled {
cursor: wait;
opacity: 0.72;
}
.shell {
display: grid;
grid-template-columns: 16rem minmax(0, 1fr);
min-height: 100vh;
}
.rail {
display: flex;
flex-direction: column;
gap: 1.5rem;
padding: 1rem;
border-right: 1px solid #d9ded4;
background: #101418;
color: #f6f7f4;
}
.brand {
display: flex;
align-items: center;
gap: 0.75rem;
}
.brand small {
display: block;
margin-top: 0.15rem;
color: #b5beb2;
}
.mark {
display: grid;
width: 2.5rem;
height: 2.5rem;
place-items: center;
border: 1px solid #5ac8a6;
border-radius: 6px;
color: #5ac8a6;
font-weight: 800;
}
.rail nav {
display: grid;
gap: 0.5rem;
}
.rail nav a {
color: inherit;
min-width: 0;
overflow-wrap: anywhere;
min-height: 2.35rem;
padding: 0.55rem 0.75rem;
border: 1px solid #263039;
border-radius: 6px;
}
.rail nav a.active,
.rail nav a:hover {
border-color: #3f5049;
background: #1b2329;
text-decoration: none;
}
.workspace {
padding: 1.25rem;
}
.hero,
.band {
width: 100%;
max-width: 72rem;
margin: 0 auto 1rem;
}
.hero {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(16rem, 22rem);
gap: 1rem;
align-items: end;
padding: 1.25rem 0 0.25rem;
}
.eyebrow,
.section-head p,
.tile p,
.implementation-list p,
.cli-panel p {
color: #58615b;
}
.eyebrow {
margin: 0 0 0.4rem;
font-weight: 800;
}
h1,
h2,
h3,
p {
margin-top: 0;
}
h1 {
margin-bottom: 0.45rem;
font-size: 3rem;
line-height: 1;
}
.lede {
max-width: 52rem;
margin-bottom: 0;
font-size: 1.12rem;
line-height: 1.55;
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: 0.65rem;
margin-top: 1rem;
}
.status-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.5rem;
}
.status-grid span {
min-height: 5rem;
padding: 0.75rem;
border: 1px solid #d6ddd2;
border-radius: 8px;
background: #ffffff;
color: #58615b;
}
.status-grid strong {
display: block;
color: #101418;
font-size: 1.4rem;
}
.band {
padding: 1rem 0;
}
.section-head {
display: flex;
align-items: end;
justify-content: space-between;
gap: 1rem;
margin-bottom: 0.8rem;
}
.section-head h2,
.cli-panel h2 {
margin-bottom: 0;
font-size: 1.15rem;
}
.section-head p {
max-width: 34rem;
margin-bottom: 0;
line-height: 1.45;
}
.primitive-grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 0.75rem;
}
.tile,
.schema-list article,
.cli-panel,
.soon-lead,
.soon-grid article,
.implementation-list article,
.hire-panel,
.hire-grid article,
.coinpay-panel {
border: 1px solid #d6ddd2;
border-radius: 8px;
background: #ffffff;
}
.tile {
min-height: 10rem;
padding: 0.85rem;
}
.tile h3,
.implementation-list h3 {
margin-bottom: 0.35rem;
font-size: 1rem;
}
.tile p,
.implementation-list p,
.cli-panel p {
margin-bottom: 0;
line-height: 1.45;
}
.two-col {
display: grid;
grid-template-columns: minmax(0, 1.1fr) minmax(20rem, 0.9fr);
gap: 1rem;
}
.coming-soon {
padding-top: 1.2rem;
}
.soon-layout {
display: grid;
grid-template-columns: minmax(20rem, 0.95fr) minmax(0, 1.05fr);
gap: 1rem;
}
.soon-lead {
padding: 1rem;
background: #eef7f3;
}
.agentbyte .soon-lead {
background: #f7f3e8;
}
.credentials .soon-lead {
background: #eef3f7;
}
.agentbyte .soon-lead span {
border-color: #e3c878;
color: #735b14;
}
.credentials .soon-lead span {
border-color: #9fc3da;
color: #225d77;
}
.soon-lead span {
display: inline-block;
margin-bottom: 0.75rem;
padding: 0.35rem 0.5rem;
border: 1px solid #a8d9c9;
border-radius: 999px;
color: #2d6f60;
font-size: 0.9rem;
font-weight: 800;
}
.soon-lead h3 {
margin-bottom: 0.45rem;
font-size: 1.25rem;
}
.soon-lead p {
color: #39443e;
line-height: 1.5;
}
.soon-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.75rem;
}
.soon-grid article {
min-height: 8.5rem;
padding: 0.85rem;
}
.soon-grid h3 {
margin-bottom: 0.35rem;
font-size: 1rem;
}
.soon-grid p {
margin-bottom: 0;
color: #58615b;
line-height: 1.45;
}
.surface-strip {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.75rem;
margin-top: 0.75rem;
}
.surface-strip article {
min-height: 7.25rem;
padding: 0.85rem;
border: 1px solid #d6ddd2;
border-radius: 8px;
background: #ffffff;
}
.surface-strip h3 {
margin-bottom: 0.35rem;
font-size: 1rem;
}
.surface-strip p {
margin-bottom: 0;
color: #58615b;
line-height: 1.45;
}
.schema-list {
display: grid;
gap: 0.5rem;
}
.schema-list article {
display: grid;
gap: 0.35rem;
min-height: 4.2rem;
padding: 0.75rem;
}
code {
overflow-wrap: anywhere;
color: #2d6f60;
}
.cli-panel {
padding: 1rem;
}
pre {
overflow-x: auto;
margin: 0.75rem 0;
padding: 0.85rem;
border-radius: 6px;
background: #101418;
color: #f6f7f4;
}
.implementation-list {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.75rem;
}
.implementation-list article {
display: grid;
grid-template-columns: 0.7rem 1fr;
gap: 0.65rem;
min-height: 9rem;
padding: 0.85rem;
}
.implementation-list span {
width: 0.7rem;
height: 0.7rem;
margin-top: 0.25rem;
border-radius: 999px;
background: #f0c56a;
}
.compare-table {
display: grid;
overflow: hidden;
border: 1px solid #d6ddd2;
border-radius: 8px;
background: #ffffff;
}
.compare-row {
display: grid;
grid-template-columns: minmax(8rem, 0.6fr) repeat(2, minmax(0, 1fr));
border-top: 1px solid #e1e6dc;
}
.compare-row:first-child {
border-top: 0;
}
.compare-row > * {
margin: 0;
padding: 0.85rem;
border-left: 1px solid #e1e6dc;
line-height: 1.45;
}
.compare-row > *:first-child {
border-left: 0;
}
.compare-head {
background: #eef7f3;
}
.compare-row p {
color: #58615b;
}
.compare-note {
margin-top: 0.75rem;
}
.hire-us {
padding-top: 1.2rem;
}
.hire-layout {
display: grid;
grid-template-columns: minmax(20rem, 0.9fr) minmax(0, 1.1fr);
gap: 1rem;
}
.hire-panel {
padding: 1rem;
background: #101418;
color: #f6f7f4;
}
.hire-panel .eyebrow {
color: #5ac8a6;
}
.hire-panel h3 {
margin-bottom: 0.55rem;
font-size: 1.35rem;
}
.hire-panel p {
color: #ccd5ce;
line-height: 1.5;
}
.price-row {
display: flex;
align-items: end;
gap: 0.5rem;
margin: 1rem 0;
}
.price-row strong {
color: #ffffff;
font-size: 2.4rem;
line-height: 1;
}
.price-row span {
color: #b5beb2;
font-weight: 800;
}
.price-terms {
color: #b5beb2;
font-size: 0.85rem;
line-height: 1.5;
margin: -0.5rem 0 0;
}
.price-terms a {
color: inherit;
}
.cta-row {
display: flex;
flex-wrap: wrap;
gap: 0.65rem;
}
.project-request-form {
display: grid;
gap: 0.75rem;
margin-top: 1rem;
}
.project-request-form label {
display: grid;
gap: 0.35rem;
}
.project-request-form label span {
color: #8ee4c9;
font-size: 0.78rem;
font-weight: 800;
text-transform: uppercase;
}
.project-request-form input,
.project-request-form textarea {
width: 100%;
border: 1px solid #3f5049;
border-radius: 6px;
background: #171d1a;
color: #f6f7f4;
font: inherit;
line-height: 1.45;
padding: 0.7rem 0.75rem;
}
.project-request-form textarea {
resize: vertical;
}
.project-request-form input::placeholder,
.project-request-form textarea::placeholder {
color: #7f8b84;
}
.button-primary,
.button-secondary {
display: inline-flex;
min-height: 2.5rem;
align-items: center;
justify-content: center;
padding: 0.6rem 0.85rem;
border-radius: 6px;
font-weight: 800;
}
.button-primary {
background: #5ac8a6;
color: #101418;
}
.button-secondary {
border: 1px solid #3f5049;
color: #f6f7f4;
}
.hire-stack {
display: grid;
gap: 0.75rem;
}
.hire-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.75rem;
}
.hire-grid article,
.coinpay-panel {
padding: 0.85rem;
}
.hire-grid h3,
.coinpay-panel h3 {
margin-bottom: 0.35rem;
font-size: 1rem;
}
.hire-grid p,
.coinpay-panel p {
margin-bottom: 0;
color: #58615b;
line-height: 1.45;
}
.coinpay-panel pre {
margin-bottom: 0;
}
.coinpay-result {
margin-top: 0.85rem;
color: #ccd5ce;
}
.coinpay-result:empty {
display: none;
}
.coinpay-result strong {
display: block;
margin-bottom: 0.5rem;
color: #ffffff;
}
.coinpay-result p {
margin-bottom: 0;
}
.coinpay-result dl {
display: grid;
gap: 0.45rem;
margin: 0;
}
.coinpay-result div {
display: grid;
gap: 0.15rem;
}
.coinpay-result dt {
color: #8ee4c9;
font-size: 0.8rem;
font-weight: 800;
text-transform: uppercase;
}
.coinpay-result dd {
margin: 0;
overflow-wrap: anywhere;
}
.coinpay-result img {
width: min(12rem, 100%);
height: auto;
margin-top: 0.75rem;
border-radius: 6px;
background: #ffffff;
}
@media (max-width: 980px) {
.primitive-grid,
.implementation-list,
.hire-grid,
.surface-strip {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.hero,
.soon-layout,
.two-col,
.hire-layout {
grid-template-columns: 1fr;
}
}
@media (max-width: 720px) {
.shell {
grid-template-columns: minmax(0, 1fr);
}
.rail {
border-right: 0;
}
.rail nav {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.rail nav a {
text-align: center;
}
.workspace {
padding: 0.9rem;
}
.section-head,
.hero {
align-items: start;
flex-direction: column;
}
.status-grid,
.primitive-grid,
.soon-grid,
.implementation-list,
.hire-grid,
.surface-strip {
grid-template-columns: 1fr;
}
.compare-row {
grid-template-columns: 1fr;
}
.compare-row > * {
border-left: 0;
border-top: 1px solid #e1e6dc;
}
.compare-row > *:first-child {
border-top: 0;
}
h1 {
font-size: 2.4rem;
}
}
/* Rendered blog post HTML (autoblog payload) on the light workspace. */
.blog-content {
color: #1f2933;
}
.blog-content a {
color: #0a7d59;
}
.blog-content h2,
.blog-content h3,
.blog-content h4 {
margin: 1.75rem 0 0.5rem;
line-height: 1.25;
color: #101418;
}
.blog-content p,
.blog-content ul,
.blog-content ol,
.blog-content blockquote {
margin: 0 0 1rem;
}
.blog-content img {
max-width: 100%;
height: auto;
border-radius: 0.5rem;
}
.blog-content pre {
background: #f1f3ef;
border: 1px solid #e3e6e0;
padding: 1rem;
border-radius: 0.5rem;
overflow: auto;
}
.blog-content code {
background: rgba(16, 20, 24, 0.06);
padding: 0.1rem 0.35rem;
border-radius: 0.25rem;
font-size: 0.9em;
}
.blog-content pre code {
background: none;
padding: 0;
}
.blog-content blockquote {
border-left: 3px solid #d9ded4;
padding-left: 1rem;
color: #5b6b7a;
}
/* --------------------------------------------------- install command ----- */
/* Two placements of one command: `.install-cta` on the homepage hero, meant to
be the first thing anyone sees, and `.install-rail` riding in the dark chrome
on every page -- present, but never competing with the nav. */
.install-copy {
flex: 0 0 auto;
padding: 0.55rem 0.9rem;
border-radius: 6px;
background: #5ac8a6;
color: #101418;
font-weight: 800;
line-height: 1;
transition: background 120ms ease;
}
.install-copy:hover {
background: #7ad9bd;
}
/* Confirmation has to survive the button's own text changing width, so the
label is centred in a fixed box rather than reflowing the row. */
.install-copy.is-copied {
background: #2d6f60;
color: #f6f7f4;
}
.install-copy-sm {
padding: 0.35rem 0.5rem;
font-size: 0.72rem;
}
/* ---- homepage hero ---- */
.install-cta {
margin: 1rem 0 0.25rem;
padding: 0.9rem 1rem 0.8rem;
border: 2px solid #5ac8a6;
border-radius: 10px;
background: #101418;
color: #f6f7f4;
}
.install-cta-label {
margin: 0 0 0.5rem;
color: #5ac8a6;
font-size: 0.78rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.install-cta-row {
display: flex;
align-items: center;
gap: 0.75rem;
}
/* The command is the point of the box, so it gets the room: it scrolls on its
own rather than wrapping mid-flag or pushing the Copy button off the edge. */
.install-cta-cmd {
flex: 1 1 auto;
min-width: 0;
overflow-x: auto;
padding: 0.55rem 0.7rem;
border-radius: 6px;
background: #1b2229;
color: #f6f7f4;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 1rem;
white-space: nowrap;
}
.install-cta-note {
margin: 0.6rem 0 0;
color: #b5beb2;
font-size: 0.8rem;
}
.install-cta-note a {
color: #5ac8a6;
}
/* ---- site chrome ---- */
.install-rail {
display: flex;
flex-direction: column;
gap: 0.35rem;
padding: 0.6rem;
border: 1px solid #3f5049;
border-radius: 8px;
background: #171d24;
}
.install-rail-label {
color: #8fa39a;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.install-rail-row {
display: flex;
align-items: center;
gap: 0.4rem;
}
.install-rail-row code {
flex: 1 1 auto;
min-width: 0;
overflow-x: auto;
color: #d7ded8;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 0.66rem;
white-space: nowrap;
}
@media (max-width: 720px) {
/* Stacked layout: the row would otherwise squeeze the command to nothing. */
.install-cta-row {
flex-direction: column;
align-items: stretch;
}
.install-cta-cmd {
font-size: 0.85rem;
}
}
/* Sidebar groups: broad first, each entry a page that drills down. */
.rail nav .nav-group-block {
display: contents;
}
.rail nav .nav-group {
display: block;
margin: 0.9rem 0 0.25rem;
padding: 0 0.6rem;
font-size: 0.68rem;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: #7a8794;
}
.rail nav .nav-group:first-child {
margin-top: 0.25rem;
}
.tile h3 a {
color: inherit;
text-decoration: none;
}
.tile .tile-specs {
margin-top: 0.55rem;
font-size: 0.85rem;
line-height: 1.7;
}
.tile .tile-specs a {
color: inherit;
}
.section-foot {
margin: 1rem 0 0;
font-size: 0.95rem;
}
/* Sidebar drill-down: the current family unfolds to its specs, a spec to its blocks. */
.rail nav .nav-branch {
display: contents;
}
.rail nav .nav-children {
display: flex;
flex-direction: column;
gap: 0.2rem;
margin: 0.2rem 0 0.35rem 0.6rem;
padding-left: 0.6rem;
border-left: 1px solid #263039;
}
.rail nav .nav-children a {
min-height: 1.9rem;
padding: 0.3rem 0.6rem;
font-size: 0.85rem;
border-color: transparent;
}
.rail nav .nav-children a.active,
.rail nav .nav-children a:hover {
border-color: #3f5049;
}
@media (max-width: 720px) {
.rail nav .nav-group,
.rail nav .nav-children {
grid-column: 1 / -1;
}
.rail nav .nav-children {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
margin-left: 0;
padding-left: 0;
border-left: 0;
}
.rail nav .nav-children a {
display: block;
overflow-wrap: anywhere;
text-align: left;
}
}
/* Breadcrumb trail at the top of every page but the home page. */
.crumbs {
width: 100%;
max-width: 72rem;
margin: 0 auto 0.75rem;
font-size: 0.88rem;
color: #5b6b7a;
}
.crumbs ol {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
list-style: none;
margin: 0;
padding: 0.35rem 0 0.75rem;
border-bottom: 1px solid #e3e6e0;
}
.crumbs li + li::before {
content: "›";
margin-right: 0.35rem;
color: #9aa6b1;
}
.crumbs a {
color: inherit;
text-decoration: none;
}
.crumbs a:hover {
text-decoration: underline;
}
.crumbs [aria-current="page"] {
color: #101418;
font-weight: 600;
}