ui(antrag-detail): Programm-Treue-Box auf 1/3 der Höhe verkleinert
Pro Fraktion bisher ~137px (Head + Wahlprogramm-Reihe + Parteiprogramm- Reihe in drei vertikalen Blöcken). Nutzer wollte deutlich kompakter. Layout: Fraktion-Name + Antragsteller-/Regierungs-Pillen + zwei Programm-Pillen (WP / PP) jetzt in EINER flex-row. Pro Programm-Pille ein klickbares <details> mit Mini-Score-Chip; beim Aufklappen fließt der Body (Begründung + Zitate) dank ``flex-basis: 100%`` unter die Zeile in voller Breite. Höhe collapsed: ~40-45px pro Fraktion (von vorher ~137px). Begründung in der ausgeklappten Box bekommt zusätzlich einen ``Wahlprogramm:``-/ ``Parteiprogramm:``-Präfix, da der Programm-Typ aus der Pille nicht mehr im Body explizit auftaucht. Doppelte v3-prog-text-Regel im CSS entfernt (war vergessenes Cruft).
This commit is contained in:
parent
e48cab6db3
commit
2f700adbb8
@ -181,20 +181,19 @@
|
|||||||
.v3-fraktionen {
|
.v3-fraktionen {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 12px;
|
gap: 6px;
|
||||||
}
|
}
|
||||||
.v3-fraktion {
|
.v3-fraktion {
|
||||||
background: var(--surface);
|
background: var(--surface);
|
||||||
border: 1px solid var(--hairline);
|
border: 1px solid var(--hairline);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 12px 14px;
|
padding: 6px 12px;
|
||||||
}
|
}
|
||||||
.v3-fraktion-head {
|
.v3-fraktion-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
margin-bottom: 6px;
|
|
||||||
}
|
}
|
||||||
.v3-fraktion-name {
|
.v3-fraktion-name {
|
||||||
font-family: var(--font-sans);
|
font-family: var(--font-sans);
|
||||||
@ -203,6 +202,7 @@
|
|||||||
letter-spacing: 0.02em;
|
letter-spacing: 0.02em;
|
||||||
color: var(--ecg-dark);
|
color: var(--ecg-dark);
|
||||||
}
|
}
|
||||||
|
.v3-fraktion-spacer { flex: 1 1 auto; }
|
||||||
.v3-pill {
|
.v3-pill {
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
@ -214,10 +214,13 @@
|
|||||||
.v3-pill-antrag { color: #bf6c10; background: rgba(247, 148, 29, 0.15); }
|
.v3-pill-antrag { color: #bf6c10; background: rgba(247, 148, 29, 0.15); }
|
||||||
.v3-pill-reg { color: #1e6a90; background: rgba(0, 157, 165, 0.15); }
|
.v3-pill-reg { color: #1e6a90; background: rgba(0, 157, 165, 0.15); }
|
||||||
|
|
||||||
|
/* Kompakte Programm-Pillen rechts in der Fraktion-Zeile.
|
||||||
|
Aufklappbar via <details>; aufgeklappt fließt der Body unter
|
||||||
|
die Zeile in voller Breite. */
|
||||||
.v3-prog {
|
.v3-prog {
|
||||||
border-top: 1px solid var(--hairline);
|
/* details als grid-item: in der flex-row, body wandert beim Aufklappen
|
||||||
|
dank flex-basis:100% auf eigene Zeile. */
|
||||||
}
|
}
|
||||||
.v3-prog:first-of-type { border-top: 1px dashed var(--hairline); margin-top: 4px; }
|
|
||||||
.v3-prog > summary {
|
.v3-prog > summary {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@ -226,53 +229,65 @@
|
|||||||
}
|
}
|
||||||
.v3-prog > summary::-webkit-details-marker { display: none; }
|
.v3-prog > summary::-webkit-details-marker { display: none; }
|
||||||
|
|
||||||
.v3-prog-row {
|
.v3-prog-pill {
|
||||||
display: flex;
|
display: inline-flex;
|
||||||
align-items: baseline;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 6px;
|
||||||
padding: 10px 0 8px;
|
padding: 2px 8px;
|
||||||
|
border: 1px solid var(--hairline);
|
||||||
|
border-radius: 3px;
|
||||||
|
background: rgba(0, 0, 0, 0.015);
|
||||||
|
transition: background 0.12s ease, border-color 0.12s ease;
|
||||||
}
|
}
|
||||||
.v3-prog-label {
|
.v3-prog-pill:hover {
|
||||||
font-family: var(--font-mono);
|
background: rgba(0, 0, 0, 0.04);
|
||||||
font-size: 12px;
|
border-color: var(--ecg-blue);
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.07em;
|
|
||||||
color: var(--ecg-dark);
|
|
||||||
font-weight: 600;
|
|
||||||
transition: color 0.12s ease;
|
|
||||||
}
|
}
|
||||||
.v3-prog-label::before {
|
.v3-prog-pill::before {
|
||||||
content: "▸";
|
content: "▸";
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-right: 6px;
|
font-size: 9px;
|
||||||
font-size: 10px;
|
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
transition: transform 0.15s ease;
|
transition: transform 0.15s ease;
|
||||||
|
margin-right: 1px;
|
||||||
}
|
}
|
||||||
.v3-prog[open] > summary .v3-prog-label::before {
|
.v3-prog[open] > .v3-prog-pill::before {
|
||||||
transform: rotate(90deg);
|
transform: rotate(90deg);
|
||||||
}
|
}
|
||||||
.v3-prog > summary:hover .v3-prog-label { color: var(--ecg-blue); }
|
.v3-prog-pill-label {
|
||||||
.v3-prog-spacer { flex: 1 1 auto; }
|
font-family: var(--font-mono);
|
||||||
|
font-size: 10px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: var(--ecg-dark);
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
.v3-prog-score {
|
.v3-prog-score {
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
font-size: 12px;
|
font-size: 11px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 2px 8px;
|
padding: 1px 6px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
.v3-prog-score.good { background: var(--score-chip-green-bg); color: var(--score-chip-green-fg); }
|
.v3-prog-score.good { background: var(--score-chip-green-bg); color: var(--score-chip-green-fg); }
|
||||||
.v3-prog-score.mid { background: var(--score-chip-mid-bg); color: var(--score-chip-mid-fg); }
|
.v3-prog-score.mid { background: var(--score-chip-mid-bg); color: var(--score-chip-mid-fg); }
|
||||||
.v3-prog-score.low { background: var(--score-chip-red-bg); color: var(--score-chip-red-fg); }
|
.v3-prog-score.low { background: var(--score-chip-red-bg); color: var(--score-chip-red-fg); }
|
||||||
|
|
||||||
|
/* Body bricht aus der flex-row aus und nimmt die volle Breite,
|
||||||
|
sobald details aufgeklappt ist. */
|
||||||
.v3-prog-body {
|
.v3-prog-body {
|
||||||
padding: 0 0 12px 16px;
|
flex-basis: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 8px;
|
||||||
|
padding: 8px 4px 4px;
|
||||||
|
border-top: 1px dashed var(--hairline);
|
||||||
}
|
}
|
||||||
.v3-prog-text {
|
.v3-prog-text {
|
||||||
font-size: 13.5px;
|
font-size: 13.5px;
|
||||||
line-height: 1.55;
|
line-height: 1.55;
|
||||||
color: var(--ecg-dark);
|
color: var(--ecg-dark);
|
||||||
margin: 0 0 8px;
|
margin: 0 0 6px;
|
||||||
}
|
}
|
||||||
.v3-prog-zitate { margin-top: 6px; }
|
.v3-prog-zitate { margin-top: 6px; }
|
||||||
|
|
||||||
|
|||||||
@ -263,41 +263,40 @@
|
|||||||
{% for fs in antrag.fraktions_scores %}
|
{% for fs in antrag.fraktions_scores %}
|
||||||
{% if fs.fraktion | lower not in _missing_set %}
|
{% if fs.fraktion | lower not in _missing_set %}
|
||||||
<div class="v3-fraktion">
|
<div class="v3-fraktion">
|
||||||
<div class="v3-fraktion-head">
|
<div class="v3-fraktion-row">
|
||||||
<span class="v3-fraktion-name">{{ fs.fraktion }}</span>
|
<span class="v3-fraktion-name">{{ fs.fraktion }}</span>
|
||||||
{% if fs.ist_antragsteller %}<span class="v3-pill v3-pill-antrag">Antragsteller:in</span>{% endif %}
|
{% if fs.ist_antragsteller %}<span class="v3-pill v3-pill-antrag">Antragsteller:in</span>{% endif %}
|
||||||
{% if fs.ist_regierung %}<span class="v3-pill v3-pill-reg">Regierungsfraktion</span>{% endif %}
|
{% if fs.ist_regierung %}<span class="v3-pill v3-pill-reg">Regierungsfraktion</span>{% endif %}
|
||||||
</div>
|
<span class="v3-fraktion-spacer"></span>
|
||||||
|
{% for prog_key, prog_label, prog_short in [("wahlprogramm","Wahlprogramm","WP"),("parteiprogramm","Parteiprogramm","PP")] %}
|
||||||
{% for prog_key, prog_label in [("wahlprogramm","Wahlprogramm"),("parteiprogramm","Parteiprogramm")] %}
|
{% set p = fs[prog_key] %}
|
||||||
{% set p = fs[prog_key] %}
|
{% set p_score = p.score | float %}
|
||||||
{% set p_score = p.score | float %}
|
<details class="v3-prog">
|
||||||
<details class="v3-prog">
|
<summary class="v3-prog-pill" title="{{ prog_label }}">
|
||||||
<summary class="v3-prog-row">
|
<span class="v3-prog-pill-label">{{ prog_short }}</span>
|
||||||
<span class="v3-prog-label">{{ prog_label }}</span>
|
<span class="v3-prog-score
|
||||||
<span class="v3-prog-spacer"></span>
|
{% if p_score >= 7 %}good{% elif p_score >= 4 %}mid{% else %}low{% endif %}">{{ "%.0f"|format(p_score) }}/10</span>
|
||||||
<span class="v3-prog-score
|
</summary>
|
||||||
{% if p_score >= 7 %}good{% elif p_score >= 4 %}mid{% else %}low{% endif %}">{{ "%.0f"|format(p_score) }}/10</span>
|
<div class="v3-prog-body">
|
||||||
</summary>
|
{% if p.begruendung %}<p class="v3-prog-text"><strong>{{ prog_label }}:</strong> {{ p.begruendung }}</p>{% endif %}
|
||||||
<div class="v3-prog-body">
|
{% if p.zitate %}
|
||||||
{% if p.begruendung %}<p class="v3-prog-text">{{ p.begruendung }}</p>{% endif %}
|
<div class="v3-prog-zitate">
|
||||||
{% if p.zitate %}
|
{% for z in p.zitate %}
|
||||||
<div class="v3-prog-zitate">
|
{{ quote_card(z.text, z.source, True, False, z.pdf_href) }}
|
||||||
{% for z in p.zitate %}
|
{% endfor %}
|
||||||
{{ quote_card(z.text, z.source, True, False, z.pdf_href) }}
|
</div>
|
||||||
{% endfor %}
|
{% else %}
|
||||||
|
<p class="v3-prog-no-zitate">
|
||||||
|
Keine wörtlich passenden Stellen im {{ prog_label }} gefunden.
|
||||||
|
Die Bewertung beruht auf inhaltlicher Auslegung — entweder benennt das Programm
|
||||||
|
das konkrete Thema nicht explizit, oder es bleibt zu allgemein, um wörtlich
|
||||||
|
zugeordnet zu werden.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
</details>
|
||||||
<p class="v3-prog-no-zitate">
|
{% endfor %}
|
||||||
Keine wörtlich passenden Stellen im {{ prog_label }} gefunden.
|
</div>
|
||||||
Die Bewertung beruht auf inhaltlicher Auslegung — entweder benennt das Programm
|
|
||||||
das konkrete Thema nicht explizit, oder es bleibt zu allgemein, um wörtlich
|
|
||||||
zugeordnet zu werden.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}{# fraktion nicht in fehlende_programme #}
|
{% endif %}{# fraktion nicht in fehlende_programme #}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user