syntaxai/tdd.md · main · public / style.css
:root {
color-scheme: dark light;
--bg: #0a0a0a;
--fg: #e8e8e8;
--muted: #8a8a8a;
--border: #2a2a2a;
--accent: #5fb3ff;
--red: #ff7a7a;
--green: #5fd97a;
--blue: #5fb3ff;
--code-bg: #161616;
}
@media (prefers-color-scheme: light) {
:root {
--bg: #fafaf8;
--fg: #111;
--muted: #555;
--border: #e5e5e5;
--accent: #0066cc;
--red: #c83232;
--green: #1e8a3e;
--blue: #0066cc;
--code-bg: #f0f0eb;
}
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
background: var(--bg);
color: var(--fg);
font: 16px/1.65 ui-sans-serif, -apple-system, "SF Pro Text", "Inter", system-ui, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.md-nav {
max-width: 720px;
margin: 0 auto;
padding: 28px 24px 0;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.85rem;
letter-spacing: 0.02em;
color: var(--muted);
}
.md-nav a {
color: var(--muted);
text-decoration: none;
transition: color 0.1s;
}
.md-nav a:hover, .md-nav a.nav-active {
color: var(--fg);
}
.md-nav-sep {
margin: 0 0.4em;
opacity: 0.45;
}
main.md {
max-width: 720px;
margin: 0 auto;
padding: 56px 24px 120px;
}
main.md h1, main.md h2, main.md h3 {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-weight: 600;
letter-spacing: -0.01em;
}
main.md h1 {
font-size: clamp(2rem, 6vw, 2.6rem);
margin: 0 0 0.4rem;
}
main.md h2 {
font-size: 0.95rem;
margin: 3rem 0 1rem;
color: var(--muted);
text-transform: lowercase;
letter-spacing: 0.04em;
}
main.md h3 {
font-size: 1rem;
margin: 2rem 0 0.6rem;
}
main.md blockquote {
margin: 0 0 2rem;
padding: 0;
border: none;
color: var(--muted);
font-size: 1.1rem;
line-height: 1.5;
}
main.md hr {
border: none;
border-top: 1px solid var(--border);
margin: 3rem 0;
}
main.md p { margin: 0 0 1.2rem; }
main.md a {
color: var(--accent);
text-decoration: underline;
text-underline-offset: 3px;
text-decoration-thickness: 1px;
transition: text-decoration-thickness 0.1s;
}
main.md a:hover { text-decoration-thickness: 2px; }
main.md code {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.9em;
background: var(--code-bg);
border: 1px solid var(--border);
padding: 0.1em 0.4em;
border-radius: 4px;
}
main.md pre {
background: var(--code-bg);
border: 1px solid var(--border);
padding: 1rem 1.2rem;
border-radius: 6px;
overflow-x: auto;
font-size: 0.9rem;
line-height: 1.55;
margin: 0 0 1.5rem;
}
main.md pre code {
background: transparent;
border: none;
padding: 0;
font-size: inherit;
}
main.md table {
width: 100%;
border-collapse: collapse;
margin: 0 0 1.5rem;
font-size: 0.95rem;
}
main.md th, main.md td {
text-align: left;
padding: 0.7rem 0.9rem;
border-bottom: 1px solid var(--border);
vertical-align: top;
}
main.md th {
font-weight: 600;
font-family: ui-monospace, monospace;
font-size: 0.8rem;
text-transform: lowercase;
letter-spacing: 0.04em;
color: var(--muted);
}
main.md ul, main.md ol {
margin: 0 0 1.2rem;
padding-left: 1.4rem;
}
main.md li { margin: 0.3rem 0; }
main.md strong { font-weight: 600; }
.red { color: var(--red); }
.green { color: var(--green); }
.blue { color: var(--blue); }
.muted { color: var(--muted); }
::selection {
background: var(--accent);
color: var(--bg);
}
/* --- reports / dashboard ---------------------------------------------- */
.report-mockup-banner {
background: var(--code-bg);
border: 1px dashed var(--border);
padding: 0.7rem 1rem;
border-radius: 4px;
font-size: 0.85rem;
color: var(--muted);
margin: 0 0 2rem;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
}
.report-mockup-banner a {
color: var(--muted);
text-decoration: underline;
text-underline-offset: 2px;
}
.report-mockup-banner a:hover { color: var(--fg); }
.report-tiles {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin: 1.5rem 0 2.5rem;
}
.report-tile {
border: 1px solid var(--border);
border-radius: 6px;
padding: 1.2rem 1.2rem 1rem;
background: var(--code-bg);
}
.report-tile-name {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.8rem;
text-transform: lowercase;
letter-spacing: 0.04em;
color: var(--muted);
margin: 0 0 0.6rem;
}
.report-tile-name a {
color: inherit;
text-decoration: none;
}
.report-tile-name a:hover { color: var(--fg); }
.report-tile-score {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 2.2rem;
font-weight: 600;
letter-spacing: -0.02em;
margin: 0;
line-height: 1.1;
}
.report-tile-score-suffix {
font-size: 0.95rem;
color: var(--muted);
font-weight: 400;
}
.report-tile-trend {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.9rem;
margin: 0.4rem 0 0.6rem;
}
.report-tile-trend.up { color: var(--green); }
.report-tile-trend.down { color: var(--red); }
.report-tile-trend.flat { color: var(--muted); }
.report-tile-volume {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.78rem;
color: var(--muted);
margin: 0 0 0.8rem;
}
.report-tile-issue {
font-size: 0.82rem;
color: var(--muted);
border-top: 1px solid var(--border);
padding-top: 0.7rem;
}
.report-tile-issue strong {
color: var(--fg);
font-weight: 500;
}
.report-bars {
margin: 1rem 0 2rem;
}
.report-bar-row {
display: grid;
grid-template-columns: 180px 1fr 50px;
align-items: center;
gap: 0.8rem;
margin: 0.5rem 0;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.85rem;
}
.report-bar-label { color: var(--muted); }
.report-bar-track {
height: 10px;
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 2px;
overflow: hidden;
}
.report-bar-fill {
display: block;
height: 100%;
background: var(--accent);
}
.report-bar-fill.red { background: var(--red); }
.report-bar-fill.green { background: var(--green); }
.report-bar-fill.muted { background: var(--muted); }
.report-bar-pct { text-align: right; color: var(--fg); }
.report-streak {
display: inline-block;
padding: 0.4rem 0.8rem;
border: 1px solid var(--border);
border-radius: 4px;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.85rem;
color: var(--muted);
margin: 0 0 1.5rem;
}
.report-streak-num {
font-weight: 600;
color: var(--fg);
}
.report-streak.broken {
color: var(--red);
border-color: var(--red);
}
.report-streak.broken .report-streak-num { color: var(--red); }
.report-streak.long {
color: var(--green);
border-color: var(--green);
}
.report-streak.long .report-streak-num { color: var(--green); }
.report-sparkline {
width: 100%;
height: 80px;
display: block;
margin: 0.5rem 0 1.2rem;
}
@media (max-width: 600px) {
.report-tiles { grid-template-columns: 1fr; }
.report-bar-row { grid-template-columns: 130px 1fr 50px; }
}
/* tests overview */
.test-snapshots {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
margin: 1rem 0 1.5rem;
}
.test-snapshot {
border: 1px solid var(--border);
border-radius: 6px;
padding: 1rem 1.1rem;
background: var(--code-bg);
}
.test-snapshot.bad { border-left: 3px solid var(--red); }
.test-snapshot.ok { border-left: 3px solid var(--green); }
.test-snapshot-head {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.95rem;
margin: 0 0 0.3rem;
}
.test-snapshot-branch {
color: var(--muted);
font-weight: 400;
font-size: 0.85rem;
}
.test-snapshot-stats {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.8rem;
color: var(--muted);
margin: 0 0 0.7rem;
}
.test-list {
list-style: none;
margin: 0;
padding: 0;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.82rem;
}
.test-list li { margin: 0.25rem 0; padding-left: 1.2rem; position: relative; line-height: 1.4; }
.test-list li::before {
position: absolute;
left: 0;
top: 0;
}
.test-list-fail { color: var(--fg); }
.test-list-fail::before { content: "✗"; color: var(--red); }
.test-list-pass { color: var(--green); }
.test-list-pass::before { content: "✓"; color: var(--green); }
.test-list-collapsed { color: var(--muted); }
.test-list-collapsed::before { content: "+"; color: var(--muted); }
.test-list-meta {
color: var(--muted);
font-size: 0.78rem;
}
main.md table.test-stability {
width: 100%;
border-collapse: collapse;
font-size: 0.85rem;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
margin: 1rem 0 1.5rem;
}
main.md table.test-stability th,
main.md table.test-stability td {
text-align: left;
padding: 0.55rem 0.6rem;
border-bottom: 1px solid var(--border);
vertical-align: top;
}
main.md table.test-stability th.num,
main.md table.test-stability td.test-stab-num {
text-align: right;
width: 50px;
}
.test-stab-name { color: var(--fg); }
.test-stab-repo {
color: var(--muted);
font-size: 0.75rem;
margin-top: 0.15rem;
}
.test-stab-num.red { color: var(--red); font-weight: 600; }
.test-stab-num.green { color: var(--muted); }
.test-stab-row.flagged { background: color-mix(in srgb, var(--red) 8%, transparent); }
.test-stab-warn {
color: var(--red);
margin-left: 0.25rem;
cursor: help;
}
.agent-tag {
font-size: 0.78rem;
padding: 0.15rem 0.5rem;
border: 1px solid var(--border);
border-radius: 999px;
color: var(--muted);
text-decoration: none;
white-space: nowrap;
}
.agent-tag:hover { color: var(--fg); border-color: var(--fg); }
@media (max-width: 600px) {
.test-snapshots { grid-template-columns: 1fr; }
main.md table.test-stability { font-size: 0.78rem; }
}
/* projects */
.project-form {
display: grid;
gap: 0.6rem;
margin: 1.2rem 0 1.5rem;
max-width: 540px;
}
.project-form label {
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.82rem;
color: var(--muted);
}
.project-form label code {
font-size: 0.78rem;
background: var(--code-bg);
border: 1px solid var(--border);
padding: 0.05em 0.35em;
border-radius: 3px;
}
.project-form input[type="text"] {
font: inherit;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.95rem;
padding: 0.65rem 0.8rem;
background: var(--code-bg);
color: var(--fg);
border: 1px solid var(--border);
border-radius: 4px;
outline: none;
}
.project-form input[type="text"]:focus {
border-color: var(--accent);
}
.project-form button {
font: inherit;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.85rem;
padding: 0.55rem 1rem;
background: var(--accent);
color: var(--bg);
border: 1px solid var(--accent);
border-radius: 4px;
cursor: pointer;
justify-self: start;
}
.project-form button:hover { filter: brightness(1.1); }
.project-form-error {
background: color-mix(in srgb, var(--red) 10%, transparent);
border: 1px solid var(--red);
color: var(--fg);
padding: 0.7rem 0.9rem;
border-radius: 4px;
font-size: 0.9rem;
margin: 0 0 1.2rem;
}
.project-form-error strong { color: var(--red); }
/* -----------------------------------------------------------------
Docs layout — content + on-this-page rail.
Used by /sama/*, /guides/*, /blog/* via renderDocsPage. Mobile
drops the rail entirely.
----------------------------------------------------------------- */
.docs-body main.md {
max-width: none;
padding: 0;
}
.docs-layout {
display: grid;
grid-template-columns: minmax(0, 1fr) 220px;
gap: 2rem;
max-width: 1100px;
margin: 0 auto;
padding: 1rem 1.5rem 4rem;
align-items: start;
}
.docs-rail {
position: sticky;
top: 1rem;
font-size: 0.88rem;
align-self: start;
max-height: calc(100vh - 2rem);
overflow-y: auto;
}
.docs-content {
min-width: 0;
font-size: 1rem;
line-height: 1.65;
}
.docs-content > h1:first-child { margin-top: 0; }
.docs-content img {
max-width: 600px;
width: 100%;
height: auto;
display: block;
margin: 1.75rem auto;
border-radius: 6px;
}
.docs-content h2,
.docs-content h3 {
scroll-margin-top: 1rem;
position: relative;
}
.docs-h-anchor {
position: absolute;
left: -1.2rem;
color: var(--muted);
text-decoration: none;
opacity: 0;
transition: opacity 0.1s;
font-weight: normal;
}
.docs-content h2:hover .docs-h-anchor,
.docs-content h3:hover .docs-h-anchor {
opacity: 1;
}
.docs-h-anchor:hover { color: var(--accent); }
.docs-edit {
text-align: right;
font-size: 0.85rem;
margin: 0 0 0.5rem;
}
.docs-edit a {
color: var(--muted);
text-decoration: none;
}
.docs-edit a:hover { color: var(--accent); }
.docs-rail-title {
margin: 0 0 0.5rem;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--muted);
}
.docs-rail-list {
list-style: none;
padding: 0;
margin: 0;
border-left: 1px solid color-mix(in srgb, var(--muted) 30%, transparent);
}
.docs-rail-link {
display: block;
padding: 0.25rem 0.6rem;
margin-left: -1px;
border-left: 2px solid transparent;
color: var(--muted);
text-decoration: none;
line-height: 1.35;
}
.docs-rail-link:hover {
color: var(--fg);
border-left-color: color-mix(in srgb, var(--fg) 40%, transparent);
}
.docs-rail-link-h3 { padding-left: 1.4rem; font-size: 0.82rem; }
.docs-prev-next {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 3rem 0 0;
border-top: 1px solid color-mix(in srgb, var(--muted) 25%, transparent);
padding-top: 1.5rem;
}
.docs-pn-prev,
.docs-pn-next {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.8rem 1rem;
border: 1px solid color-mix(in srgb, var(--muted) 30%, transparent);
border-radius: 6px;
text-decoration: none;
color: var(--fg);
background: color-mix(in srgb, var(--muted) 6%, transparent);
}
.docs-pn-prev:hover,
.docs-pn-next:hover {
border-color: var(--accent);
background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.docs-pn-prev { justify-content: flex-start; }
.docs-pn-next { justify-content: flex-end; text-align: right; }
.docs-pn-arrow { color: var(--muted); font-size: 1.1rem; }
.docs-pn-label { font-weight: 500; }
.docs-pn-spacer {}
@media (max-width: 1080px) {
.docs-layout {
grid-template-columns: 1fr;
}
.docs-rail { display: none; }
}
/* -----------------------------------------------------------------
Editor pages — /edit/:section/:slug, /admin/proposals/*. Wider
content area, full-width form controls, side-by-side diff blocks.
----------------------------------------------------------------- */
.edit-body main.md {
max-width: none;
padding: 0;
}
.edit-container {
max-width: 1100px;
margin: 0 auto;
padding: 1rem 1.5rem 4rem;
}
.edit-meta {
color: var(--muted);
font-size: 0.9rem;
}
.edit-form { display: flex; flex-direction: column; gap: 0.8rem; }
.edit-textarea {
width: 100%;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.92rem;
line-height: 1.55;
padding: 0.8rem 1rem;
background: color-mix(in srgb, var(--muted) 6%, transparent);
color: var(--fg);
border: 1px solid color-mix(in srgb, var(--muted) 30%, transparent);
border-radius: 4px;
resize: vertical;
outline: none;
}
.edit-textarea:focus { border-color: var(--accent); }
.edit-actions { display: flex; gap: 0.8rem; align-items: center; }
.edit-actions-row { flex-wrap: wrap; }
.edit-actions button,
.edit-form-inline button {
font: inherit;
font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 0.88rem;
padding: 0.55rem 1rem;
background: var(--accent);
color: var(--bg);
border: 1px solid var(--accent);
border-radius: 4px;
cursor: pointer;
}
.edit-actions button:hover,
.edit-form-inline button:hover { filter: brightness(1.1); }
.edit-cancel,
.edit-action-link {
color: var(--muted);
text-decoration: none;
font-size: 0.9rem;
}
.edit-cancel:hover, .edit-action-link:hover { color: var(--accent); }
.edit-form-inline {
display: inline-flex;
gap: 0.4rem;
align-items: center;
}
.edit-form-inline input[type="text"] {
font-family: inherit;
padding: 0.45rem 0.7rem;
background: color-mix(in srgb, var(--muted) 6%, transparent);
color: var(--fg);
border: 1px solid color-mix(in srgb, var(--muted) 30%, transparent);
border-radius: 4px;
font-size: 0.85rem;
min-width: 16rem;
}
.edit-login-button {
display: inline-block;
padding: 0.7rem 1.2rem;
background: var(--accent);
color: var(--bg);
text-decoration: none;
border-radius: 4px;
font-weight: 500;
}
.edit-login-button:hover { filter: brightness(1.1); }
.edit-note {
margin-top: 1.2rem;
color: var(--muted);
font-size: 0.88rem;
border-left: 2px solid color-mix(in srgb, var(--muted) 30%, transparent);
padding-left: 0.8rem;
}
.edit-table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0 1.5rem;
}
.edit-table th, .edit-table td {
text-align: left;
padding: 0.55rem 0.8rem;
border-bottom: 1px solid color-mix(in srgb, var(--muted) 18%, transparent);
font-size: 0.9rem;
}
.edit-table th {
font-weight: 600;
color: var(--muted);
text-transform: uppercase;
font-size: 0.72rem;
letter-spacing: 0.05em;
}
.edit-empty { color: var(--muted); text-align: center; padding: 2rem !important; }
.edit-status {
font-size: 0.78rem;
padding: 0.15rem 0.55rem;
border-radius: 999px;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.04em;
}
.edit-status-pending { background: color-mix(in srgb, var(--accent) 18%, transparent); color: var(--accent); }
.edit-status-approved { background: color-mix(in srgb, var(--green) 18%, transparent); color: var(--green); }
.edit-status-rejected { background: color-mix(in srgb, var(--red) 18%, transparent); color: var(--red); }
.edit-diff {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 1rem 0 2rem;
}
.edit-diff-pane {
border: 1px solid color-mix(in srgb, var(--muted) 25%, transparent);
border-radius: 4px;
background: color-mix(in srgb, var(--muted) 5%, transparent);
}
.edit-diff-label {
margin: 0;
padding: 0.5rem 0.8rem;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--muted);
border-bottom: 1px solid color-mix(in srgb, var(--muted) 25%, transparent);
}
.edit-diff-pane pre {
margin: 0;
padding: 0.8rem;
max-height: 60vh;
overflow: auto;
font-size: 0.82rem;
line-height: 1.5;
white-space: pre-wrap;
}
@media (max-width: 900px) {
.edit-diff { grid-template-columns: 1fr; }
}
/* ---- /GIT/<owner>/<repo>/commit/<sha> ---- */
.commit-view { max-width: 980px; margin: 0 auto; padding: 1.5rem 1rem 4rem; }
.commit-breadcrumb { color: var(--muted); font-size: 0.85rem; margin: 0 0 0.4rem; }
.commit-breadcrumb code { font-size: 0.85rem; }
.commit-subject {
font-size: 1.4rem;
margin: 0.2rem 0 0.6rem;
line-height: 1.3;
font-weight: 600;
}
.commit-body {
margin: 0 0 1rem;
padding: 0.6rem 0.8rem;
background: color-mix(in srgb, var(--muted) 10%, transparent);
border-left: 3px solid color-mix(in srgb, var(--muted) 35%, transparent);
font-size: 0.88rem;
white-space: pre-wrap;
line-height: 1.5;
}
.commit-meta {
display: grid;
grid-template-columns: max-content 1fr;
gap: 0.25rem 1rem;
margin: 0 0 1.4rem;
font-size: 0.86rem;
}
.commit-meta dt {
color: var(--muted);
text-transform: uppercase;
font-size: 0.72rem;
letter-spacing: 0.05em;
align-self: center;
}
.commit-meta dd { margin: 0; }
.commit-meta-email { color: var(--muted); }
.commit-meta-empty { color: var(--muted); font-style: italic; }
.commit-parent code { font-size: 0.85rem; }
.commit-files-summary {
margin: 0 0 1rem;
padding: 0.5rem 0.8rem;
background: color-mix(in srgb, var(--muted) 8%, transparent);
border-radius: 4px;
font-size: 0.85rem;
}
.commit-empty { color: var(--muted); font-style: italic; }
.commit-file-add { color: #2ea043; font-weight: 600; }
.commit-file-rem { color: #f85149; font-weight: 600; }
.commit-file {
border: 1px solid color-mix(in srgb, var(--muted) 25%, transparent);
border-radius: 6px;
margin: 0 0 1rem;
overflow: hidden;
}
.commit-file-header {
display: flex;
align-items: center;
gap: 0.6rem;
padding: 0.5rem 0.8rem;
background: color-mix(in srgb, var(--muted) 10%, transparent);
border-bottom: 1px solid color-mix(in srgb, var(--muted) 22%, transparent);
font-size: 0.85rem;
flex-wrap: wrap;
}
.commit-file-path { font-weight: 600; }
.commit-file-stats { margin-left: auto; display: flex; gap: 0.5rem; font-size: 0.82rem; }
.commit-file-rename code { font-size: 0.82rem; color: var(--muted); }
.commit-file-status {
display: inline-block;
padding: 0.1rem 0.45rem;
border-radius: 3px;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.06em;
font-weight: 600;
}
.commit-file-status-modified {
background: color-mix(in srgb, #d29922 25%, transparent);
color: #d29922;
}
.commit-file-status-added {
background: color-mix(in srgb, #2ea043 25%, transparent);
color: #2ea043;
}
.commit-file-status-removed {
background: color-mix(in srgb, #f85149 25%, transparent);
color: #f85149;
}
.commit-file-status-renamed {
background: color-mix(in srgb, #79c0ff 25%, transparent);
color: #79c0ff;
}
.commit-diff-table {
width: 100%;
border-collapse: collapse;
font-family: var(--font-mono, ui-monospace, "SF Mono", monospace);
font-size: 0.78rem;
line-height: 1.45;
table-layout: fixed;
}
.commit-diff-table td {
padding: 0 0.4rem;
vertical-align: top;
white-space: pre-wrap;
word-break: break-word;
}
.commit-line-old, .commit-line-new {
width: 3.5rem;
text-align: right;
color: var(--muted);
user-select: none;
border-right: 1px solid color-mix(in srgb, var(--muted) 18%, transparent);
}
.commit-line-text { padding-left: 0.6rem; }
.commit-line-added { background: color-mix(in srgb, #2ea043 14%, transparent); }
.commit-line-added .commit-line-text { color: inherit; }
.commit-line-removed { background: color-mix(in srgb, #f85149 14%, transparent); }
.commit-line-context .commit-line-text { color: var(--muted); }
.commit-hunk-header td {
background: color-mix(in srgb, var(--accent) 8%, transparent);
color: color-mix(in srgb, var(--accent) 80%, var(--fg));
font-size: 0.75rem;
padding: 0.3rem 0.6rem;
}
.commit-hunk-heading { color: var(--muted); margin-left: 0.6rem; }
.commit-footer {
margin-top: 1.4rem;
padding-top: 0.8rem;
border-top: 1px solid color-mix(in srgb, var(--muted) 18%, transparent);
font-size: 0.85rem;
color: var(--muted);
}
@media (max-width: 700px) {
.commit-line-old, .commit-line-new { width: 2.5rem; }
.commit-meta { grid-template-columns: 1fr; gap: 0.1rem; }
.commit-meta dt { margin-top: 0.4rem; }
}
/* ---- /GIT/<owner>/<repo>/tree|blob/... ---- */
.repo-tree-table {
width: 100%;
border-collapse: collapse;
margin: 0.4rem 0 1rem;
font-size: 0.88rem;
}
.repo-tree-row td {
padding: 0.35rem 0.6rem;
border-bottom: 1px solid color-mix(in srgb, var(--muted) 14%, transparent);
}
.repo-tree-row:hover { background: color-mix(in srgb, var(--accent) 6%, transparent); }
.repo-tree-icon {
width: 1.6rem;
text-align: center;
user-select: none;
}
.repo-tree-name a { text-decoration: none; }
.repo-tree-name a:hover { text-decoration: underline; }
.repo-tree-row-tree .repo-tree-name a { font-weight: 600; }
.repo-tree-sha {
color: var(--muted);
text-align: right;
width: 5rem;
}
.repo-tree-row-up { background: color-mix(in srgb, var(--muted) 5%, transparent); }
.repo-blob-header {
display: flex;
align-items: center;
gap: 0.6rem;
padding: 0.5rem 0.8rem;
background: color-mix(in srgb, var(--muted) 10%, transparent);
border: 1px solid color-mix(in srgb, var(--muted) 22%, transparent);
border-radius: 6px 6px 0 0;
border-bottom: none;
font-size: 0.85rem;
flex-wrap: wrap;
}
.repo-blob-path { font-weight: 600; }
.repo-blob-meta { color: var(--muted); font-size: 0.82rem; }
.repo-blob-actions { margin-left: auto; }
.repo-blob-source {
margin: 0;
padding: 0.8rem;
border: 1px solid color-mix(in srgb, var(--muted) 22%, transparent);
border-radius: 0 0 6px 6px;
background: color-mix(in srgb, var(--muted) 5%, transparent);
font-family: var(--font-mono, ui-monospace, "SF Mono", monospace);
font-size: 0.8rem;
line-height: 1.5;
white-space: pre-wrap;
overflow-x: auto;
max-height: 75vh;
}
.repo-blob-rendered {
padding: 1rem 1.2rem;
border: 1px solid color-mix(in srgb, var(--muted) 22%, transparent);
border-radius: 0 0 6px 6px;
border-top: none;
}
.commit-meta-pill {
display: inline-block;
padding: 0.05rem 0.4rem;
border-radius: 3px;
background: color-mix(in srgb, var(--accent) 10%, transparent);
text-decoration: none;
}
/* -----------------------------------------------------------------
admin sxdoc block editor (Fase 2 of podman→tdd.md CMS port)
----------------------------------------------------------------- */
.admin-form {
display: grid;
gap: 0.9rem;
max-width: 60rem;
}
.admin-field { display: grid; gap: 0.25rem; font-size: 0.85rem; }
.admin-field > span { color: var(--muted); }
.admin-field input,
.admin-field select,
.admin-field textarea {
font: inherit;
padding: 0.35rem 0.55rem;
background: var(--bg);
color: var(--fg);
border: 1px solid var(--border);
border-radius: 4px;
}
.admin-field textarea { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 0.85rem; }
.admin-row { display: grid; grid-template-columns: 1fr 1fr 2fr; gap: 0.75rem; }
.admin-actions { display: flex; gap: 0.5rem; align-items: center; }
.admin-cancel { color: var(--muted); }
.admin-error {
padding: 0.5rem 0.75rem;
background: color-mix(in srgb, #ff5555 12%, transparent);
border: 1px solid color-mix(in srgb, #ff5555 50%, transparent);
border-radius: 4px;
color: #ff8080;
font-size: 0.85rem;
}
.admin-delete {
background: transparent;
color: #ff8080;
border: 1px solid color-mix(in srgb, #ff5555 40%, transparent);
padding: 0.35rem 0.7rem;
border-radius: 4px;
cursor: pointer;
}
.block-editor {
display: grid;
gap: 0.3rem;
padding: 0.5rem;
border: 1px solid var(--border);
border-radius: 4px;
background: color-mix(in srgb, var(--bg) 85%, var(--fg) 4%);
min-height: 12rem;
}
.block-editor-mode {
margin-bottom: 0.4rem;
background: transparent;
color: var(--muted);
border: 1px solid var(--border);
padding: 0.2rem 0.5rem;
border-radius: 3px;
font-size: 0.75rem;
cursor: pointer;
}
.block-editor-raw { font-family: ui-monospace, monospace; }
.block {
display: grid;
grid-template-columns: 1.5rem 1fr auto;
gap: 0.4rem;
padding: 0.2rem 0.3rem;
border-radius: 3px;
align-items: start;
}
.block:hover { background: color-mix(in srgb, var(--fg) 4%, transparent); }
.block-handle { color: var(--muted); cursor: grab; user-select: none; padding-top: 0.4rem; }
.block-body :is(p, h1, h2, h3, h4, h5, h6, blockquote, li) {
margin: 0;
outline: none;
min-height: 1.4em;
}
.block-body :is(p, h1, h2, h3, h4, h5, h6, blockquote, li)[data-placeholder]:empty::before {
content: attr(data-placeholder);
color: color-mix(in srgb, var(--muted) 60%, transparent);
}
.block-actions { opacity: 0; transition: opacity 100ms; }
.block:hover .block-actions { opacity: 1; }
.block-delete {
background: transparent;
border: 1px solid var(--border);
color: var(--muted);
width: 1.5rem; height: 1.5rem;
border-radius: 3px;
cursor: pointer;
}
.block-empty { color: var(--muted); padding: 0.5rem 0; }
.block-empty-hint { margin: 0 0 0.3rem; font-size: 0.85rem; }
.block-insert {
display: flex;
justify-content: flex-start;
padding-left: 1.9rem;
margin: -0.1rem 0;
height: 0;
overflow: visible;
opacity: 0;
transition: opacity 80ms;
}
.block-editor:hover .block-insert { opacity: 0.5; }
.block-insert:hover { opacity: 1; }
.block-insert-btn {
background: transparent;
border: 1px dashed var(--border);
color: var(--muted);
width: 1.5rem; height: 1.5rem;
border-radius: 3px;
cursor: pointer;
}
.code-shell, .img-shell, .shortcode-shell, .hr-shell { display: grid; gap: 0.3rem; }
.code-shell .code-lang { font-size: 0.75rem; max-width: 14rem; }
.code-shell .code-src,
.html-shell {
font-family: ui-monospace, monospace;
font-size: 0.82rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 3px;
padding: 0.4rem 0.6rem;
color: var(--fg);
width: 100%;
}
.img-row { display: grid; grid-template-columns: 5rem 1fr; gap: 0.4rem; align-items: center; }
.img-row span { color: var(--muted); font-size: 0.75rem; }
.img-preview { max-width: 24rem; border: 1px solid var(--border); border-radius: 3px; }
.hr-shell hr { border: none; border-top: 1px solid var(--border); margin: 0.5rem 0; }
.slash-menu {
position: fixed;
z-index: 1000;
min-width: 18rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 6px;
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
padding: 0.3rem;
display: grid;
gap: 0.2rem;
}
.slash-menu-filter {
font: inherit;
background: transparent;
border: none;
border-bottom: 1px solid var(--border);
padding: 0.3rem 0.4rem;
color: var(--fg);
outline: none;
}
.slash-menu-list { list-style: none; margin: 0; padding: 0; max-height: 16rem; overflow-y: auto; }
.slash-menu-item {
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.6rem;
padding: 0.3rem 0.5rem;
border-radius: 4px;
cursor: pointer;
font-size: 0.85rem;
}
.slash-menu-item.highlighted { background: color-mix(in srgb, var(--accent) 15%, transparent); }
.slash-menu-label { color: var(--fg); }
.slash-menu-hint { color: var(--muted); font-size: 0.75rem; }
.slash-menu-empty { color: var(--muted); padding: 0.4rem 0.5rem; font-size: 0.85rem; }
.block-editor-toast {
position: fixed;
bottom: 1rem; right: 1rem;
padding: 0.45rem 0.8rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 4px;
font-size: 0.85rem;
opacity: 0;
transition: opacity 200ms;
pointer-events: none;
z-index: 999;
}
.block-editor-toast-show { opacity: 1; }
.block-editor-toast-ok { color: #6fdc6f; border-color: color-mix(in srgb, #6fdc6f 40%, transparent); }
.block-editor-toast-error { color: #ff8080; border-color: color-mix(in srgb, #ff5555 40%, transparent); }