Files
skrift-programme/Webseite/skrift-job-manager/assets/css/job-app.css
Lucas Orth 0341c4eaea Initiale Ablage der umsortierten Skrift-Programme
Struktur: Docker/ (skrift-backend, signature-service), Webseite/
(skrift-configurator, skrift-job-manager), Produktion/ (skrift-produktion,
AutoRecover). Aufgeräumt: signature-to-svg entfernt, Backend-PayPal-Service
entfernt (PayPal läuft client-seitig im Configurator), Dev-/Test-Artefakte
und Deployment-Dokus bereinigt, .dockerignore repariert. CLAUDE.md mit
Architektur ergänzt. Secrets (.env, config.json) via .gitignore ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 12:21:08 +02:00

616 lines
13 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.
/* ──────────────────────────────────────────────
Skrift Auftragsmanager – job-spezifische Styles
Baut auf configurator.css auf (--sk-* Variablen)
────────────────────────────────────────────── */
/* Breite eingrenzen */
.sk-job-app {
max-width: 1200px;
margin: 0 auto;
}
/* ── Mehr Luft in Cards ──────────────────────────── */
.sk-job-app .sk-card-head {
padding: 20px 24px;
}
.sk-job-app .sk-card-body {
padding: 24px;
}
.sk-job-app .sk-card {
margin-bottom: 20px;
}
/* ── Stepper: nie umbrechen, horizontal scrollen ─── */
.sk-job-app .sk-stepper {
flex-wrap: nowrap;
overflow-x: auto;
padding: 4px 0 8px;
scrollbar-width: thin;
scrollbar-color: var(--sk-border-strong) transparent;
margin-bottom: 16px;
}
.sk-job-app .sk-stepper::-webkit-scrollbar {
height: 4px;
}
.sk-job-app .sk-stepper::-webkit-scrollbar-thumb {
background: var(--sk-border-strong);
border-radius: 2px;
}
.sk-job-app .sk-chip {
flex-shrink: 0;
white-space: nowrap;
}
.sk-job-app .sk-stepper-arrow {
flex-shrink: 0;
}
/* ── Gesperrte Felder (ausgegraut) ───────────────── */
.sk-job-locked {
padding: 10px 12px;
background: rgba(15, 23, 42, 0.04);
border: 1px solid var(--sk-border);
border-radius: var(--sk-radius);
font-size: 14px;
color: var(--sk-muted);
font-style: italic;
}
/* ── Übersichts-Grid ─────────────────────────────── */
.sk-job-overview-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
@media (max-width: 560px) {
.sk-job-overview-grid { grid-template-columns: 1fr; }
}
/* ── Upload-Zone ─────────────────────────────────── */
.sk-job-upload-zone {
border: 2px dashed var(--sk-border-strong);
border-radius: var(--sk-radius);
padding: 32px 24px;
text-align: center;
cursor: pointer;
transition: border-color .15s, background .15s;
margin-top: 16px;
}
.sk-job-upload-zone:hover,
.sk-job-upload-zone.is-dragover {
border-color: var(--sk-accent);
background: rgba(30, 58, 106, 0.03);
}
.sk-job-upload-zone.is-success {
border-color: var(--sk-success);
background: rgba(5, 150, 105, 0.04);
border-style: solid;
}
.sk-job-upload-zone input[type="file"] { display: none; }
.sk-job-upload-icon {
font-size: 28px;
margin-bottom: 8px;
opacity: .6;
}
.sk-job-upload-title {
font-size: 14px;
font-weight: 600;
color: var(--sk-text);
}
.sk-job-upload-sub {
font-size: 12px;
color: var(--sk-muted);
margin-top: 4px;
}
/* ── Download-Buttons ────────────────────────────── */
.sk-job-dl-row {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 8px;
}
.sk-job-dl-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 14px;
border: 1px solid var(--sk-border-strong);
border-radius: var(--sk-radius);
background: white;
font-size: 13px;
font-weight: 600;
color: var(--sk-accent);
cursor: pointer;
transition: all .15s;
font-family: inherit;
}
.sk-job-dl-btn:hover {
border-color: var(--sk-accent);
background: rgba(30, 58, 106, 0.04);
transform: translateY(-1px);
}
/* ── Platzhalter-Chips ───────────────────────────── */
.sk-job-ph-chips {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.sk-job-ph-chip {
display: inline-block;
padding: 3px 10px;
background: rgba(30, 58, 106, 0.08);
border: 1px solid rgba(30, 58, 106, 0.2);
border-radius: 999px;
font-size: 12px;
font-family: monospace;
color: var(--sk-accent);
cursor: pointer;
transition: background .12s, border-color .12s;
user-select: none;
}
.sk-job-ph-chip:hover {
background: rgba(30, 58, 106, 0.14);
border-color: var(--sk-accent);
}
/* ── Preview-Navigation ──────────────────────────── */
.sk-job-preview-nav {
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
margin-top: 12px;
}
.sk-job-preview-counter {
font-size: 13px;
color: var(--sk-muted);
min-width: 70px;
text-align: center;
}
.sk-job-preview-box {
margin-top: 16px;
min-height: 260px;
border: 1px solid var(--sk-border);
border-radius: var(--sk-radius);
background: rgba(15, 23, 42, 0.02);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
padding: 12px;
}
.sk-job-preview-box img {
max-width: 100%;
max-height: 520px;
border-radius: 4px;
box-shadow: 0 2px 12px rgba(0, 0, 0, .12);
}
/* ── Spinner ─────────────────────────────────────── */
@keyframes sk-job-spin { to { transform: rotate(360deg); } }
.sk-job-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, .35);
border-top-color: currentColor;
border-radius: 50%;
animation: sk-job-spin .7s linear infinite;
vertical-align: middle;
}
.sk-job-spinner--dark {
border-color: var(--sk-border);
border-top-color: var(--sk-accent);
}
/* ── Verify-Eingabe ──────────────────────────────── */
.sk-job-verify-row {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.sk-job-verify-row .sk-input {
flex: 1;
min-width: 180px;
font-size: 16px;
letter-spacing: .03em;
}
/* ── Mengen-Popup (Modal) ────────────────────────── */
.sk-job-modal-overlay {
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.55);
z-index: 99999;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
animation: sk-modal-fade-in .15s ease;
/* Das Overlay hängt an <body> – also außerhalb von .sk-configurator, wo die
--sk-*-Variablen definiert sind. Ohne diese Re-Definition blieben
var(--sk-accent) & Co. leer und die .sk-btn-Buttons erschienen unsichtbar
(weißer Primärbutton, kein Rahmen). Werte identisch zu configurator.css. */
--sk-accent: #1e3a6a;
--sk-text: #0f172a;
--sk-muted: rgba(15, 23, 42, 0.68);
--sk-card: #ffffff;
--sk-border: rgba(15, 23, 42, 0.1);
--sk-border-strong: rgba(15, 23, 42, 0.16);
--sk-radius: 8px;
--sk-font-text: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
color: var(--sk-text);
}
@keyframes sk-modal-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
.sk-job-modal {
background: #fff;
border-radius: var(--sk-radius);
padding: 32px;
max-width: 480px;
width: 100%;
box-shadow: 0 20px 60px rgba(0, 0, 0, .2);
animation: sk-modal-slide-in .15s ease;
}
@keyframes sk-modal-slide-in {
from { transform: translateY(-12px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.sk-job-modal-title {
margin: 0 0 16px;
font-size: 18px;
font-weight: 700;
color: var(--sk-text);
}
.sk-job-modal-text {
color: var(--sk-muted);
font-size: 14px;
margin: 0 0 10px;
line-height: 1.6;
}
.sk-job-modal-text strong {
color: var(--sk-text);
}
.sk-job-modal-actions {
display: flex;
gap: 10px;
justify-content: flex-end;
margin-top: 24px;
flex-wrap: wrap;
}
/* ── Vollbreite Checkbox-Option ──────────────────── */
.sk-option-full {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 14px;
border: 1px solid var(--sk-border);
border-radius: var(--sk-radius);
cursor: pointer;
transition: all 0.2s ease;
background: white;
width: 100%;
box-sizing: border-box;
scroll-margin: 0;
}
.sk-option-full input[type="checkbox"] {
margin-top: 2px;
flex-shrink: 0;
scroll-margin: 0;
}
.sk-option-full:hover {
border-color: var(--sk-border-strong);
background: rgba(15, 23, 42, 0.02);
}
.sk-option-full.is-selected {
border-color: var(--sk-accent);
background: rgba(30, 58, 106, 0.04);
}
.sk-option-full.is-selected .sk-option-label {
font-weight: 600;
}
/* Warn-Variante (finale Bestätigung) */
.sk-option-full--warn.is-selected {
border-color: #d97706;
background: rgba(217, 119, 6, 0.06);
}
.sk-option-full--warn.is-selected .sk-option-label {
color: #92400e;
}
/* ── Tabellen-Nummerierungs-Spalte (#) ───────────── */
.sk-table .sk-col-nr {
width: 36px;
min-width: 36px;
max-width: 36px;
padding: 8px 6px !important;
text-align: center;
color: var(--sk-muted);
font-variant-numeric: tabular-nums;
font-size: 12px;
white-space: nowrap;
}
.sk-job-app .sk-table {
min-width: 0; /* Konfigurator-Default ist 600px → bei wenig Spalten ungenutzte Breite */
}
/* Vertikale Scroll-Höhe für lange Tabellen begrenzen */
.sk-job-app .sk-table-wrapper {
max-height: 420px;
overflow: auto;
}
/* ── Editierbare Tabelle (Direkteingabe Adresse/Platzhalter) ─────── */
.sk-table-input {
width: 100%;
min-width: 90px;
padding: 6px 8px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 13px;
font-family: inherit;
background: transparent;
box-sizing: border-box;
}
.sk-table-input:hover {
border-color: var(--sk-border);
}
.sk-table-input:focus {
border-color: var(--sk-accent);
background: white;
outline: none;
}
.sk-table-readonly {
color: var(--sk-muted);
font-style: italic;
}
/* ── Preview-Sektionen (Brief + Umschlag gestapelt) ─ */
.sk-job-preview-section {
margin-top: 20px;
}
.sk-job-preview-section-title {
font-size: 13px;
font-weight: 600;
color: var(--sk-muted);
text-transform: uppercase;
letter-spacing: .05em;
margin-bottom: 8px;
}
.sk-job-preview-box--envelope {
min-height: 160px;
background: rgba(15, 23, 42, 0.04);
}
.sk-job-preview-box--envelope img {
max-height: 280px;
}
/* ── Overflow-Warnung (Text zu lang) ─────────────── */
.sk-overflow-warning .sk-overflow-title {
font-weight: 700;
font-size: 15px;
margin-bottom: 10px;
}
.sk-overflow-list {
list-style: none;
margin: 0 0 10px;
padding: 0;
max-height: 220px;
overflow-y: auto;
}
.sk-overflow-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 10px;
border-radius: 4px;
font-size: 13px;
gap: 12px;
}
.sk-overflow-item + .sk-overflow-item {
border-top: 1px solid rgba(220, 38, 38, 0.15);
}
.sk-overflow-lines {
font-variant-numeric: tabular-nums;
font-weight: 600;
white-space: nowrap;
}
.sk-overflow-more {
font-style: italic;
opacity: .8;
justify-content: flex-start;
}
.sk-overflow-hint {
font-size: 13px;
margin: 8px 0 0;
line-height: 1.5;
opacity: .9;
}
/* ── Lightbox / Bild-Vergrößerung ────────────────── */
.sk-job-lightbox {
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.92);
z-index: 100000;
display: flex;
align-items: center;
justify-content: center;
padding: 40px;
cursor: zoom-out;
animation: sk-modal-fade-in .15s ease;
}
.sk-job-lightbox img {
max-width: 95vw;
max-height: 90vh;
object-fit: contain;
background: white;
border-radius: 6px;
box-shadow: 0 12px 60px rgba(0, 0, 0, 0.5);
cursor: default;
}
.sk-job-lightbox-close {
position: absolute;
top: 16px;
right: 16px;
width: 44px;
height: 44px;
border-radius: 50%;
border: none;
background: rgba(255, 255, 255, 0.9);
color: var(--sk-text);
font-size: 28px;
line-height: 1;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background .15s, transform .15s;
}
.sk-job-lightbox-close:hover {
background: white;
transform: scale(1.05);
}
/* ── Platzhalter-Import Tabelle ──────────────────── */
.sk-job-ph-table-wrap {
overflow: auto;
margin-top: 12px;
border: 1px solid var(--sk-border);
border-radius: var(--sk-radius);
}
.sk-job-ph-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
.sk-job-ph-table th,
.sk-job-ph-table td {
padding: 8px 12px;
text-align: left;
border-bottom: 1px solid var(--sk-border);
white-space: nowrap;
}
.sk-job-ph-table th {
background: rgba(15, 23, 42, 0.03);
font-weight: 600;
color: var(--sk-text);
position: sticky;
top: 0;
}
.sk-job-ph-table td {
color: var(--sk-muted);
}
.sk-job-ph-table tr:last-child td {
border-bottom: none;
}
/* ── Mobile Optimierungen ────────────────────────── */
@media (max-width: 600px) {
.sk-job-app .sk-card-head {
padding: 16px;
}
.sk-job-app .sk-card-body {
padding: 16px;
}
.sk-job-overview-grid {
grid-template-columns: 1fr;
}
.sk-job-dl-row {
flex-direction: column;
}
.sk-job-dl-btn {
width: 100%;
justify-content: center;
}
.sk-job-verify-row {
flex-direction: column;
}
.sk-job-verify-row .sk-input {
min-width: 0;
width: 100%;
}
.sk-job-modal {
padding: 24px 16px;
}
.sk-job-modal-actions {
flex-direction: column-reverse;
}
.sk-job-modal-actions .sk-btn {
width: 100%;
justify-content: center;
}
}