gwoe-antragspruefer/app/static/v2/v2.css
Dotty Dotter 70d9790b4b feat(#177): Programm-Treue im BELEGE-Layout — pro Partei zwei aufklappbare Blöcke (WP+PP)
- _row_to_detail liefert zitate inline pro Wahlprogramm/Parteiprogramm-Block
- Template rendert <details>: Summary mit Score-Chip, Body mit Einschätzung+Belege
- v2.css: neue Klassen v2-treue-block/-label/-body, v2-pill, v2-einschaetzung
- Separate "Belege — Partei"-Sektion entfernt (ist jetzt inline pro Programm)

Tests: tests/test_v2_pdf_consistency.py (#176 generalisiert) bleibt grün —
fraktions_scores trägt zusätzliche zitate-Felder, ändert aber keine
Score/Begründungs-Werte aus dem Vergleich.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 09:21:42 +02:00

1177 lines
26 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: 0 24px;
height: 32px; /* harte Höhe statt min-height */
display: flex;
align-items: center;
gap: var(--space-4);
font-family: var(--font-mono);
font-size: 11px;
line-height: 1;
color: var(--ecg-dark);
}
.v2-topbar > * {
height: auto;
max-height: 24px; /* nichts darin höher als 24 px */
}
.v2-topbar select,
.v2-topbar button,
.v2-topbar a {
padding: 2px 6px;
margin: 0;
line-height: 1;
height: 22px;
display: inline-flex;
align-items: center;
}
.v2-topbar .v2-icon { width: 12px !important; height: 12px !important; }
.v2-topbar .v2-icon svg { width: 12px; height: 12px; }
.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 {
/* Float-Layout: Score-Zahl links, Verdict-Text fließt rechts daneben
UND darunter — so nutzt langer Text den Platz unter der Zahl. */
padding: 20px 0 22px;
border-top: 2px solid var(--ecg-green);
border-bottom: 1px solid var(--hairline);
margin: 4px 0 22px;
overflow: hidden; /* clear float */
}
.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;
/* Umfluss: Score links, Text fließt rechts/drunter */
float: left;
margin-right: 22px;
margin-bottom: 4px;
}
.v2-score-hero .verdict {
/* kein float — Text läuft rechts vom big-num und unter sie */
font-size: 14px;
line-height: 1.55;
}
.v2-score-hero .verdict b {
display: inline-block;
margin-right: 6px;
}
.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: 130px 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: 36px;
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.03em; font-weight: 700; line-height: 1.25; cursor: help; padding: 4px 4px; }
.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); font-size: 10px; letter-spacing: 0.02em; line-height: 1.25; cursor: help; }
.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 — nur auf Mobile sichtbar (< 900 px) ───────
!important nötig wegen .v2-topbar button { display: inline-flex }
(die generische Reset-Regel hat 2 Klassen Specificity vs hier 1). */
.v2-topbar .v2-menu-toggle {
display: none !important;
padding: 6px 10px;
background: none;
border: 1px solid var(--hairline);
color: var(--ecg-dark);
font-size: 18px;
cursor: pointer;
line-height: 1;
}
@media (max-width: 900px) {
.v2-topbar .v2-menu-toggle { display: inline-flex !important; }
}
/* ── Fraktions-Score-Tabelle (Fix 2+3) ─────────────────────────── */
.v2-fraktions-scores {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 8px;
}
.v2-fraktion-row {
display: block;
padding: 10px 12px;
background: var(--paper);
border: 1px solid var(--hairline);
border-radius: 4px;
font-size: 13px;
}
.v2-fraktion-head {
display: flex;
align-items: baseline;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 6px;
}
.v2-fraktion-label {
font-family: var(--font-mono);
font-size: 13px;
font-weight: 700;
letter-spacing: 0.02em;
}
/* Rolle-Pills (Antragsteller:in / Regierungsfraktion) */
.v2-pill {
font-family: var(--font-mono);
font-size: 10px;
padding: 1px 6px;
border-radius: 3px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.v2-pill-antrag {
color: #bf6c10;
background: rgba(247, 148, 29, 0.15);
}
.v2-pill-reg {
color: #1e6a90;
background: rgba(0, 157, 165, 0.15);
}
/* Aufklappbare Programm-Blöcke (Wahlprogramm/Parteiprogramm) */
.v2-treue-block {
border-top: 1px solid var(--hairline);
margin: 0;
}
.v2-treue-block:first-of-type {
border-top: none;
}
.v2-treue-block > summary {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 0;
cursor: pointer;
list-style: none;
user-select: none;
}
.v2-treue-block > summary::-webkit-details-marker {
display: none;
}
.v2-treue-label {
font-family: var(--font-mono);
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.07em;
color: #0d6f76;
font-weight: 600;
}
.v2-treue-spacer {
flex: 1 1 auto;
}
.v2-treue-caret {
font-family: var(--font-mono);
font-size: 10px;
color: var(--ecg-dark);
opacity: 0.5;
transition: transform 0.15s ease;
}
.v2-treue-block[open] > summary .v2-treue-caret {
transform: rotate(180deg);
}
.v2-treue-body {
padding: 4px 0 10px;
font-size: 12.5px;
line-height: 1.5;
}
.v2-einschaetzung {
margin-bottom: 8px;
}
.v2-einschaetzung-label {
font-family: var(--font-mono);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.07em;
color: var(--ecg-dark);
opacity: 0.6;
margin-bottom: 4px;
}
.v2-einschaetzung-text {
color: var(--ecg-dark);
line-height: 1.55;
}
.v2-belege {
margin-top: 6px;
}
.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;
cursor: help; /* Browser zeigt Hilfe-Cursor — Affordanz fuer Tooltip */
}
/* Score-Chips bekommen die gleiche cursor-Affordanz, sodass User merken,
dass WP/PP nicht nur Labels sind sondern Tooltips haben (#147). */
.v2-score-chip[title] { cursor: help; }
.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);
}