hleserg's picture
feat: initial deploy β€” Atman Linguistic Sensor v1
fe62539
Raw
History Blame Contribute Delete
34.9 kB
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
/* Atman β€” Linguistic Demo Β· Gradio 6 stylesheet.
*
* Load like this:
* with open(_HERE / "style.css") as f:
* css = f.read()
* with gr.Blocks(title="...", theme=theme, css=css) as demo:
*
* Selectors target Gradio 6 rendered DOM. Where the class name moved between
* minor versions (e.g. .block / .gr-block, .gr-button-primary / button.primary)
* we list both so the rule still bites.
*/
/* ── Root: font, page bg, smoothing ──────────────────────────────────── */
body, html { overflow-x: hidden !important; }
.gradio-container {
font-family: 'Inter', system-ui, -apple-system, sans-serif !important;
font-feature-settings: "ss01", "cv02", "cv11"; /* Inter numeral variants */
-webkit-font-smoothing: antialiased;
max-width: 100% !important;
width: 100% !important;
overflow-x: hidden !important;
padding-left: 40px !important;
padding-right: 40px !important;
margin: 0 auto !important;
}
.gradio-container, .gradio-container * { letter-spacing: -0.003em; }
/* ── Header row (#atman-header-row β€” lang pill, sits ABOVE hero) ─────── */
#atman-header-row {
display: flex !important;
justify-content: flex-end !important;
align-items: center !important;
padding: 16px 24px 0 !important;
margin: 0 !important;
gap: 0 !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
#atman-header-row > .block,
#atman-header-row > .gr-block,
#atman-header-row > .form,
#atman-header-row > div {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
flex: 0 0 auto !important;
min-width: 0 !important;
width: auto !important;
}
/* ── Hero column (#atman-hero β€” wraps H1 + header_md) ────────────────── */
#atman-hero { padding: 32px 0 16px; text-align: center; }
/* Strip card chrome from descriptive Markdown blocks inside hero */
#atman-hero > .block,
#atman-hero > .gr-block,
#atman-hero .markdown,
#atman-hero > div > .markdown {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
/* The H1 lives inside the first gr.Markdown β€” target its rendered h1 */
#atman-hero .gr-block:first-child h1,
#atman-hero .markdown h1,
#atman-hero h1 {
font-size: clamp(34px, 4.6vw, 50px) !important;
font-weight: 700 !important;
letter-spacing: -0.02em !important;
line-height: 1.05 !important;
margin: 0 auto 18px !important;
background: linear-gradient(120deg, #4F46E5 0%, #8B5CF6 100%);
-webkit-background-clip: text; background-clip: text;
color: transparent !important;
display: inline-block !important;
}
/* The blurb (#atman-header-md) β€” neutral grey, larger line-height */
#atman-header-md, #atman-header-md p {
font-size: 15.5px !important;
line-height: 1.7 !important;
color: #64748B !important;
max-width: 720px;
margin: 0 auto !important;
}
:is(.dark, html.dark, body.dark) #atman-header-md,
:is(.dark, html.dark, body.dark) #atman-header-md p { color: #94A3B8 !important; }
#atman-header-md em {
color: var(--body-text-color-subdued, #94A3B8) !important;
display: block !important; margin-top: 10px;
font-size: 14px !important; font-style: italic !important;
}
/* Strong contrast for bold/emph text β€” uses Gradio theme var so it auto-swaps
between light and dark mode without relying on .dark/html.dark selectors. */
.atman-emph,
#atman-header-md b,
#atman-header-md strong,
#atman-header-md [class*="bold"] {
color: var(--body-text-color, #F8FAFC) !important;
font-weight: 700 !important;
}
/* ── Hero inline-SVG diagram (#atman-hero-diagram-wrap > .atman-hero-diagram) ── */
#atman-hero-diagram-wrap {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
.atman-hero-diagram {
max-width: 100%;
width: 100%;
margin: 36px auto 0;
padding: 22px;
background: var(--block-background-fill, #13131F) !important;
border: 1px solid var(--block-border-color, #1F2937) !important;
border-radius: 14px;
box-shadow: var(--shadow-card, 0 1px 2px rgba(0,0,0,0.30));
color: var(--body-text-color-subdued, #94A3B8);
}
.atman-hero-diagram svg { display: block; width: 100%; height: auto; }
.atman-hero-diagram-caption {
font: 500 11px/1 'JetBrains Mono', 'SF Mono', Menlo, monospace;
letter-spacing: 0.08em;
text-transform: uppercase;
color: #94A3B8;
margin-top: 14px;
text-align: center;
}
:is(.dark, html.dark, body.dark) .atman-hero-diagram-caption { color: #64748B; }
/* Language radio pill β€” sits in its own row above hero, no absolute position */
#atman-lang {
background: #FFFFFF; border: 1px solid #E5E7EB;
border-radius: 999px; padding: 3px;
box-shadow: 0 1px 2px rgba(15,23,42,0.04);
min-width: 0 !important; width: auto !important;
}
.dark #atman-lang { background: #13131F; border-color: #1F2937; }
#atman-lang label {
font-family: 'JetBrains Mono', monospace !important;
font-size: 12px !important; letter-spacing: 0.03em !important;
padding: 7px 14px !important; border-radius: 999px !important;
border: none !important; background: transparent !important;
color: #64748B !important; margin: 0 !important; cursor: pointer;
}
#atman-lang label.selected,
#atman-lang label:has(input:checked) {
background: #4F46E5 !important; color: #FFFFFF !important;
}
.dark #atman-lang label:has(input:checked) { background: #6366F1 !important; }
#atman-lang input[type="radio"] { display: none !important; }
#atman-lang > .label,
#atman-lang > div > .block-label,
#atman-lang > div > .block-info { display: none !important; }
#atman-lang .form, #atman-lang .wrap, #atman-lang .options {
background: transparent !important;
border: none !important;
padding: 0 !important;
}
/* ── Warmup row (#atman-warmup-row) ──────────────────────────────────── */
#atman-warmup-row {
margin: 8px 0 24px !important;
display: grid !important;
grid-template-columns: auto 1fr !important;
gap: 12px !important;
align-items: stretch !important;
}
#atman-warmup-btn {
background: transparent !important;
color: #4F46E5 !important;
border: 1px solid #4F46E5 !important;
border-radius: 8px !important;
padding: 12px 20px !important;
font-weight: 500 !important;
height: auto !important;
min-height: 0 !important;
}
.dark #atman-warmup-btn {
color: #A5B4FC !important;
border-color: #6366F1 !important;
}
#atman-warmup-btn:hover { background: rgba(79,70,229,0.08) !important; }
.dark #atman-warmup-btn:hover { background: rgba(99,102,241,0.12) !important; }
/* Status Textbox β€” strip textarea chrome, render as inline info pill */
#atman-warmup-log textarea {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
font: 500 13px/1.4 'Inter', sans-serif !important;
color: #0F172A !important;
resize: none !important;
min-height: 0 !important;
overflow: hidden !important;
}
.dark #atman-warmup-log textarea { color: #E2E8F0 !important; }
#atman-warmup-log {
display: flex !important;
align-items: center !important;
padding: 12px 16px !important;
}
#atman-warmup-log > .block-label {
text-transform: uppercase !important;
letter-spacing: 0.06em !important;
font-size: 11px !important;
color: #64748B !important;
background: transparent !important;
padding: 0 12px 0 0 !important;
margin: 0 !important;
border-right: 1px solid #E5E7EB !important;
display: inline-flex !important;
align-items: center !important;
height: 100%;
}
.dark #atman-warmup-log > .block-label {
color: #94A3B8 !important;
border-right-color: #1F2937 !important;
}
/* ── Tabs (.tabs > .tab-nav) ─────────────────────────────────────────── */
.tabs > .tab-nav {
border-bottom: 1px solid #E5E7EB !important;
gap: 4px !important;
padding: 0 4px !important;
}
.dark .tabs > .tab-nav { border-bottom-color: #1F2937 !important; }
.tabs > .tab-nav button {
background: transparent !important;
border: none !important;
border-bottom: 2px solid transparent !important;
margin-bottom: -1px !important;
padding: 16px 20px !important;
font-size: 14px !important;
font-weight: 500 !important;
color: #64748B !important;
transition: color .15s, border-color .15s;
}
.tabs > .tab-nav button:hover { color: #0F172A !important; }
.dark .tabs > .tab-nav button:hover { color: #E2E8F0 !important; }
.tabs > .tab-nav button.selected,
.tabs > .tab-nav button[aria-selected="true"] {
color: #4F46E5 !important;
border-bottom-color: #4F46E5 !important;
font-weight: 600 !important;
}
.dark .tabs > .tab-nav button.selected,
.dark .tabs > .tab-nav button[aria-selected="true"] {
color: #818CF8 !important;
border-bottom-color: #6366F1 !important;
}
.tabs > .tabitem,
.tabs .tabitem-content { padding: 32px 0 !important; }
/* ── About-this-tab accordions (.atman-about-accordion) ──────────────── */
.atman-about-accordion,
.gr-accordion.atman-about-accordion {
border: 1px solid #E5E7EB !important;
border-radius: 8px !important;
background: #FFFFFF !important;
margin-bottom: 10px !important;
overflow: hidden !important;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
/* Target the exact Gradio accordion content panel (display:none β†’ block on open) */
.atman-about-accordion [data-testid="accordion-content"] {
overflow: hidden !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
/* Constrain the Gradio column wrapper inside the content panel */
.atman-about-accordion [data-testid="accordion-content"] > .column,
.atman-about-accordion .column {
max-width: 100% !important;
overflow: hidden !important;
min-width: 0 !important;
box-sizing: border-box !important;
}
/* Constrain inner block wrappers */
.atman-about-accordion .block,
.atman-about-accordion .wrap,
.atman-about-accordion .html-container {
max-width: 100% !important;
overflow-x: hidden !important;
min-width: 0 !important;
box-sizing: border-box !important;
}
/* Prevent long prose lines from pushing layout */
.atman-about-accordion .prose,
.atman-about-accordion .markdown,
.atman-about-accordion p,
.atman-about-accordion li,
.atman-about-accordion pre {
max-width: 100% !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
.dark .atman-about-accordion,
html.dark .atman-about-accordion {
border-color: #1F2937 !important;
background: #13131F !important;
}
html.dark .atman-about-accordion .markdown,
html.dark .atman-about-accordion p,
html.dark .atman-about-accordion li { color: #94A3B8 !important; }
html.dark .atman-about-accordion b,
html.dark .atman-about-accordion strong { color: #E2E8F0 !important; }
html.dark .atman-about-accordion summary,
html.dark .atman-about-accordion > .label-wrap { color: #E2E8F0 !important; }
html.dark .atman-about-accordion blockquote { background: rgba(99,102,241,0.10) !important; }
.atman-about-accordion summary,
.atman-about-accordion > .label-wrap,
.atman-about-accordion > button {
padding: 7px 12px !important;
gap: 8px !important;
font-size: 12px !important;
font-weight: 500 !important;
min-height: 34px !important;
color: var(--body-text-color, #0F172A) !important;
cursor: pointer;
}
.atman-about-accordion summary svg,
.atman-about-accordion .label-wrap svg {
color: #4F46E5 !important;
width: 14px !important;
height: 14px !important;
transition: transform .18s ease;
}
.atman-about-accordion[open] summary svg,
.atman-about-accordion.open .label-wrap svg { transform: rotate(90deg); }
.atman-about-accordion > div:not(.label-wrap),
.atman-about-accordion .accordion-content {
padding: 4px 12px 12px 28px !important;
}
.atman-about-accordion .markdown,
.atman-about-accordion p,
.atman-about-accordion li {
font-size: 14px !important;
line-height: 1.65 !important;
color: var(--body-text-color-subdued, #475569) !important;
}
.atman-about-accordion b,
.atman-about-accordion strong,
.atman-about-accordion [class*="bold"] {
color: var(--body-text-color, #F8FAFC) !important;
font-weight: 700 !important;
}
.atman-about-accordion blockquote {
margin: 14px 0 0 !important;
padding: 12px 16px !important;
border-left: 2px solid #4F46E5 !important;
background: rgba(79,70,229,0.06) !important;
border-radius: 0 6px 6px 0 !important;
font-size: 13px !important;
color: #1E293B !important;
}
:is(.dark, html.dark, body.dark) .atman-about-accordion blockquote {
background: rgba(99,102,241,0.12) !important;
color: #E2E8F0 !important;
}
/* Kill nested .block chrome inside accordions β€” single container, no doubled rims */
.atman-about-accordion .block,
.atman-about-accordion .gr-block,
.atman-about-accordion .markdown,
.atman-about-accordion .html,
.atman-about-accordion .prose {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
/* ── Dropdowns (preset selectors) ────────────────────────────────────── */
.gr-dropdown, .gradio-dropdown, .dropdown {
padding: 12px 14px !important;
border-radius: 8px !important;
border: 1px solid #E5E7EB !important;
background: #FFFFFF !important;
transition: border-color .15s, box-shadow .15s;
}
.dark .gr-dropdown,
.dark .gradio-dropdown,
.dark .dropdown {
border-color: #1F2937 !important;
background: #13131F !important;
}
.gr-dropdown:focus-within,
.gradio-dropdown:focus-within,
.dropdown:focus-within {
border-color: #4F46E5 !important;
box-shadow: 0 0 0 2px rgba(79,70,229,0.28) !important;
outline: none !important;
}
.dark .gr-dropdown:focus-within,
.dark .dropdown:focus-within {
border-color: #6366F1 !important;
box-shadow: 0 0 0 2px rgba(99,102,241,0.36) !important;
}
.gr-dropdown ul li,
.gradio-dropdown ul li,
.dropdown ul li {
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace !important;
font-size: 13px !important;
}
/* ── Result blocks (every Textbox/Markdown/JSON/etc) ─────────────────── */
.block, .gr-block {
border-radius: 12px !important;
border: 1px solid #E5E7EB !important;
box-shadow: 0 1px 2px rgba(15,23,42,0.04) !important;
padding: 20px 22px !important;
}
.dark .block, .dark .gr-block {
border-color: #1F2937 !important;
box-shadow: 0 1px 2px rgba(0,0,0,0.3) !important;
}
/* Block labels float ABOVE the block card β€” only for top-level blocks, not inside report group */
.gradio-container .block:has([data-testid="block-label"]):not(.atman-report-group *):not(.atman-about-accordion):not(.atman-about-accordion *) {
position: relative !important;
overflow: visible !important;
margin-top: 26px !important;
}
/* Kill block-labels inside the report group β€” no floating artifacts */
.atman-report-group [data-testid="block-label"],
.atman-report-group .block-label {
display: none !important;
}
/* Label: position above the border, text-only */
.gradio-container [data-testid="block-label"],
.gradio-container .block > .block-label,
.gradio-container .block > label.block-label {
position: absolute !important;
top: -20px !important;
left: 0 !important;
text-transform: uppercase !important;
letter-spacing: 0.06em !important;
font-size: 10px !important;
font-weight: 500 !important;
color: var(--body-text-color-subdued, #64748B) !important;
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace !important;
background: transparent !important;
padding: 0 !important;
margin: 0 !important;
border: none !important;
border-radius: 0 !important;
box-shadow: none !important;
display: block !important;
white-space: nowrap !important;
line-height: 1 !important;
}
/* Kill SVG/icon artifact β€” text label only */
.gradio-container [data-testid="block-label"] > span,
.gradio-container [data-testid="block-label"] svg {
display: none !important;
}
/* HighlightedText β€” Gradio 6 actual svelte class names */
/* Reorder: text first, legend second (DOM has legend before textfield) */
.atman-highlight .container.svelte-1akrbo3 {
display: flex !important;
flex-direction: column !important;
}
/* Text block floats to top */
.atman-highlight .textfield.svelte-1akrbo3 {
order: 1 !important;
line-height: 1.6 !important;
font-size: 14px !important;
}
/* Token pill */
.atman-highlight .token.svelte-1akrbo3 {
border-radius: 4px !important;
padding: 1px 6px !important;
font-size: 13.5px !important;
box-shadow: none !important;
}
/* Legend moves to bottom with separator */
.atman-highlight .legend.svelte-1akrbo3 {
order: 2 !important;
display: flex !important;
gap: 8px !important;
flex-wrap: wrap !important;
align-items: center !important;
margin-top: 10px !important;
padding-top: 8px !important;
border-top: 1px solid var(--block-border-color, #2D2F3E) !important;
}
/* Legend chips β€” keep inline background-color (set by Gradio), just tighten appearance */
.atman-highlight .legend-item.svelte-1akrbo3 {
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace !important;
font-size: 10px !important;
font-weight: 600 !important;
letter-spacing: 0.07em !important;
text-transform: uppercase !important;
color: var(--body-text-color) !important;
border: none !important;
box-shadow: none !important;
padding: 2px 8px !important;
border-radius: 4px !important;
cursor: default !important;
}
/* ── gr.JSON output (replaces gr.Label for classification) ───────────── */
.json-holder,
.gr-json,
[data-testid="json"] {
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace !important;
font-size: 13px !important;
line-height: 1.75 !important;
background: #F8FAFC !important;
border: 1px solid #E5E7EB !important;
border-radius: 8px !important;
padding: 16px 18px !important;
color: #0F172A !important;
}
.dark .json-holder,
.dark .gr-json,
.dark [data-testid="json"] {
background: #0F0F1B !important;
border-color: #1F2937 !important;
color: #E2E8F0 !important;
}
/* react-json-tree node colours */
.json-holder .object-key,
.json-holder [class*="object-key"] { color: #64748B !important; }
.dark .json-holder .object-key { color: #94A3B8 !important; }
.json-holder .string,
.json-holder [class*="string-value"] { color: #059669 !important; }
.dark .json-holder .string { color: #10B981 !important; }
.json-holder .number { color: #F59E0B !important; }
.json-holder .punctuation,
.json-holder span[role="presentation"] { color: #94A3B8 !important; }
/* ── Dataframe (Relations tab) ───────────────────────────────────────── */
.gr-dataframe table {
border-collapse: separate !important;
border-spacing: 0;
}
.gr-dataframe th {
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 11px;
font-weight: 500;
color: #64748B !important;
background: #F8FAFC !important;
border-bottom: 1px solid #E5E7EB !important;
}
.dark .gr-dataframe th {
background: #0F0F1B !important;
color: #94A3B8 !important;
border-bottom-color: #1F2937 !important;
}
.gr-dataframe td {
font-size: 13px;
padding: 10px 14px !important;
}
/* ── Buttons ─────────────────────────────────────────────────────────── */
.gr-button,
button.lg,
button.primary,
button.secondary {
font-weight: 500 !important;
border-radius: 8px !important;
padding: 7px 18px !important;
min-height: 36px !important;
letter-spacing: -0.005em !important;
transition: background .18s, box-shadow .18s, transform .05s !important;
}
.gr-button:active, button.lg:active { transform: translateY(1px); }
.gr-button-primary,
button.primary,
[data-variant="primary"] {
background: #4F46E5 !important;
color: #FFFFFF !important;
border: none !important;
box-shadow: none !important;
}
.dark .gr-button-primary,
.dark button.primary,
.dark [data-variant="primary"] { background: #6366F1 !important; }
.gr-button-primary:hover,
button.primary:hover {
background: linear-gradient(135deg, #4F46E5 0%, #8B5CF6 100%) !important;
box-shadow: 0 2px 8px rgba(79,70,229,0.18) !important;
}
.dark .gr-button-primary:hover,
.dark button.primary:hover {
background: linear-gradient(135deg, #6366F1 0%, #A78BFA 100%) !important;
box-shadow: 0 2px 12px rgba(99,102,241,0.24) !important;
}
.gr-button-secondary,
button.secondary {
background: transparent !important;
border: 1px solid #4F46E5 !important;
color: #4F46E5 !important;
}
.dark .gr-button-secondary,
.dark button.secondary {
border-color: #6366F1 !important;
color: #A5B4FC !important;
}
.gr-button-secondary:hover,
button.secondary:hover { background: rgba(79,70,229,0.08) !important; }
.dark .gr-button-secondary:hover { background: rgba(99,102,241,0.12) !important; }
/* ── Detailed Analysis Report group (.atman-report-group) ────────────── */
.atman-report-group,
.atman-report-group.generating,
.atman-report-group[data-loading],
.atman-report-group:has(.generating) {
padding: 22px !important;
border: 1px solid var(--block-border-color, #1F2937) !important;
border-radius: 12px !important;
background: var(--block-background-fill, #13131F) !important;
box-shadow: var(--shadow-card, none) !important;
}
/* Kill loading shimmer overlay on the group */
.atman-report-group::before,
.atman-report-group::after {
display: none !important;
}
/* The parent .block wrapper around our Group β€” make it transparent so we
don't get a doubled card frame (Gradio adds its own block chrome). */
.gradio-container > * .block:has(> .atman-report-group),
.gradio-container .block:has(.atman-report-group) {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
/* The Group's inner .styler div gets --form-background-fill from Gradio β€” make transparent */
.atman-report-group > .styler,
.atman-report-group .styler.svelte-1p9262q {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
/* Kill nested .block chrome inside the report group β€” single card, no doubled rims. */
.atman-report-group .block,
.atman-report-group .gr-block,
.atman-report-group .styler > .block,
.atman-report-group .markdown,
.atman-report-group .prose {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
overflow: visible !important;
max-height: none !important;
min-height: 0 !important;
}
.atman-report-group .block.padded,
.atman-report-group .styler > .block.padded {
padding: 0 !important;
margin: 0 !important;
}
/* Kill scrollbars on every Markdown subsection inside the report group */
.atman-report-group .atman-sec-hdr,
.atman-report-group .atman-sec-body,
.atman-report-group .atman-sec-hdr *,
.atman-report-group .atman-sec-body * {
overflow: visible !important;
max-height: none !important;
}
/* Same fix globally for any block-level markdown */
.gradio-container .markdown,
.gradio-container .prose,
.gradio-container .md {
overflow: visible !important;
max-height: none !important;
}
.atman-report-group h3,
.atman-report-group > .markdown:first-child h3 {
font-size: 14px !important;
font-weight: 600 !important;
margin: 0 0 14px !important;
color: var(--body-text-color) !important;
padding-bottom: 12px !important;
border-bottom: 1px solid var(--block-border-color) !important;
}
/* Section-header markdown elements (a_boundary_hdr, a_divergence_hdr, a_meta_hdr) */
.atman-report-group .atman-sec-hdr,
.atman-report-group .atman-sec-hdr p {
font-family: 'JetBrains Mono', monospace !important;
font-size: 11px !important;
font-weight: 500 !important;
letter-spacing: 0.05em !important;
text-transform: uppercase !important;
color: var(--body-text-color-subdued, #64748B) !important;
margin: 10px 0 2px !important;
line-height: 1.3 !important;
}
.atman-report-group .atman-sec-body,
.atman-report-group .atman-sec-body p {
font-size: 13px !important;
line-height: 1.5 !important;
color: var(--body-text-color, #E2E8F0) !important;
margin: 0 !important;
}
.atman-meta-block,
.atman-report-group .atman-sec-body.atman-meta-block,
.atman-report-group .atman-sec-body.atman-meta-block p {
font-family: 'JetBrains Mono', monospace !important;
font-size: 12px !important;
color: var(--body-text-color-subdued, #94A3B8) !important;
letter-spacing: 0.02em !important;
line-height: 1.4 !important;
}
/* ── gr.Code (JSON output) β€” flat <pre> on block background ──────────── */
/* Outer wrapper takes the theme background β€” CodeMirror internals are
transparent so they can't override with their own injected styles. */
.atman-json-code {
background: var(--block-background-fill, #1e1e2e) !important;
border: 1px solid var(--block-border-color, #E5E7EB) !important;
border-radius: 8px !important;
}
.atman-json-code > .block {
background: transparent !important;
border: none !important;
}
.atman-json-code .codemirror-wrapper,
.atman-json-code .code-wrap,
.atman-json-code .cm-editor,
.atman-json-code .cm-scroller,
.atman-json-code .cm-content,
.atman-json-code .cm-gutters,
.atman-json-code pre {
background: transparent !important;
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace !important;
font-size: 13px !important;
line-height: 1.6 !important;
color: var(--body-text-color, #E2E8F0) !important;
}
/* Hide all chrome inside gr.Code: line numbers, copy/fullscreen buttons,
language tag, internal block label (we use the wrapper block-label only) */
.atman-json-code .cm-gutters,
.atman-json-code .cm-lineNumbers,
.atman-json-code .cm-foldGutter,
.atman-json-code button,
.atman-json-code .copy-button,
.atman-json-code [aria-label*="opy"],
.atman-json-code [aria-label*="ull"],
.atman-json-code [aria-label*="creen"],
.atman-json-code .language-select,
.atman-json-code [data-testid="code-language"] {
display: none !important;
}
/* String values green, keys muted grey */
.atman-json-code .cm-string,
.atman-json-code .token.string,
.atman-json-code .hljs-string { color: #059669 !important; }
:is(.dark, html.dark, body.dark) .atman-json-code .cm-string,
:is(.dark, html.dark, body.dark) .atman-json-code .token.string,
:is(.dark, html.dark, body.dark) .atman-json-code .hljs-string { color: #10B981 !important; }
.atman-json-code .cm-property,
.atman-json-code .token.property,
.atman-json-code .hljs-attr { color: #64748B !important; }
:is(.dark, html.dark, body.dark) .atman-json-code .cm-property,
:is(.dark, html.dark, body.dark) .atman-json-code .token.property,
:is(.dark, html.dark, body.dark) .atman-json-code .hljs-attr { color: #94A3B8 !important; }
/* ── Generic meta-text markdown (k_meta, r_meta, af_meta) ────────────── */
.atman-meta p, .atman-meta {
font-family: 'JetBrains Mono', monospace !important;
font-size: 12px !important;
font-weight: 500 !important;
color: #94A3B8 !important;
letter-spacing: 0.02em !important;
}
.dark .atman-meta p, .dark .atman-meta { color: #64748B !important; }
/* ── Tab intro markdown (optional, for any tab-top description) ──────── */
.tab-intro p, .tab-intro {
font-size: 14px !important;
line-height: 1.65 !important;
color: #64748B !important;
max-width: 720px;
}
.dark .tab-intro p, .dark .tab-intro { color: #94A3B8 !important; }
.tab-intro b { color: #0F172A !important; font-weight: 600 !important; }
.dark .tab-intro b { color: #E2E8F0 !important; }
/* ── Whitespace rhythm β€” tight, just enough to keep block borders distinct ── */
.gradio-container .gr-form > * + * { margin-top: 6px !important; }
.gradio-container > .block + .block,
.gradio-container > .gr-form + .gr-form { margin-top: 8px !important; }
.gradio-container .row,
.gradio-container .gr-row { gap: 16px !important; }
.gradio-container .column,
.gradio-container .gr-column { gap: 6px !important; }
.tabs > .tabitem,
.tabs .tabitem-content { padding: 12px 0 !important; }
.atman-about-accordion { margin-bottom: 10px !important; }
#atman-hero + * { margin-top: 4px !important; }
/* ── Kill empty-state placeholders (aa / </> icons) ─────────────────────
Gradio 6 scopes .empty with a svelte hash (.empty.svelte-v95lt3 { display: flex })
which beats a plain attribute selector. Must include the scoped class OR
use !important on a more specific rule. Belt-and-suspenders: all known forms. */
div[aria-label="Empty value"],
div[aria-label="Empty value"].svelte-v95lt3,
.empty.svelte-v95lt3,
.gradio-container .empty,
.gradio-container [class*="empty-state"],
.gradio-container .empty-holder {
display: none !important;
}
/* ── Footer (gr.HTML #atman-footer) ──────────────────────────────────── */
#atman-footer {
text-align: center;
padding: 32px 0 24px;
border-top: 1px solid #E5E7EB;
margin-top: 48px;
font-size: 13px;
color: #94A3B8;
}
.dark #atman-footer {
border-top-color: #1F2937;
color: #64748B;
}
#atman-footer a {
color: #4F46E5;
text-decoration: none;
font-weight: 500;
}
.dark #atman-footer a { color: #818CF8; }
#atman-footer a:hover { text-decoration: underline; }
#atman-footer em {
font-style: italic;
color: #94A3B8;
display: block;
max-width: 560px;
margin: 0 auto 8px;
}
.dark #atman-footer em { color: #64748B; }
#atman-footer .atman-privacy {
display: block;
max-width: 640px;
margin: 14px auto 16px;
font-size: 11px;
line-height: 1.5;
color: #B0B8C4;
opacity: 0.85;
}
.dark #atman-footer .atman-privacy { color: #475569; }
/* ─────────────────────────────────────────────────────────────────────────
* Pair diagram (.apd-*) β€” used inside About accordions per tab.
* Mirrors the full architecture diagram, one row per tab.
* ───────────────────────────────────────────────────────────────────────── */
.apd-pair {
display: grid;
grid-template-columns: 1fr 64px 1fr;
gap: 0;
align-items: stretch;
margin: 4px 0 18px;
max-width: 720px;
}
.apd-card {
position: relative;
background: linear-gradient(180deg, #FFFFFF 0%, #F8FAFC 100%);
border: 1px solid #E5E7EB;
border-radius: 10px;
padding: 12px 14px 12px 18px;
box-shadow: 0 1px 2px rgba(15,23,42,0.04);
display: flex;
align-items: center;
}
.dark .apd-card {
background: linear-gradient(180deg, #131826 0%, #0F1421 100%);
border-color: #2B3447;
box-shadow: 0 2px 4px rgba(0,0,0,0.25), 0 1px 0 rgba(255,255,255,0.03) inset;
}
.apd-stripe {
position: absolute;
left: 0; top: 0; bottom: 0;
width: 3px;
border-radius: 10px 0 0 10px;
}
.apd-left .apd-stripe { background: #4F46E5; box-shadow: 0 0 12px rgba(79,70,229,0.35); }
.apd-right .apd-stripe { background: #8B5CF6; box-shadow: 0 0 12px rgba(139,92,246,0.35); }
.dark .apd-left .apd-stripe { background: #6366F1; box-shadow: 0 0 12px rgba(99,102,241,0.45); }
.dark .apd-right .apd-stripe { background: #A78BFA; box-shadow: 0 0 12px rgba(167,139,250,0.45); }
.apd-card-body { width: 100%; }
.apd-card-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.apd-name {
font-family: 'Inter', system-ui, sans-serif;
font-size: 14px;
font-weight: 600;
color: #0F172A;
letter-spacing: -0.01em;
line-height: 1.2;
}
.dark .apd-name { color: #F3F4F6; }
.apd-sub {
margin-top: 4px;
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
font-size: 11px;
color: #64748B;
letter-spacing: 0.01em;
}
.dark .apd-sub { color: #9CA3AF; }
.apd-tag {
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
font-size: 10px;
color: #64748B;
padding: 2px 6px;
border: 1px solid #E5E7EB;
border-radius: 4px;
background: #FFFFFF;
flex-shrink: 0;
letter-spacing: 0.02em;
white-space: nowrap;
}
.dark .apd-tag {
color: #6B7280;
border-color: #2B3447;
background: rgba(255,255,255,0.02);
}
.apd-arrow {
display: flex;
align-items: center;
justify-content: center;
gap: 0;
padding: 0 4px;
}
.apd-arrow-line {
flex: 1 1 auto;
height: 2px;
background: linear-gradient(90deg, #6366F1 0%, #A855F7 100%);
border-radius: 1px;
box-shadow: 0 0 8px rgba(139,92,246,0.25);
margin-right: -1px;
}
.dark .apd-arrow-line {
background: linear-gradient(90deg, #818CF8 0%, #C084FC 100%);
box-shadow: 0 0 10px rgba(167,139,250,0.40);
}
.apd-arrow-head {
width: 0;
height: 0;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 7px solid #A855F7;
flex-shrink: 0;
}
.dark .apd-arrow-head { border-left-color: #C084FC; }
/* Responsive: stack on narrow viewports */
@media (max-width: 640px) {
.apd-pair {
grid-template-columns: 1fr;
gap: 8px;
}
.apd-arrow {
transform: rotate(90deg);
width: 56px;
height: 16px;
margin: 0 auto;
}
}