gwoe-antragspruefer/app/static/v2/v2.css
Dotty Dotter 88f9c7db6c fix: PDF-Endpoint setzt OpenAction auf gefundene Seite + Topbar weiter komprimiert
Vorher: /api/wahlprogramm-cite lieferte das gesamte PDF mit Highlight-Annot
auf der gefundenen Seite, aber der Browser-PDF-Viewer landete auf Seite 1.
Sieht User: 'PDF oeffnet, aber falsche Seite'.

Jetzt: doc.xref_set_key(catalog, 'OpenAction', '[<page-ref> 0 R /Fit]')
schreibt eine PDF-Open-Action ins Dokument-Catalog. Reader springt beim
Oeffnen direkt auf target_page_idx, ohne dass Browser-Hash-Anker noetig sind.

Plus: Topbar select/button padding-top/bottom 1px, links 0px (User: 'nur so
hoch wie noetig').

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:06:39 +02:00

1057 lines
23 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.

/*
* v2.css — Base-Styles für GWÖ-Antragsprüfer v2
* Alle Regeln leben unter dem Scope "body.v2" und kollidieren nicht
* mit dem bestehenden v1-Frontend.
*
* Abhängigkeiten: tokens.css (zuerst laden), fonts.css
*/
/* ── Phosphor Icons ─────────────────────────────────────────────── */
.v2-icon {
display: inline-flex;
flex-shrink: 0;
vertical-align: middle;
}
.v2-icon svg {
display: block;
width: 100%;
height: 100%;
fill: currentColor;
}
/* ── Reset & Box Model ──────────────────────────────────────────── */
body.v2 *, body.v2 *::before, body.v2 *::after {
box-sizing: border-box;
}
body.v2 {
margin: 0;
padding: 0;
font-family: var(--font-sans);
font-size: 15px;
line-height: 1.55;
color: var(--ecg-dark);
background: var(--paper);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body.v2 a {
color: var(--ecg-blue);
text-decoration: none;
border-bottom: 1px solid rgba(0, 157, 165, 0.35);
}
body.v2 a:hover {
border-bottom-color: var(--ecg-blue);
}
body.v2 :focus-visible {
outline: 2px solid var(--ecg-blue);
outline-offset: 2px;
}
/* ── App-Shell Layout ───────────────────────────────────────────── */
.v2-shell {
display: grid;
grid-template-rows: auto 1fr auto;
grid-template-columns: var(--sidebar-width) 1fr;
grid-template-areas:
"sidebar topbar"
"sidebar main"
"sidebar footer";
min-height: 100vh;
}
.v2-topbar {
grid-area: topbar;
background: var(--paper);
border-bottom: 1px solid var(--hairline);
padding: 2px 24px;
display: flex;
align-items: center;
gap: var(--space-4);
font-family: var(--font-mono);
font-size: 11px;
line-height: 1.2;
color: var(--ecg-dark);
}
.v2-topbar select,
.v2-topbar button {
padding-top: 1px;
padding-bottom: 1px;
margin: 0;
}
.v2-topbar a { padding: 0; }
.v2-topbar-spacer {
flex: 1;
}
.v2-topbar a {
color: var(--ecg-dark);
border-bottom: none;
opacity: 0.75;
letter-spacing: 0.06em;
text-transform: uppercase;
display: inline-flex;
align-items: center;
gap: 4px;
}
.v2-topbar a:hover {
opacity: 1;
color: var(--ecg-blue);
border-bottom: none;
}
.v2-topbar .v2-beta-link {
color: var(--ecg-green);
font-weight: 700;
opacity: 1;
border-bottom: 1px solid var(--ecg-green);
}
/* ── Sidebar ────────────────────────────────────────────────────── */
.v2-sidebar {
grid-area: sidebar;
width: var(--sidebar-width);
background: var(--paper);
border-right: 1px solid var(--hairline);
padding: 22px 18px;
overflow-y: auto;
position: sticky;
top: 0;
height: 100vh;
}
.v2-brand {
font-family: var(--font-sans);
font-weight: 900;
font-size: 18px;
text-transform: uppercase;
color: var(--ecg-dark);
letter-spacing: 0;
line-height: 1.05;
}
.v2-brand .grn { color: var(--ecg-green); }
.v2-brand .blu { color: var(--ecg-blue); }
.v2-brand-sub {
font-family: var(--font-mono);
font-size: 10px;
color: var(--ecg-dark);
letter-spacing: 0.1em;
text-transform: uppercase;
margin: 6px 0 26px;
opacity: 0.7;
}
.v2-nav-group {
margin-bottom: 20px;
}
.v2-nav-label {
font-family: var(--font-sans);
font-weight: 900;
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--ecg-green);
margin-bottom: 6px;
padding: 0 4px;
}
.v2-nav-item {
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
padding: 7px 10px;
color: var(--ecg-dark);
font-size: 13px;
font-weight: 400;
position: relative;
cursor: pointer;
text-decoration: none;
border-bottom: none;
}
.v2-nav-item:hover {
background: var(--surface);
border-bottom: none;
}
.v2-nav-item.active {
background: var(--ecg-blue);
color: #fff;
font-weight: 900;
}
.v2-nav-item.active:hover {
background: var(--ecg-blue);
}
.v2-nav-count {
font-family: var(--font-mono);
font-size: 11px;
color: var(--ecg-light);
}
.v2-nav-item.active .v2-nav-count {
color: #fff;
opacity: 0.85;
}
/* ── Main Content ───────────────────────────────────────────────── */
.v2-main {
grid-area: main;
padding: 24px 28px;
background: var(--paper);
min-width: 0;
}
/* ── Footer ─────────────────────────────────────────────────────── */
.v2-footer {
grid-area: footer;
padding: 18px 24px;
border-top: 1px solid var(--hairline);
font-family: var(--font-mono);
font-size: 11px;
color: var(--ecg-dark);
letter-spacing: 0.04em;
display: flex;
gap: 20px;
flex-wrap: wrap;
opacity: 0.75;
background: var(--paper);
}
.v2-footer a {
color: var(--ecg-dark);
border-bottom: none;
opacity: 0.75;
}
.v2-footer a:hover {
opacity: 1;
color: var(--ecg-blue);
border-bottom: none;
}
/* ── Typografie-Skala (Manual) ──────────────────────────────────── */
body.v2 .v2-title {
font-family: var(--font-sans);
font-weight: 900;
font-size: 52px;
line-height: 1.02;
letter-spacing: -0.005em;
text-transform: uppercase;
color: var(--ecg-dark);
margin: 0;
}
body.v2 .v2-overtitle {
font-family: var(--font-sans);
font-weight: 300;
font-size: 22px;
text-transform: uppercase;
color: var(--ecg-dark);
letter-spacing: 0.01em;
margin: 4px 0 0;
}
body.v2 h1, body.v2 .v2-h1 {
font-family: var(--font-sans);
font-weight: 900;
font-size: 26px;
line-height: 1.2;
margin: 0 0 8px;
text-transform: uppercase;
color: var(--ecg-dark);
letter-spacing: 0.005em;
}
body.v2 h2, body.v2 .v2-h2 {
font-family: var(--font-sans);
font-weight: 900;
font-size: 18px;
line-height: 1.25;
margin: 0 0 8px;
color: var(--ecg-dark);
}
body.v2 h3, body.v2 .v2-h3 {
font-family: var(--font-sans);
font-weight: 900;
font-size: 13px;
letter-spacing: 0.04em;
text-transform: uppercase;
color: var(--ecg-dark);
margin: 0 0 6px;
}
body.v2 p {
margin: 0 0 14px;
max-width: 72ch;
text-wrap: pretty;
}
body.v2 strong, body.v2 b {
font-weight: 900;
color: var(--ecg-dark);
}
/* ── Toolbar / Filter-Row ───────────────────────────────────────── */
.v2-toolbar {
display: flex;
gap: 8px;
align-items: center;
padding-bottom: 14px;
border-bottom: 1px solid var(--hairline);
margin-bottom: 14px;
flex-wrap: wrap;
position: sticky;
top: 0;
background: var(--paper);
z-index: 10;
}
.v2-toolbar-sep { flex: 1; }
.v2-search {
flex: 1;
min-width: 180px;
border: 1px solid var(--hairline);
padding: 8px 12px;
font-size: 13px;
color: var(--ecg-dark);
font-family: var(--font-sans);
background: var(--paper);
outline: none;
}
.v2-search:focus {
border-color: var(--ecg-blue);
}
/* ── Chip ───────────────────────────────────────────────────────── */
.v2-chip {
border: 1px solid var(--hairline);
background: var(--paper);
padding: 5px 11px;
font-size: 12px;
color: var(--ecg-dark);
font-family: var(--font-sans);
font-weight: 400;
cursor: pointer;
white-space: nowrap;
display: inline-block;
}
.v2-chip:hover {
border-color: var(--ecg-light);
background: var(--surface);
}
.v2-chip.active,
.v2-chip[data-active="true"] {
background: var(--ecg-dark);
color: #fff;
border-color: var(--ecg-dark);
font-weight: 900;
}
.v2-chip.green.active,
.v2-chip.green[data-active="true"] {
background: var(--ecg-green);
border-color: var(--ecg-green);
color: #fff;
}
.v2-chip.dark.active,
.v2-chip.dark[data-active="true"] {
background: var(--ecg-dark);
border-color: var(--ecg-dark);
color: #fff;
}
/* ── Result Row ─────────────────────────────────────────────────── */
.v2-result-row {
display: grid;
grid-template-columns: 72px 1fr 140px 90px;
gap: 18px;
padding: 14px 4px;
border-bottom: 1px solid var(--hairline);
align-items: center;
cursor: pointer;
text-decoration: none;
color: inherit;
}
.v2-result-row:hover {
background: var(--surface);
}
.v2-score-cell {
font-family: var(--font-sans);
font-weight: 900;
font-size: 22px;
text-align: center;
padding: 8px 0;
line-height: 1;
letter-spacing: -0.02em;
}
.v2-score-cell small {
display: block;
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.12em;
text-transform: uppercase;
font-weight: 500;
margin-top: 3px;
opacity: 0.75;
}
.v2-score-cell.s-high { background: var(--score-high-bg); color: var(--score-high-fg); }
.v2-score-cell.s-mid { background: var(--score-mid-bg); color: var(--score-mid-fg); }
.v2-score-cell.s-low { background: var(--score-low-bg); color: var(--score-low-fg); }
.v2-r-title {
font-family: var(--font-sans);
font-weight: 900;
font-size: 14.5px;
line-height: 1.3;
color: var(--ecg-dark);
}
.v2-r-sub {
font-family: var(--font-sans);
font-size: 12px;
color: var(--ecg-dark);
margin-top: 4px;
opacity: 0.85;
}
.v2-party-chip {
display: inline-block;
font-family: var(--font-mono);
font-size: 10px;
padding: 2px 6px;
border: 1px solid var(--hairline);
margin-right: 4px;
color: var(--ecg-dark);
letter-spacing: 0.04em;
}
.v2-r-state {
font-family: var(--font-mono);
font-size: 11px;
color: var(--ecg-dark);
opacity: 0.8;
}
.v2-r-date {
font-family: var(--font-mono);
font-size: 11px;
color: var(--ecg-dark);
text-align: right;
opacity: 0.75;
}
/* ── Kasten (4 Varianten aus Manual Seite 13) ───────────────────── */
.v2-kasten {
padding: 18px 22px;
margin: 14px 0;
}
.v2-kasten.solid-green { background: var(--ecg-green); color: #fff; }
.v2-kasten.solid-blue { background: var(--ecg-blue); color: #fff; }
.v2-kasten.outline-green { border: 2px solid var(--ecg-green); color: var(--ecg-green); }
.v2-kasten.outline-blue { border: 2px solid var(--ecg-blue); color: var(--ecg-blue); }
.v2-kasten h4 { color: inherit; margin: 0 0 6px; }
.v2-kasten p { color: inherit; margin: 0; max-width: none; }
/* ── Score Hero ─────────────────────────────────────────────────── */
.v2-score-hero {
display: flex;
align-items: baseline;
gap: 22px;
padding: 20px 0 22px;
border-top: 2px solid var(--ecg-green);
border-bottom: 1px solid var(--hairline);
margin: 4px 0 22px;
}
.v2-score-hero.low {
border-top-color: var(--redline-contra);
}
.v2-score-hero .big-num {
font-family: var(--font-sans);
font-weight: 900;
font-size: 68px;
line-height: 0.9;
color: var(--ecg-green);
letter-spacing: -0.02em;
}
.v2-score-hero.low .big-num {
color: var(--redline-contra);
}
.v2-score-hero .slash {
color: var(--ecg-light);
font-weight: 300;
}
.v2-score-hero .verdict {
font-family: var(--font-sans);
font-size: 15px;
color: var(--ecg-dark);
max-width: 28ch;
line-height: 1.4;
}
.v2-score-hero .verdict b {
color: var(--ecg-green);
font-weight: 900;
text-transform: uppercase;
letter-spacing: 0.02em;
display: block;
font-size: 12px;
margin-bottom: 3px;
}
.v2-score-hero.low .verdict b {
color: var(--redline-contra);
}
/* ── Matrix Mini (5×5) ──────────────────────────────────────────── */
.v2-matrix-mini {
display: grid;
grid-template-columns: 92px repeat(5, 1fr);
gap: 0;
border: 1px solid var(--hairline);
font-size: 11px;
margin: 8px 0 4px;
}
.v2-matrix-mini > div {
padding: 6px 8px;
border-right: 1px solid var(--hairline);
border-bottom: 1px solid var(--hairline);
font-family: var(--font-mono);
text-align: center;
min-height: 30px;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
}
.v2-matrix-mini > div:nth-child(6n) { border-right: 0; }
.v2-matrix-mini > div:nth-last-child(-n+6) { border-bottom: 0; }
.v2-matrix-mini .hdr { background: var(--ecg-blue); color: #fff; font-size: 10px; letter-spacing: 0.04em; font-weight: 700; }
.v2-matrix-mini .rhdr { background: var(--surface); text-align: left; justify-content: flex-start; padding-left: 10px; color: var(--ecg-dark); font-weight: 700; font-family: var(--font-sans); text-transform: uppercase; font-size: 10px; letter-spacing: 0.05em; }
.v2-matrix-mini .m-pp { background: var(--ecg-green); color: #fff; font-weight: 700; }
.v2-matrix-mini .m-p { background: var(--redline-ins-bg); color: var(--ecg-dark); }
.v2-matrix-mini .m-0 { background: var(--paper); color: var(--ecg-light); }
.v2-matrix-mini .m-n { background: var(--redline-del-bg); color: var(--ecg-dark); }
.v2-matrix-mini .m-nn { background: var(--redline-contra); color: #fff; font-weight: 700; }
.v2-matrix-legend {
font-family: var(--font-mono);
font-size: 10px;
color: var(--ecg-dark);
margin: 6px 0 0;
display: flex;
gap: 14px;
opacity: 0.85;
flex-wrap: wrap;
}
/* ── Quote Card ─────────────────────────────────────────────────── */
.v2-quote {
border-left: 3px solid var(--ecg-blue);
padding: 12px 16px;
background: var(--paper);
font-family: var(--font-sans);
font-weight: 400;
font-size: 14px;
color: var(--ecg-dark);
margin: 10px 0;
line-height: 1.5;
}
.v2-quote.contra {
border-left-color: var(--redline-contra);
}
.v2-quote .q-body {
font-style: italic;
}
.v2-quote cite {
display: block;
font-family: var(--font-mono);
font-size: 10px;
font-style: normal;
color: var(--ecg-dark);
margin-top: 8px;
letter-spacing: 0.06em;
text-transform: uppercase;
opacity: 0.85;
}
.v2-quote .verified {
display: inline-block;
color: var(--ecg-green);
font-weight: 700;
margin-right: 8px;
}
.v2-quote.contra .verified {
color: var(--redline-contra);
}
/* ── Redline ────────────────────────────────────────────────────── */
.v2-redline {
font-family: var(--font-mono);
font-size: 12.5px;
background: var(--surface);
padding: 12px 14px;
line-height: 1.6;
border-left: 3px solid var(--ecg-green);
color: var(--ecg-dark);
margin: 8px 0;
}
.v2-redline .del {
background: var(--redline-del-bg);
text-decoration: line-through;
padding: 0 2px;
}
.v2-redline .ins {
background: var(--redline-ins-bg);
padding: 0 2px;
}
/* ── Detail Split Layout ────────────────────────────────────────── */
.v2-detail {
display: grid;
grid-template-columns: 1.25fr 1fr;
gap: 0;
background: var(--paper);
}
.v2-detail .left {
padding: 30px 34px 30px 0;
border-right: 1px solid var(--hairline);
min-width: 0;
}
.v2-detail .right {
padding: 30px 0 30px 34px;
background: var(--surface);
min-width: 0;
}
.v2-antrag-id {
font-family: var(--font-mono);
font-size: 11px;
color: var(--ecg-dark);
letter-spacing: 0.08em;
text-transform: uppercase;
opacity: 0.85;
margin-bottom: 6px;
}
.v2-big-title {
font-family: var(--font-sans);
font-weight: 900;
font-size: 24px;
line-height: 1.2;
margin: 6px 0 8px;
color: var(--ecg-dark);
text-transform: uppercase;
letter-spacing: 0.005em;
}
.v2-byline {
font-family: var(--font-sans);
font-size: 12px;
color: var(--ecg-dark);
margin-bottom: 20px;
opacity: 0.85;
}
/* ── Skeleton Loading ───────────────────────────────────────────── */
@keyframes v2-shimmer {
0% { background-position: -400px 0; }
100% { background-position: 400px 0; }
}
.v2-skeleton {
background: linear-gradient(
90deg,
var(--surface) 25%,
var(--hairline) 50%,
var(--surface) 75%
);
background-size: 800px 100%;
animation: v2-shimmer 1.4s ease-in-out infinite;
border-radius: 2px;
display: inline-block;
}
.v2-skeleton-row {
display: grid;
grid-template-columns: 72px 1fr 140px 90px;
gap: 18px;
padding: 14px 4px;
border-bottom: 1px solid var(--hairline);
align-items: center;
}
/* ── Manual-Aufzählung ──────────────────────────────────────────── */
body.v2 ul.v2-manual {
list-style: none;
padding: 0;
margin: 10px 0 16px;
}
body.v2 ul.v2-manual > li {
position: relative;
padding: 5px 0 5px 24px;
line-height: 1.5;
}
body.v2 ul.v2-manual > li::before {
content: "";
position: absolute;
left: 4px;
top: 13px;
width: 9px;
height: 9px;
background: var(--ecg-blue);
}
body.v2 ul.v2-manual > li.green::before {
background: var(--ecg-green);
}
body.v2 ul.v2-manual ul {
list-style: none;
padding: 0;
margin: 4px 0 4px 4px;
}
body.v2 ul.v2-manual ul li {
position: relative;
padding: 3px 0 3px 22px;
font-size: 14px;
}
body.v2 ul.v2-manual ul li::before {
content: "";
position: absolute;
left: 4px;
top: 3px;
color: var(--ecg-blue);
font-weight: 900;
}
/* ── Responsive: Mobile Drawer ──────────────────────────────────── */
@media (max-width: 900px) {
.v2-shell {
grid-template-columns: 1fr;
grid-template-areas:
"topbar"
"main"
"footer";
}
.v2-sidebar {
display: none;
position: fixed;
top: 0;
left: 0;
height: 100vh;
z-index: 200;
box-shadow: 4px 0 16px rgba(0,0,0,0.12);
}
.v2-sidebar.open {
display: block;
}
.v2-topbar {
position: sticky;
top: 0;
z-index: 100;
}
.v2-result-row {
grid-template-columns: 64px 1fr;
}
.v2-result-row .v2-r-date,
.v2-result-row .v2-r-state {
display: none;
}
.v2-detail {
grid-template-columns: 1fr;
}
.v2-detail .left {
padding: 20px 0;
border-right: 0;
border-bottom: 1px solid var(--hairline);
}
.v2-detail .right {
padding: 20px 0;
}
.v2-matrix-mini {
grid-template-columns: 70px repeat(5, 1fr);
font-size: 10px;
}
.v2-menu-toggle {
display: inline-flex;
}
}
@media (min-width: 901px) {
.v2-menu-toggle {
display: none;
}
}
/* ── Overlay for mobile drawer ──────────────────────────────────── */
.v2-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.3);
z-index: 150;
}
.v2-overlay.open {
display: block;
}
/* ── Button primitives ──────────────────────────────────────────── */
.v2-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 16px;
font-family: var(--font-sans);
font-size: 13px;
font-weight: 700;
cursor: pointer;
border: none;
background: var(--ecg-blue);
color: #fff;
letter-spacing: 0.02em;
text-transform: uppercase;
}
.v2-btn:hover {
background: color-mix(in srgb, var(--ecg-blue) 85%, black);
}
.v2-btn.green {
background: var(--ecg-green);
}
.v2-btn.green:hover {
background: color-mix(in srgb, var(--ecg-green) 85%, black);
}
.v2-btn.outline {
background: transparent;
border: 2px solid var(--ecg-blue);
color: var(--ecg-blue);
}
.v2-btn.outline:hover {
background: var(--ecg-blue);
color: #fff;
}
/* ── Menu Toggle Button ─────────────────────────────────────────── */
.v2-menu-toggle {
padding: 6px 10px;
background: none;
border: 1px solid var(--hairline);
color: var(--ecg-dark);
font-size: 18px;
cursor: pointer;
line-height: 1;
}
/* ── Fraktions-Score-Tabelle (Fix 2+3) ─────────────────────────── */
.v2-fraktions-scores {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 8px;
}
.v2-fraktion-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 6px 8px;
background: var(--paper);
border: 1px solid var(--hairline);
border-radius: 4px;
font-size: 13px;
}
.v2-fraktion-label {
font-family: var(--font-mono);
font-size: 12px;
font-weight: 600;
display: flex;
align-items: center;
gap: 4px;
min-width: 90px;
}
.v2-fraktion-scores {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.v2-score-chip {
display: inline-block;
padding: 2px 7px;
border-radius: 3px;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.02em;
}
.v2-score-chip.chip-green {
background: var(--score-chip-green-bg);
color: var(--score-chip-green-fg);
}
.v2-score-chip.chip-mid {
background: var(--score-chip-mid-bg);
color: var(--score-chip-mid-fg);
}
.v2-score-chip.chip-red {
background: var(--score-chip-red-bg);
color: var(--score-chip-red-fg);
}
.v2-badge-antragsteller,
.v2-badge-regierung {
display: inline-flex;
align-items: center;
justify-content: center;
width: 16px;
height: 16px;
border-radius: 50%;
font-size: 10px;
font-weight: 700;
line-height: 1;
}
.v2-badge-antragsteller {
background: var(--ecg-blue);
color: #fff;
}
.v2-badge-regierung {
background: var(--ecg-green);
color: #fff;
}
/* ── Admin-Screens ──────────────────────────────────────────────────────── */
body.v2 .v2-admin-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
body.v2 .v2-admin-table thead th {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 700;
letter-spacing: .08em;
text-transform: uppercase;
opacity: 0.5;
padding: 6px 10px;
text-align: left;
border-bottom: 1px solid var(--ecg-teal);
}
body.v2 .v2-admin-table tbody tr {
border-bottom: 1px solid rgba(0,0,0,.06);
transition: background .15s;
}
body.v2 .v2-admin-table tbody tr:hover {
background: rgba(0,120,100,.04);
}
body.v2 .v2-admin-table td {
padding: 8px 10px;
vertical-align: middle;
}
body.v2 .v2-admin-btn {
font-family: var(--font-mono);
font-size: 11px;
padding: 4px 10px;
background: var(--ecg-teal);
color: #fff;
border: none;
border-radius: 3px;
cursor: pointer;
transition: opacity .15s;
}
body.v2 .v2-admin-btn:hover { opacity: .8; }
body.v2 .v2-admin-btn:disabled { opacity: .4; cursor: default; }
body.v2 .v2-admin-btn.danger {
background: transparent;
color: var(--ecg-blue);
border: 1px solid var(--ecg-blue);
}
body.v2 .v2-admin-btn.danger:hover { background: var(--ecg-blue); color: #fff; }
body.v2 .v2-admin-badge {
font-family: var(--font-mono);
font-size: 10px;
padding: 2px 6px;
border-radius: 2px;
background: rgba(0,120,100,.12);
color: var(--ecg-teal);
}
body.v2 .v2-admin-badge.running {
background: rgba(0,120,100,.18);
color: var(--ecg-teal);
}