hmgr 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,638 @@
1
+ /* hmgr-GUI, Renderer-Styling. Gestaltung, Token und Layout aus entwurf/gui.html übernommen,
2
+ die Farbrichtung ist verbindlich (GRILL.md „GUI-Runden"): Werkstattbeschriftung, Petrol-Emaille,
3
+ Blechgrau, Signalorange nur für Links und Meldungen. */
4
+ :root{
5
+ color-scheme: light;
6
+
7
+ --tinte:#16211D;
8
+ --tinte-weich:#4A5A54;
9
+ --tinte-leise:#626C66;
10
+ --platte:#E3E7E0;
11
+ --blech:#F4F6F1;
12
+ --papier:#FFFFFF;
13
+
14
+ --emaille:#0D5545;
15
+ --emaille-tief:#093B31;
16
+ --emaille-hoch:#14705C;
17
+ --emaille-hell:#A6CABC;
18
+ --emaille-hell-tief:#86AB9D;
19
+ --emaille-zahl:#BEDACF;
20
+
21
+ --strich:#C4CCC0;
22
+ --strich-zart:#D8DED4;
23
+ --strich-ui:#7F847C;
24
+
25
+ --signal:#D8501B;
26
+ --signal-tief:#A63B11;
27
+ --signal-dunkel:#832E0D;
28
+ --signal-blass:#FDF3EC;
29
+ --signal-hell:#FFF9F5;
30
+
31
+ --messing:#9A7420;
32
+ --messing-tief:#856317;
33
+ --messing-blass:#FAF6EA;
34
+ --messing-satt:#5C4A18;
35
+
36
+ --q1:#1C6B57;
37
+ --q2:#35608F;
38
+ --q3:#9A7420;
39
+
40
+ --schrift:'Inter',-apple-system,BlinkMacSystemFont,system-ui,'Segoe UI',Roboto,sans-serif;
41
+ --mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,Consolas,monospace;
42
+ }
43
+
44
+ /* Beide Schriften liegen unter fonts/, statt auf eine lokale Installation zu hoffen (SIL Open Font
45
+ License, Lizenztexte liegen daneben). Inter als Variable Font deckt 400–800 ab, JetBrains Mono
46
+ nur die beiden gebrauchten Schnitte 400/500. */
47
+ @font-face{
48
+ font-family:'Inter';
49
+ src:url('fonts/InterVariable.woff2') format('woff2-variations'), url('fonts/InterVariable.woff2') format('woff2');
50
+ font-weight:400 800;
51
+ font-style:normal;
52
+ font-display:swap;
53
+ }
54
+ @font-face{
55
+ font-family:'JetBrains Mono';
56
+ src:url('fonts/JetBrainsMono-Regular.woff2') format('woff2');
57
+ font-weight:400;
58
+ font-style:normal;
59
+ font-display:swap;
60
+ }
61
+ @font-face{
62
+ font-family:'JetBrains Mono';
63
+ src:url('fonts/JetBrainsMono-Medium.woff2') format('woff2');
64
+ font-weight:500;
65
+ font-style:normal;
66
+ font-display:swap;
67
+ }
68
+
69
+ *{box-sizing:border-box}
70
+ html,body{margin:0}
71
+ body{
72
+ background:var(--platte);
73
+ color:var(--tinte);
74
+ font-family:var(--schrift);
75
+ font-size:16px;
76
+ line-height:1.55;
77
+ -webkit-font-smoothing:antialiased;
78
+ }
79
+ h1,h2,h3{margin:0;font-family:var(--schrift);font-weight:700;letter-spacing:-.018em;line-height:1.18}
80
+ p{margin:0}
81
+ button{font:inherit;color:inherit}
82
+ a{color:var(--signal-tief)}
83
+ :focus-visible{outline:3px solid var(--signal);outline-offset:2px;border-radius:1px}
84
+ .leiste :focus-visible{outline-color:#F0EBD8}
85
+
86
+ .etikett{
87
+ font-family:var(--schrift);font-weight:700;font-size:15px;
88
+ letter-spacing:.15em;text-transform:uppercase;color:var(--tinte-weich);
89
+ }
90
+ .mono{font-family:var(--mono);font-size:16px;letter-spacing:-.012em}
91
+
92
+ /* ---------- Quellen: Icon, Name, Sprung zur Quelle (E60) ---------- */
93
+ /* Der Name bleibt ruhig, das kleine Pfeilsymbol traegt das Signalorange und sagt: das geht nach
94
+ draussen, zur Repo-Seite oder in den Finder. Keine Unterstreichung, die flackert in einer Tabelle
95
+ mit vielen Zeilen. */
96
+ .qlink{
97
+ display:inline-flex;align-items:center;gap:5px;
98
+ font-family:var(--mono);font-size:16px;letter-spacing:-.012em;
99
+ color:var(--tinte-weich);text-decoration:none;text-align:left;
100
+ background:none;border:0;padding:0;cursor:pointer;border-radius:2px;
101
+ transition:color .12s ease;
102
+ }
103
+ .qlink:hover{color:var(--signal-tief)}
104
+ .qlink .extern{flex:none;width:12px;height:12px;color:var(--signal-tief)}
105
+ .qlink:hover .extern{color:var(--signal-dunkel)}
106
+
107
+ /* Das 20px-Icon der Quelle: Besitzer-Avatar oder Favicon als data-URL, generisch bei lokalen
108
+ Quellen und jedem Fehlschlag (F35). */
109
+ .repo{flex:none;width:20px;height:20px;display:block;border-radius:5px;overflow:hidden}
110
+
111
+ /* Quellen-Chip im Katalog: zwei Bedienelemente in einer Huelle. Links filtert der Name, rechts
112
+ oeffnet das Pfeilsymbol die Quelle. Ein <a> im <button> waere nicht erlaubt, also stehen sie
113
+ nebeneinander, getrennt durch eine Kante. */
114
+ .chipgruppe{display:inline-flex;align-items:stretch;border:1px solid var(--strich-ui);border-radius:22px}
115
+ .chipgruppe:hover{border-color:var(--tinte-weich)}
116
+ .chipgruppe:has(.chip[aria-pressed="true"]){border-color:var(--tinte)}
117
+ .chipgruppe .chip{border:0;border-radius:22px 0 0 22px;padding:7px 12px 7px 15px}
118
+ .chipoeffnen{
119
+ display:inline-flex;align-items:center;
120
+ padding:0 12px 0 10px;border:0;border-left:1px solid var(--strich-ui);
121
+ background:transparent;border-radius:0 22px 22px 0;cursor:pointer;
122
+ color:var(--signal-tief);text-decoration:none;
123
+ }
124
+ .chipoeffnen svg{flex:none;width:12px;height:12px;display:block}
125
+ .chipoeffnen:hover{color:var(--signal-dunkel);background:var(--signal-blass)}
126
+ .chipgruppe:has(.chip[aria-pressed="true"]) .chipoeffnen{border-left-color:var(--tinte)}
127
+
128
+ .app{display:grid;grid-template-columns:284px minmax(0,1fr);min-height:100vh}
129
+
130
+ .leiste{
131
+ background:var(--emaille);color:#EAF0EA;padding:20px 18px 22px;
132
+ border-right:3px solid var(--emaille-tief);
133
+ position:sticky;top:0;height:100vh;overflow-y:auto;
134
+ display:flex;flex-direction:column;
135
+ }
136
+ .marke{display:flex;align-items:baseline;gap:11px;padding:4px 6px 22px}
137
+ .marke b{font-family:var(--schrift);font-weight:800;font-size:30px;letter-spacing:-.035em;color:#FBFDF9;line-height:1}
138
+ .marke span{font-family:var(--mono);font-size:16px;color:var(--emaille-hell)}
139
+
140
+ .nav{display:flex;flex-direction:column;gap:6px}
141
+ .plakette{
142
+ display:flex;align-items:center;gap:11px;width:100%;
143
+ background:var(--emaille-tief);border:1px solid rgba(255,255,255,.10);
144
+ border-left:4px solid transparent;border-radius:3px;padding:11px 13px;cursor:pointer;text-align:left;
145
+ color:#DCE7E0;font-family:var(--schrift);font-weight:600;font-size:16px;letter-spacing:-.005em;
146
+ transition:background .14s ease,color .14s ease;
147
+ }
148
+ .plakette:hover{background:#0B4A3D;color:#FBFDF9}
149
+ .plakette[aria-current="page"]{background:var(--blech);color:var(--tinte);border-left-color:var(--signal);border-color:var(--blech)}
150
+ .plakette .zahl{margin-left:auto;font-family:var(--mono);font-size:16px;font-weight:400;color:#A7BCB4}
151
+ .plakette[aria-current="page"] .zahl{color:var(--tinte-weich)}
152
+ .plakette svg{flex:none;width:18px;height:18px}
153
+
154
+ .stand{margin:22px 4px 0;padding:14px 6px 0;border-top:1px solid rgba(255,255,255,.16);display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center}
155
+ .stand p{flex:1 1 130px;font-size:16px;line-height:1.4;color:var(--emaille-hell)}
156
+ .stand p b{font-weight:600;color:#F1F6EF}
157
+ /* Ruhig, solange nichts ansteht; erst „mit Neuem" (.neu) macht ihn zum Signal. Der Knopf ist
158
+ zugleich der Weg in die Update-Ansicht, deshalb nie disabled. */
159
+ .standknopf{
160
+ background:transparent;border:1px solid rgba(255,255,255,.3);color:var(--emaille-hell);border-radius:3px;
161
+ padding:6px 13px;cursor:pointer;white-space:nowrap;font-family:var(--schrift);font-weight:500;
162
+ font-size:16px;letter-spacing:-.005em;transition:background .14s ease,border-color .14s ease,color .14s ease;
163
+ }
164
+ .standknopf:hover{background:var(--emaille-hoch);color:#F1F6EF}
165
+ .standknopf.neu{border-color:var(--emaille-hell);background:var(--emaille-hoch);color:#F1F6EF;font-weight:600}
166
+
167
+ .einstellungen{
168
+ margin-top:auto;padding:14px 6px 0;display:flex;align-items:center;gap:11px;width:100%;
169
+ background:transparent;border:0;border-top:1px solid rgba(255,255,255,.16);cursor:pointer;text-align:left;
170
+ color:var(--emaille-hell);font-family:var(--schrift);font-weight:600;font-size:16px;letter-spacing:-.005em;
171
+ transition:color .14s ease;
172
+ }
173
+ .einstellungen:hover{color:#FBFDF9}
174
+ .einstellungen svg{flex:none;width:18px;height:18px}
175
+
176
+ .kopf{background:var(--blech);border-bottom:2px solid var(--tinte);padding:18px 34px;display:flex;flex-wrap:wrap;align-items:baseline;gap:10px 24px}
177
+ .kopf .mono{color:var(--tinte-weich)}
178
+ .buehne{padding:30px 34px 76px;max-width:1200px}
179
+
180
+ .meldung{
181
+ display:flex;gap:14px;align-items:flex-start;margin:0 34px;padding:13px 16px;
182
+ background:var(--signal-blass);border:1px solid #E9B99C;border-left:5px solid var(--signal);border-radius:3px;
183
+ }
184
+ .meldung[hidden]{display:none}
185
+ /* pre-line: Kernmeldungen sind mehrzeilig (Grund, Aufzählung, Handlungszeile), etwa der Abbruch bei
186
+ lokalen Änderungen mit den Checkout-Pfaden (F31a). Ohne das liefe alles zu einer Zeile zusammen. */
187
+ .meldung p{font-size:16px;white-space:pre-line}
188
+ .meldung button{margin-left:auto;background:none;border:0;cursor:pointer;padding:2px 6px;color:var(--signal-tief);font-weight:700;font-size:16px}
189
+
190
+ .ansichtskopf{margin-bottom:26px;max-width:62ch}
191
+ .ansichtskopf h1{font-size:clamp(26px,3.4vw,34px);font-weight:800;letter-spacing:-.028em}
192
+ .ansichtskopf p{margin-top:10px;color:var(--tinte-weich);font-size:17px}
193
+
194
+ .werkzeuge{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:18px}
195
+ .suche{position:relative;flex:1 1 320px;min-width:260px}
196
+ .suche input{
197
+ width:100%;font:inherit;font-size:16px;padding:11px 14px 11px 44px;background:var(--blech);
198
+ border:1px solid var(--strich-ui);border-bottom:2px solid var(--tinte);border-radius:3px;color:var(--tinte);
199
+ }
200
+ .suche input::placeholder{color:var(--tinte-leise);opacity:1}
201
+ .suche svg{position:absolute;left:14px;top:13px;width:18px;height:18px;stroke:var(--tinte-weich);fill:none}
202
+
203
+ .filter{display:flex;flex-wrap:wrap;gap:7px}
204
+ .chip{
205
+ background:transparent;border:1px solid var(--strich-ui);border-radius:22px;padding:7px 15px;cursor:pointer;
206
+ font-family:var(--schrift);font-weight:600;font-size:16px;letter-spacing:-.005em;color:var(--tinte-weich);
207
+ display:inline-flex;align-items:center;gap:8px;transition:border-color .14s ease,color .14s ease;
208
+ }
209
+ .chip:hover{border-color:var(--tinte-weich);color:var(--tinte)}
210
+ .chip i{width:10px;height:10px;border-radius:2px;background:currentColor;display:inline-block}
211
+ .chip[aria-pressed="true"]{background:var(--tinte);border-color:var(--tinte);color:var(--blech)}
212
+ /* Harness-Zeichen im Chip (E53 Pkt. 1): kleiner als die Standardgröße, gap übernimmt den Abstand. */
213
+ .chip .hsymbol{width:15px;height:15px;margin-right:0}
214
+
215
+ .katalogzahl{margin:0 0 12px;font-size:16px;color:var(--tinte-weich)}
216
+ .zeilen{display:flex;flex-direction:column;gap:8px;list-style:none;margin:0;padding:0}
217
+ .zeile{
218
+ background:var(--blech);border:1px solid var(--strich-zart);border-left:5px solid var(--q1);border-radius:3px;
219
+ padding:15px 18px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 24px;align-items:center;
220
+ transition:transform .13s ease,box-shadow .13s ease,border-color .13s ease;
221
+ }
222
+ .zeile:hover{transform:translateY(-2px);box-shadow:0 4px 0 -1px rgba(22,33,29,.13);border-color:var(--strich)}
223
+ .zeile[hidden]{display:none}
224
+ .zeile h3{font-size:19px;font-weight:700;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
225
+ .zeile .beschreibung{color:var(--tinte-weich);font-size:16px;margin-top:5px}
226
+ .zeile .herkunft{margin-top:7px;color:var(--tinte-leise)}
227
+ .zeile .herkunft b{font-weight:400;color:var(--tinte-leise)}
228
+ /* In der Katalogzeile tritt der Quellen-Link zurück, er steht neben Ref und Marken (entwurf/gui.html). */
229
+ .zeile .herkunft .qlink{color:var(--tinte-leise)}
230
+ .zeile .herkunft .qlink:hover{color:var(--signal-tief)}
231
+
232
+ .merker{
233
+ font-family:var(--schrift);font-weight:700;font-size:15px;letter-spacing:.1em;text-transform:uppercase;
234
+ border:1px solid var(--messing);color:var(--messing-tief);border-radius:2px;padding:1px 8px;white-space:nowrap;line-height:1.5;
235
+ }
236
+ .merker.doppelt{border-color:var(--strich-ui);color:var(--tinte-weich)}
237
+ /* Dezente Variante für Besonderheiten aus dem Frontmatter im Skill-Katalog (E55): informativ,
238
+ deshalb neutral statt der Messing-Farbe. Keine Versalien: die Marke zitiert
239
+ Befehle wie /name, Großschreibung würde sie verfälschen. Damit gilt die 16px-Untergrenze
240
+ (15px sind nur für versale Etiketten erlaubt). */
241
+ .merker.leise{
242
+ border-color:var(--strich-ui);color:var(--tinte-weich);
243
+ text-transform:none;letter-spacing:normal;font-size:16px;font-weight:400;
244
+ }
245
+ /* Hooks und vorab erlaubte Werkzeuge sind sicherheitsrelevant, deshalb doch Messing (F11). */
246
+ .merker.leise.warnend{border-color:var(--messing);color:var(--messing-tief)}
247
+ .marken{display:inline-flex;gap:6px;flex-wrap:wrap}
248
+ .wahlzeile .marken{margin-left:8px}
249
+
250
+ /* Aufklapp-Umschalter einer Skill-Zeile (E55): eigener Button statt role="button" auf einem Div,
251
+ weil die Zeile selbst keinen Klickbereich ist (die Marken und der Verlinken-Knopf liegen daneben). */
252
+ .aufklappknopf{
253
+ background:transparent;border:1px solid var(--strich-ui);border-radius:3px;width:34px;height:34px;
254
+ display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:border-color .14s ease;flex:none;
255
+ }
256
+ .aufklappknopf:hover{border-color:var(--tinte-weich)}
257
+ .aufklappknopf[aria-expanded="true"] .akkordeonpfeil{transform:rotate(180deg)}
258
+ /* Pfeil auf hellem Grund (die Zeile ist nicht wie .zielkopf dunkel), eigene Strichfarbe. */
259
+ .akkordeonpfeil.dunkel{stroke:var(--tinte-weich)}
260
+
261
+ .zeile .skillkoerper{grid-column:1/-1;margin-top:2px;padding-top:12px;border-top:1px solid var(--strich-zart)}
262
+ .zeile .skillkoerper[hidden]{display:none}
263
+ .skilldetail{margin:0 0 6px;font-size:16px;color:var(--tinte-weich)}
264
+ .skilldetail:last-child{margin-bottom:0}
265
+ .skilldetail b{color:var(--tinte);font-weight:600}
266
+
267
+ .rechts{display:flex;align-items:center;gap:16px;justify-self:end}
268
+ .schilder{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end;max-width:430px;position:relative}
269
+ .schilder::before{content:"";width:18px;height:1px;background:var(--strich-ui);flex:none}
270
+ .schilder.leer::before{display:none}
271
+ .schild{
272
+ display:inline-flex;align-items:center;gap:7px;padding:4px 11px 4px 8px;border:1.5px solid var(--signal);
273
+ border-radius:2px 11px 11px 2px;background:var(--signal-blass);font-family:var(--mono);font-size:16px;
274
+ font-weight:500;color:var(--signal-tief);white-space:nowrap;line-height:1.35;
275
+ }
276
+ .schild::before{content:"";width:7px;height:7px;border-radius:50%;border:1.5px solid var(--signal);background:var(--platte);flex:none}
277
+ .ohne{font-size:16px;color:var(--tinte-leise);font-style:normal}
278
+
279
+ .knopf{
280
+ border:1.5px solid var(--tinte);background:var(--tinte);color:var(--blech);border-radius:3px;
281
+ padding:9px 17px;cursor:pointer;white-space:nowrap;font-family:var(--schrift);font-weight:600;
282
+ font-size:16px;letter-spacing:-.005em;transition:background .14s ease,border-color .14s ease,color .14s ease;
283
+ }
284
+ .knopf:hover{background:var(--emaille);border-color:var(--emaille)}
285
+ .knopf.leise{background:transparent;color:var(--tinte);border-color:var(--strich-ui)}
286
+ .knopf.leise:hover{background:transparent;border-color:var(--tinte);color:var(--tinte)}
287
+ .knopf.signal{background:var(--signal-tief);border-color:var(--signal-tief);color:var(--signal-hell)}
288
+ .knopf.signal:hover{background:var(--signal-dunkel);border-color:var(--signal-dunkel)}
289
+ .knopf.gross{font-size:18px;padding:14px 26px}
290
+ .knopf.mitsymbol{display:inline-flex;align-items:center;gap:9px}
291
+ .knopf.mitsymbol svg{flex:none;width:18px;height:18px}
292
+ /* Harness-Zeichen vor „Skills hinzufügen" (E53 Pkt. 4, 7): gleiche Größe wie das Ordner-Symbol,
293
+ ohne die eingebaute Randbreite von .hsymbol, die gap schon übernimmt. */
294
+ .knopf.mitsymbol .hsymbol{width:18px;height:18px;margin-right:0}
295
+ .knopf[disabled]{opacity:.55;cursor:default}
296
+ .knopf[disabled]:hover{background:var(--tinte);border-color:var(--tinte)}
297
+ .knopf.klein{padding:4px 13px}
298
+
299
+ .ziele{display:flex;flex-direction:column;gap:18px}
300
+ .ziel{background:var(--blech);border:1px solid var(--strich);border-radius:3px;overflow:hidden}
301
+ /* Kopfzeile als Akkordeon-Umschalter (E45): role="button", die ganze Zeile ist klickbar. */
302
+ .zielkopf{background:var(--emaille);color:#EAF0EA;padding:14px 20px;display:flex;flex-wrap:wrap;align-items:center;column-gap:26px;row-gap:8px;border-bottom:3px solid var(--emaille-tief);cursor:pointer}
303
+ .zielkopf h3{font-size:18px;font-weight:700;color:#FBFDF9}
304
+ /* Der Pfad darf kürzen statt umzubrechen (schmales Fenster): min-width:0 macht den Flex-Item
305
+ schrumpfbar, sonst greift text-overflow nicht. */
306
+ .zielkopf .mono{color:var(--emaille-hell);font-size:16px;flex:1 1 160px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
307
+ .zielkopf .zahl{margin-left:auto;font-family:var(--mono);font-size:16px;color:var(--emaille-zahl)}
308
+ /* Zeichen statt Text-Badge (E45-Nachschärfung): trägt die Farbe selbst als Emoji, nur Größe passend
309
+ zur Kopfzeile. Eigener Randabstand, damit es neben Titel und Pfad Luft behält. */
310
+ .warnung{font-size:19px;line-height:1;margin:0 4px}
311
+ /* Pfeil-Indikator des Akkordeons: zeigt zu, dreht sich beim Aufklappen. */
312
+ .akkordeonpfeil{flex:none;width:15px;height:15px;stroke:var(--emaille-hell);fill:none;stroke-width:1.8;transition:transform .14s ease}
313
+ .zielkopf[aria-expanded="true"] .akkordeonpfeil{transform:rotate(180deg)}
314
+ /* Fokusring nach innen: .ziel läuft über (overflow:hidden) und schnitte den außen liegenden
315
+ Ring der Kopfzeile ab. Helle Farbe wie in der Leiste, der Kopf ist dunkel. */
316
+ .zielkopf:focus-visible{outline-offset:-3px;outline-color:#F0EBD8}
317
+ .zielkoerper{padding:16px 18px 18px}
318
+ .zielkoerper[hidden]{display:none}
319
+
320
+ .gruppenkopf{display:block;margin:16px 0 0;padding:0 0 9px;font-size:19px;font-weight:800;letter-spacing:.2em;color:var(--tinte);border-bottom:2px solid var(--tinte)}
321
+ .gruppenkopf:first-child{margin-top:0}
322
+
323
+ .ziel.verzeichnis .zielkopf h3{font-family:var(--mono);letter-spacing:-.012em;word-break:break-all}
324
+ .ziel.verzeichnis .zielkoerper > * + *{border-top:1px solid var(--strich);margin-top:16px;padding-top:14px}
325
+ /* Icons aller am Verzeichnis beteiligten Harnesses (E49), statt des einzelnen Icons vor h3. */
326
+ .harnesssymbole{display:inline-flex;align-items:center;color:var(--emaille-hell)}
327
+ .harnesssymbole .hsymbol{margin-right:6px}
328
+ .harnesssymbole .hsymbol:last-child{margin-right:0}
329
+ .harnesszeile .mono,.konfigzeile .mono{word-break:break-all}
330
+
331
+ /* Chip-Leiste „Alle" + je Harness einer, oben im Körper einer Verzeichnis-Karte (E53 Pkt. 1):
332
+ eigener Abstand statt der Trennlinie, die sonst zwischen den Körper-Blöcken steht. */
333
+ .kartenchips{margin-bottom:16px}
334
+ .ziel.verzeichnis .zielkoerper > .kartenchips + *{border-top:0;margin-top:0;padding-top:0}
335
+ .kartenchips .hsymbol{margin-right:6px}
336
+ /* Zielordner des gewählten Harness, wie ihn vorher der Abschnittskopf trug (25cddf6): rechts in der
337
+ Chip-Leiste, daneben die Inaktiv-Marke. */
338
+ .kartenchips .kartenordner{margin-left:auto;align-self:center;color:var(--tinte-weich);word-break:break-all}
339
+ .kartenchips .ruhend{align-self:center}
340
+
341
+ .hsymbol{flex:none;width:17px;height:17px;margin-right:8px;vertical-align:-.19em}
342
+ /* Das Hermes-Zeichen ist ein Bitmap-Favicon mit weißem Grund: leicht gerundet wie eine Tab-Kachel. */
343
+ img.hsymbol{border-radius:3px}
344
+
345
+ /* Kleine Harness-Zeichen an einer Zeile (E53 Pkt. 2, 5): gebündelte Skill-Zeile unter „Alle" und
346
+ fremde/ignorierte Einträge dort, je mit Sammel-aria-label statt einzelner Beschriftung. Eigene,
347
+ kleinere Größe statt der Kopfzeilen-Optik von .harnesssymbole, die für den dunklen Zielkopf gilt. */
348
+ .zeilenzeichen{display:inline-flex;align-items:center;vertical-align:-.15em;margin-right:6px}
349
+ .zeilenzeichen .hsymbol{width:14px;height:14px;margin-right:3px}
350
+ .zeilenzeichen .hsymbol:last-child{margin-right:0}
351
+ .linkliste .name .zeilenzeichen{margin-right:8px}
352
+ .fremdname{display:inline-flex;align-items:center}
353
+
354
+ /* Fünf Spalten (E60, entwurf/gui.html): Icon, Skill-Name, Beschreibung (die breiteste, sie
355
+ beantwortet die Frage, wegen der die Tabelle gelesen wird), Quelle, Aktion. */
356
+ .linkkopf,.linkliste li{
357
+ display:grid;
358
+ grid-template-columns:20px minmax(0,180px) minmax(0,1fr) minmax(0,152px) 176px;
359
+ gap:4px 16px;align-items:start;
360
+ }
361
+ .linkkopf{padding-bottom:8px;border-bottom:1px solid var(--strich)}
362
+ .linkliste{list-style:none;margin:0;padding:0}
363
+ .linkliste li{padding:9px 0;border-bottom:1px solid var(--strich-zart)}
364
+ .linkliste li:last-child{border-bottom:0}
365
+ .linkliste .repo{margin-top:1px}
366
+ .linkliste .name{font-family:var(--mono);font-size:16px;letter-spacing:-.012em;color:var(--tinte);word-break:break-word;line-height:1.4}
367
+ /* Zwei Zeilen sind das Dach: ein Satz passt hinein, eine überlange Zeile sprengt die Tabelle
368
+ nicht. Der volle Satz steht dann im title. */
369
+ .linkliste .was{
370
+ font-size:16px;color:var(--tinte-weich);line-height:1.4;
371
+ display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;
372
+ }
373
+ .linkliste .was.fehlt{color:var(--tinte-leise);font-style:italic}
374
+ .linkliste .quelle{display:flex;flex-wrap:wrap;align-items:center;gap:3px 9px;line-height:1.4}
375
+ .linkliste .quelle .ref{font-family:var(--mono);font-size:16px;letter-spacing:-.012em;color:var(--tinte-leise)}
376
+ /* Der Grund steht nur da, wenn er nicht „von Hand" heisst (der Normalfall entfällt ersatzlos): ein
377
+ stiller Vermerk, keine Marke mit Umrandung. */
378
+ .linkliste .quelle .grundmarke{font-size:16px;color:var(--tinte-leise);line-height:1.4}
379
+ .linkliste .kein-weg{font-size:16px;color:var(--tinte-leise);justify-self:end;text-align:right;line-height:1.4}
380
+ /* Rechtsbündig in der Aktionsspalte, wie der Plugin-Vermerk daneben: ohne das dehnt das Raster den
381
+ Knopf über die volle Spaltenbreite (entwurf/gui.html). */
382
+ .linkliste .knopf.klein{margin-top:-4px;justify-self:end}
383
+
384
+ /* E47: Knopf unterhalb der Link-Liste, ebenso als Ersatz der zweiten Hälfte des Leerhinweises. */
385
+ .zielfuss{margin-top:14px;display:flex;justify-content:flex-end}
386
+ .leerzeile{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center}
387
+ .leerzeile .ohne{flex:1 1 260px;margin:0}
388
+ .leerzeile .knopf{margin-left:auto}
389
+
390
+ .dkoerper .suche{margin-bottom:14px}
391
+
392
+ .fremdkasten{margin:18px 0;padding:14px 16px;background:var(--messing-blass);border:1px dashed var(--messing);border-radius:3px;display:flex;flex-wrap:wrap;gap:12px 18px;align-items:center}
393
+ .fremdkasten .fremdtext{flex:1 1 320px}
394
+ .fremdkasten p{font-size:16px;color:var(--messing-satt)}
395
+ .fremdkasten strong{font-weight:700}
396
+ .fremdnamen{list-style:none;margin:9px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;font-family:var(--mono);font-size:16px;letter-spacing:-.012em;color:var(--messing-satt);line-height:1.45}
397
+ .fremdnamen li{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px 12px}
398
+ .fremdkopf{display:flex;flex-direction:column;gap:2px}
399
+ .fremdkopf .mono{font-size:14px;color:var(--tinte-weich)}
400
+ .fremdknoepfe{display:flex;gap:8px;flex-wrap:wrap}
401
+ .fremderklaerung{margin-top:9px}
402
+ .fremdursache{flex-basis:100%;font-size:14px;color:var(--tinte-weich)}
403
+ .fremdursache .tipps{margin-top:4px}
404
+ .fremdursache .tippkopf{font-size:13px;font-weight:600;color:var(--tinte-weich);margin:0}
405
+ .fremdursache .tippliste{list-style:none;margin:2px 0 0;padding:0;font-size:14px;color:var(--tinte-weich)}
406
+ .fremdursache .tippliste li{margin-top:2px}
407
+
408
+ .ignoriertzeile{margin-top:12px;display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;font-size:15px;color:var(--tinte-leise)}
409
+ .ignoriertzahl{font-weight:600}
410
+ .ignoriertname{display:flex;align-items:center;gap:6px;font-family:var(--mono);letter-spacing:-.012em}
411
+
412
+ .startfeld{background:var(--blech);border:1px solid var(--strich);border-radius:3px;padding:28px;display:flex;flex-wrap:wrap;gap:22px;align-items:center}
413
+ .startfeld p{flex:1 1 320px;color:var(--tinte-weich);font-size:16px}
414
+ .lauf{margin-top:20px;background:var(--emaille-tief);border-radius:3px;padding:18px 20px}
415
+ .lauf ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
416
+ .lauf li{font-family:var(--mono);font-size:16px;color:var(--emaille-zahl);display:flex;gap:14px}
417
+ .lauf li b{color:#F1F6EF;font-weight:500}
418
+
419
+ .bericht{margin-top:20px;display:flex;flex-direction:column;gap:14px}
420
+ .block{background:var(--blech);border:1px solid var(--strich);border-radius:3px;padding:17px 19px;border-left:5px solid var(--emaille)}
421
+ .block.uebersprungen{border-left-color:var(--messing);background:var(--messing-blass)}
422
+ .block.entfernt{border-left-color:var(--signal)}
423
+ .block .etikett{display:block;margin-bottom:11px}
424
+ .block ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:9px;font-size:16px}
425
+ .block li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:baseline}
426
+ .block .marke-ok{color:var(--emaille-hoch);font-weight:700}
427
+ .block .marke-aus{color:var(--messing-tief);font-weight:700}
428
+ .block .pfad{color:var(--tinte-weich)}
429
+
430
+ .markt{margin-bottom:26px}
431
+ .marktkopf{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:baseline;margin-bottom:12px;padding-bottom:10px;border-bottom:2px solid var(--tinte)}
432
+ .marktkopf h3{font-size:18px;font-weight:700}
433
+ .marktkopf .mono{color:var(--tinte-weich)}
434
+ .pluginzeile{background:var(--blech);border:1px solid var(--strich-zart);border-radius:3px;padding:16px 18px;margin-bottom:8px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px 24px;align-items:center}
435
+ .pluginzeile h4{margin:0;font-family:var(--schrift);font-weight:700;font-size:18px;letter-spacing:-.015em}
436
+ .pluginzeile p{color:var(--tinte-weich);font-size:16px;margin-top:5px}
437
+ .kette{margin-top:10px;display:flex;flex-wrap:wrap;gap:9px;align-items:center;font-family:var(--mono);font-size:16px;color:var(--tinte-weich)}
438
+ .kette .glied{border:1px solid var(--strich-ui);border-radius:2px;padding:3px 9px;background:var(--papier)}
439
+ .kette .pfeil{color:var(--signal-tief)}
440
+
441
+ dialog{
442
+ border:0;padding:0;max-width:min(660px,calc(100vw - 28px));width:100%;max-height:calc(100vh - 32px);
443
+ overflow:hidden;background:var(--blech);color:var(--tinte);border-radius:4px;border-top:6px solid var(--signal);
444
+ box-shadow:0 22px 60px rgba(9,30,24,.42);
445
+ }
446
+ dialog form{display:flex;flex-direction:column;max-height:calc(100vh - 38px)}
447
+ dialog::backdrop{background:rgba(9,45,37,.62)}
448
+ .dkopf{padding:24px 28px 0}
449
+ .dkopf .etikett{display:block;margin-bottom:9px;color:var(--signal-tief)}
450
+ .dkopf h3{font-size:23px;font-weight:800;letter-spacing:-.024em}
451
+ .dkopf p{margin-top:11px;color:var(--tinte-weich);font-size:17px}
452
+ /* Mehrere Hinweise stehen untereinander (E26, F32). */
453
+ #de-hinweis{white-space:pre-line}
454
+ #de-hinweis[hidden]{display:none}
455
+ .dkoerper{padding:18px 28px;overflow:auto;min-height:0}
456
+ .dfuss{padding:16px 28px 20px;display:flex;flex-wrap:wrap;gap:12px;justify-content:flex-end;border-top:1px solid var(--strich-zart);background:#EFF2EC}
457
+ .dfuss .links{margin-right:auto}
458
+
459
+ .wahl{display:flex;flex-direction:column;gap:9px}
460
+ .wahlzeile{
461
+ display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;border:1px solid var(--strich-ui);
462
+ border-radius:3px;padding:13px 15px;cursor:pointer;background:var(--papier);
463
+ transition:border-color .12s ease,background .12s ease;position:relative;
464
+ }
465
+ .wahlzeile:hover{border-color:var(--tinte-weich)}
466
+ .wahlzeile:has(input:checked){border-color:var(--signal);background:var(--signal-blass)}
467
+ .wahlzeile:has(input:focus-visible){outline:3px solid var(--signal);outline-offset:2px}
468
+ .wahlzeile:has(input:disabled){opacity:.66;cursor:default}
469
+ /* Wie bei .zeile: die Klasse setzt display, also braucht hidden eine eigene Regel, sonst filtert
470
+ das Suchfeld im Skills-Dialog (E47) nichts weg. */
471
+ .wahlzeile[hidden]{display:none}
472
+ .wahlzeile.quellfarbe{border-left-width:4px}
473
+ .wahlzeile input{margin:4px 0 0;width:19px;height:19px;accent-color:var(--signal-tief)}
474
+ .wahlzeile input.versteckt{position:absolute;width:1px;height:1px;margin:0;padding:0;opacity:0;pointer-events:none}
475
+ .wahlzeile b{font-family:var(--schrift);font-weight:700;font-size:17px;letter-spacing:-.012em}
476
+ .wahlzeile .mono{display:block;color:var(--tinte-weich);margin-top:3px}
477
+ .wahlzeile .notiz{display:block;margin-top:8px;font-size:16px;color:var(--messing-satt);background:var(--messing-blass);border-left:3px solid var(--messing);padding:7px 10px;border-radius:0 2px 2px 0}
478
+ .nummer{
479
+ font-family:var(--mono);font-size:16px;font-weight:500;width:28px;height:28px;flex:none;display:grid;
480
+ place-items:center;border:1.5px solid var(--tinte);border-radius:50%;margin-top:1px;
481
+ }
482
+ .wahlzeile:has(input:checked) .nummer{background:var(--signal-tief);border-color:var(--signal-tief);color:var(--signal-hell)}
483
+
484
+ .probeliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
485
+ .probeliste li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:baseline;border-bottom:1px solid var(--strich-zart);padding-bottom:8px;font-size:16px}
486
+ .probeliste li:last-child{border-bottom:0}
487
+ .probeliste .ok{color:var(--emaille-hoch);font-weight:700}
488
+ .probeliste .aus{color:var(--messing-tief);font-weight:700}
489
+ .probeliste .mono{display:block;color:var(--tinte-weich);margin-top:2px}
490
+ .probeliste .tipps{margin-top:6px}
491
+ .probeliste .tippkopf{font-size:14px;font-weight:600;color:var(--tinte-weich);margin:0}
492
+ .probeliste .tippliste{list-style:none;margin:2px 0 0;padding:0;font-size:15px;color:var(--tinte-weich)}
493
+ .probeliste .tippliste li{margin-top:2px}
494
+
495
+ .feld{display:block;margin-bottom:20px}
496
+ .feld .etikett,.feldtitel{display:block;margin-bottom:8px}
497
+ .feld input{
498
+ width:100%;font:inherit;font-family:var(--mono);font-size:16px;letter-spacing:-.012em;padding:11px 13px;
499
+ background:var(--papier);border:1px solid var(--strich-ui);border-bottom:2px solid var(--tinte);border-radius:3px;color:var(--tinte);
500
+ }
501
+
502
+ .dialogfehler{color:var(--signal-tief);font-size:15px;margin:0}
503
+ .dialogfehler[hidden]{display:none}
504
+
505
+ .pfadzeile{display:flex;gap:10px;align-items:stretch}
506
+ .pfadzeile .pfadfeld{flex:1;min-width:0}
507
+ .pfadzeile .knopf{flex:none;white-space:nowrap}
508
+ .pfadfeld{position:relative;display:block}
509
+ .pfadfeld input{padding-left:42px}
510
+ .pfadfeld svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);width:17px;height:17px;stroke:var(--tinte-weich);fill:none;pointer-events:none}
511
+
512
+ .pfadliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
513
+ .pfadliste li{font-family:var(--mono);font-size:16px;background:var(--papier);border:1px solid var(--strich-zart);border-radius:2px;padding:9px 12px;word-break:break-all}
514
+
515
+ .erfolgliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
516
+ .erfolgliste li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:13px;align-items:baseline;font-size:16px}
517
+ .erfolgliste .ok{color:var(--emaille-hoch);font-weight:700}
518
+ .erfolgliste .aus{color:var(--messing-tief);font-weight:700}
519
+ .erfolgliste .mono{display:block;color:var(--tinte-weich)}
520
+
521
+ .abschnitt + .abschnitt{margin-top:22px;padding-top:20px;border-top:1px solid var(--strich)}
522
+ .abschnitt > .etikett{display:block;margin-bottom:6px}
523
+ .abschnitt > p{font-size:16px;color:var(--tinte-weich);margin-bottom:13px;max-width:58ch}
524
+
525
+ /* Zwei Zeilen je Quelle (E60): oben Icon und Name, so wie die Quelle überall in hmgr heisst,
526
+ darunter zurückgenommen die volle Adresse, Ref und Skill-Zahl. Die farbigen Kantenstreifen
527
+ entfallen ersatzlos, das Icon trägt jetzt die Unterscheidung. */
528
+ .quellenliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:15px}
529
+ .quellenliste li{display:grid;grid-template-columns:20px minmax(0,1fr) auto;gap:3px 10px;align-items:center}
530
+ .quellenliste .repo{grid-column:1;grid-row:1}
531
+ /* Umbenennen und Entfernen sitzen zusammen in Spalte 3, sonst lägen sie als eigene Grid-Kinder
532
+ beide in derselben Zelle übereinander. Spalte und Zeile stehen ausdrücklich da, damit sie nicht
533
+ in der zweiten Zeile neben der Adresse landen. */
534
+ .quellenliste li .quellenknoepfe{grid-column:3;grid-row:1;align-self:center;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
535
+ .quellenliste b{grid-column:2;grid-row:1;display:block;font-family:var(--mono);font-weight:500;font-size:16px;color:var(--tinte);word-break:break-word;line-height:1.35}
536
+ .quellenliste small{grid-column:2;grid-row:2;font-family:var(--mono);font-size:16px;color:var(--tinte-weich);line-height:1.4;overflow-wrap:anywhere}
537
+ /* Stift-Knopf fürs Umbenennen (ersetzt den Textknopf), zurückgenommen wie in den Einstellungen sonst. */
538
+ .umbenennen{
539
+ display:inline-flex;align-items:center;justify-content:center;
540
+ background:none;border:0;padding:5px;border-radius:2px;cursor:pointer;
541
+ color:var(--tinte-leise);transition:color .12s ease;
542
+ }
543
+ .umbenennen:hover{color:var(--tinte)}
544
+ .umbenennen svg{width:16px;height:16px}
545
+ /* Der „Quelle hinzufügen …"-Knopf gehört nicht mehr zur Liste, er braucht Luft nach oben. */
546
+ #quelleneu{margin-top:24px}
547
+
548
+ .leerhinweis{padding:24px;text-align:center;color:var(--tinte-weich);font-size:16px;background:var(--blech);border:1px dashed var(--strich);border-radius:3px}
549
+
550
+ /* Harness-Schalter im Einstellungen-Dialog (entwurf/gui.html). */
551
+ .harnessliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
552
+ .harnessschalter{
553
+ display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:start;cursor:pointer;
554
+ background:var(--blech);border:1px solid var(--strich-ui);border-radius:3px;padding:12px 15px;
555
+ transition:border-color .12s ease;
556
+ }
557
+ .harnessschalter:hover{border-color:var(--tinte-weich)}
558
+ .harnessschalter input{
559
+ appearance:none;-webkit-appearance:none;
560
+ margin:3px 0 0;flex:none;width:38px;height:22px;
561
+ border:1.5px solid var(--strich-ui);border-radius:11px;background:var(--blech);
562
+ position:relative;cursor:pointer;transition:background .14s ease,border-color .14s ease;
563
+ }
564
+ .harnessschalter input::after{
565
+ content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;
566
+ background:var(--strich-ui);transition:transform .14s ease,background .14s ease;
567
+ }
568
+ .harnessschalter input:checked{background:var(--emaille);border-color:var(--emaille)}
569
+ .harnessschalter input:checked::after{background:var(--blech);transform:translateX(16px)}
570
+ .harnessschalter b{display:flex;align-items:center;font-family:var(--mono);font-weight:500;font-size:16px;color:var(--tinte);line-height:1.35;word-break:break-word}
571
+ .harnessschalter small{display:block;font-size:16px;color:var(--tinte-weich);line-height:1.4}
572
+
573
+ /* Ziel eines abgeschalteten Harness: still, kein Alarm, nur ein Vermerk. */
574
+ .ruhend{
575
+ font-family:var(--schrift);font-weight:700;font-size:15px;letter-spacing:.1em;text-transform:uppercase;
576
+ background:var(--platte);color:var(--tinte);border-radius:2px;padding:2px 9px;border:1px solid var(--strich-ui);
577
+ }
578
+ /* Der Weg zurück für Konfiguration, die keinen aktiven Harness mehr hat. */
579
+ .ruhezeile{
580
+ display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;
581
+ margin-bottom:14px;padding:11px 14px;
582
+ background:var(--messing-blass);border:1px solid var(--messing);border-radius:3px;
583
+ }
584
+ .ruhezeile p{flex:1 1 300px;font-size:16px;color:var(--messing-satt)}
585
+ .ruhezeile svg{flex:none;width:18px;height:18px;stroke:var(--messing-tief);fill:none}
586
+ .ruhezeile .knopf{margin-left:auto}
587
+
588
+ /* Sichtbare Konfiguration eines Ziels, hier der verwaltete Hermes-Ordner aus der config.yaml (E56). */
589
+ .konfigzeile{
590
+ display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;
591
+ margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--strich-ui);
592
+ }
593
+ .konfigzeile b{font-weight:700;font-size:16px}
594
+ .konfigzeile .mono{color:var(--tinte)}
595
+ .konfigzeile .konfigquelle{font-size:16px;color:var(--tinte-leise)}
596
+ .konfigzeile .knopf{margin-left:auto}
597
+
598
+ /* Fünf Spalten brauchen Breite, sonst zerfällt die Beschreibung in Wortsalat: der Link stapelt hier
599
+ schon auf drei Zeilen, das Icon bleibt als Anker links stehen, die Aktion rechts (entwurf/gui.html). */
600
+ @media (max-width:1180px){
601
+ .linkkopf{display:none}
602
+ .linkliste li{grid-template-columns:20px minmax(0,1fr) auto;gap:3px 12px}
603
+ .linkliste .repo{grid-column:1;grid-row:1}
604
+ .linkliste .name{grid-column:2;grid-row:1}
605
+ .linkliste .was{grid-column:2;grid-row:2}
606
+ .linkliste .quelle{grid-column:2;grid-row:3}
607
+ .linkliste .knopf.klein,.linkliste .kein-weg{grid-column:3;grid-row:1 / span 3;align-self:center}
608
+ .linkliste .knopf.klein{margin-top:0}
609
+ .linkliste .kein-weg{white-space:normal}
610
+ }
611
+
612
+ @media (max-width:980px){
613
+ .app{grid-template-columns:1fr}
614
+ .leiste{position:static;height:auto;border-right:0;border-bottom:3px solid var(--emaille-tief);padding:16px 18px 20px}
615
+ .marke{padding-bottom:16px}
616
+ .nav{flex-direction:row;flex-wrap:wrap}
617
+ .plakette{width:auto;flex:1 1 160px}
618
+ .einstellungen{margin-top:14px}
619
+ .kopf,.meldung{padding-left:20px;padding-right:20px}
620
+ .meldung{margin:0 20px}
621
+ .buehne{padding:22px 20px 64px}
622
+ .zeile{grid-template-columns:minmax(0,1fr)}
623
+ .rechts{justify-self:start;flex-wrap:wrap}
624
+ .schilder{justify-content:flex-start;max-width:none}
625
+ .schilder::before{display:none}
626
+ .pluginzeile{grid-template-columns:minmax(0,1fr)}
627
+ /* Die Linktabelle steht schon seit 1180px gestapelt, hier rutscht nur noch die Aktion unter den
628
+ Text, damit die drei Zeilen die volle Breite haben. */
629
+ .linkliste .knopf.klein,.linkliste .kein-weg{grid-column:2;grid-row:4;justify-self:start;text-align:left;margin-top:6px}
630
+ .dkopf{padding:20px 20px 0}
631
+ .dkoerper{padding:16px 20px}
632
+ .dfuss{padding:14px 20px 18px}
633
+ }
634
+
635
+ @media (prefers-reduced-motion:reduce){
636
+ *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
637
+ .zeile:hover{transform:none}
638
+ }