Statische Website ohne Build-Schritt: reines HTML, CSS und Vanilla-JS, lauffaehig auf beliebigem Webspace. Neun Seiten: Startseite, Dienstleistungen, Projekte, Ueber uns, Kontakt sowie Impressum, Datenschutz, Danke-Seite und 404. Kernstueck der Startseite ist die Stueckzahl-Achse: ein logarithmischer Regler von 1 bis 100.000 Stueck, der zur gewaehlten Menge Verfahren, Werkzeugkosten, Lieferzeit und Anwendungsfall ausgibt. Die dritte Zone ist optisch zurueckgenommen, weil Serienspritzguss ueber Partnerbetriebe laeuft und nicht zum eigenen Leistungsumfang gehoert. Der Leistungsumfang ist durchgehend auf FDM, SLA und SLA-gedruckte Formeinsaetze beschraenkt. Gestaltung nach Vorgabe: Anthrazit, Salbeigruen und Flieder als Akzent. Archivo, Public Sans und IBM Plex Mono werden lokal ausgeliefert statt ueber die Google-CDN eingebunden. Kontaktformular ueber Web3Forms mit Client-Validierung; der Access-Key ist noch ein Platzhalter. Alle Firmen- und Projektinhalte sind sichtbar als Platzhalter markiert, die Uebergabe-Checkliste steht in der README. Geprueft: WCAG-AA-Kontraste auf allen Seiten, kein horizontaler Ueberlauf von 320 bis 1920 px, Tastaturbedienung der Achse, feste Zeilenzahl der Hero-Headline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
184 lines
6.2 KiB
CSS
184 lines
6.2 KiB
CSS
/* ==========================================================================
|
||
Purinto GmbH — Design-Tokens
|
||
Einzige Quelle für Farben, Typografie, Abstände und Radien.
|
||
Farbvorgabe: helleres Anthrazit + Salbeigrün + Flieder als Akzent.
|
||
========================================================================== */
|
||
|
||
:root {
|
||
/* --- Anthrazit: trägt den Engineering-Ernst ---------------------------- */
|
||
--anthrazit-900: #22282b;
|
||
--anthrazit-800: #2e3538;
|
||
--anthrazit-700: #3c4347; /* "helleres Anthrazit" – dunkle Sektionen */
|
||
--anthrazit-600: #525b5f;
|
||
--anthrazit-500: #626b6f; /* auf --dunst geprüft: 5,03:1 (WCAG AA) */
|
||
--anthrazit-400: #8b9296;
|
||
--anthrazit-300: #aeb5b7;
|
||
--anthrazit-200: #c9cfd0;
|
||
--anthrazit-100: #e3e7e6;
|
||
|
||
/* --- Salbei: trägt die Nachhaltigkeit --------------------------------- */
|
||
--salbei-800: #4a5d50;
|
||
--salbei-700: #5e7565;
|
||
--salbei-600: #75907c;
|
||
--salbei-500: #8fa894;
|
||
--salbei-400: #a9bdad;
|
||
--salbei-300: #c2d0c4;
|
||
--salbei-200: #d6e0d6;
|
||
--salbei-100: #e8eee8;
|
||
|
||
/* --- Flieder: der freundliche, unerwartete Ton. Sparsam einsetzen. ----- */
|
||
--flieder-900: #493a6b;
|
||
--flieder-800: #5b4880; /* CTA-Fläche, weißer Text ~6,5:1 */
|
||
--flieder-700: #6e5a96; /* Links, Fokusring */
|
||
--flieder-600: #8570ae;
|
||
--flieder-500: #9b85c4;
|
||
--flieder-400: #b09fd5;
|
||
--flieder-300: #c6b5e3; /* heller Marker auf dunklem Grund */
|
||
--flieder-200: #dcd2ef;
|
||
--flieder-100: #eee9f7;
|
||
|
||
/* --- Neutrale Flächen ------------------------------------------------- */
|
||
--dunst: #f5f6f3;
|
||
--papier: #ffffff;
|
||
|
||
/* --- Semantische Zuweisungen ------------------------------------------ */
|
||
--bg: var(--dunst);
|
||
--bg-karte: var(--papier);
|
||
--bg-dunkel: var(--anthrazit-700);
|
||
--bg-dunkel-tief: var(--anthrazit-900);
|
||
--bg-salbei: var(--salbei-100);
|
||
|
||
--text: var(--anthrazit-900);
|
||
--text-leise: var(--anthrazit-500);
|
||
--text-invers: #f2f4f1;
|
||
--text-invers-leise: #b6bfbc;
|
||
/* Gedämpfter Text auf --bg-dunkel. Nicht --anthrazit-400 verwenden:
|
||
das ergibt dort nur 3,19:1 und fällt unter AA. */
|
||
--text-invers-schwach: var(--anthrazit-300);
|
||
|
||
--linie: var(--anthrazit-200);
|
||
--linie-zart: var(--anthrazit-100);
|
||
--linie-invers: rgba(255, 255, 255, 0.16);
|
||
|
||
--akzent: var(--flieder-800);
|
||
--akzent-hover: var(--flieder-900);
|
||
--akzent-hell: var(--flieder-300);
|
||
--fokus: var(--flieder-700);
|
||
|
||
/* --- Typografie -------------------------------------------------------
|
||
Archivo in expandierter Breite gibt der weichen Salbei-Flieder-Palette
|
||
ein hartes Rückgrat. Verdana als Fallback, weil ebenfalls breit läuft. */
|
||
--f-display: "Archivo", "Archivo Fallback", Verdana, "DejaVu Sans", sans-serif;
|
||
--f-text: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||
Helvetica, Arial, sans-serif;
|
||
--f-mono: "IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, "SF Mono",
|
||
"Liberation Mono", monospace;
|
||
|
||
/* Fließende Typo-Skala */
|
||
/* Hergeleitet, nicht geschätzt: Die Hero-Headline hat feste Umbrüche und
|
||
soll immer genau drei Zeilen haben. Ihre längste Zeile misst 10,26 em.
|
||
Neben dem Logo (3,06 em breit) plus Spaltenabstand muss also gelten:
|
||
10,26 F <= Spaltenbreite. Daraus ergeben sich Minimum, Steigung und
|
||
Maximum unten. Wird der Headline-Text geändert, neu rechnen. */
|
||
--t-3xl: clamp(2.1rem, 0.05rem + 6.2vw, 5rem);
|
||
--t-2xl: clamp(1.95rem, 1.45rem + 2.2vw, 3.3rem);
|
||
--t-xl: clamp(1.45rem, 1.28rem + 0.85vw, 2.05rem);
|
||
--t-lg: clamp(1.15rem, 1.07rem + 0.36vw, 1.4rem);
|
||
--t-md: 1.0625rem;
|
||
--t-sm: 0.9375rem;
|
||
--t-xs: 0.8125rem;
|
||
--t-2xs: 0.6875rem;
|
||
|
||
--lh-eng: 1.02;
|
||
/* Fortsetzung siehe Media Query am Dateiende: Unter 500px gilt für --t-3xl
|
||
eine eigene, größere Skala, weil dort vier Headline-Zeilen erlaubt sind. */
|
||
--lh-kopf: 1.14;
|
||
--lh-normal: 1.62;
|
||
|
||
--ls-display: -0.022em;
|
||
--ls-mono: 0.11em;
|
||
|
||
/* --- Abstände ---------------------------------------------------------- */
|
||
--s-1: 0.25rem;
|
||
--s-2: 0.5rem;
|
||
--s-3: 0.75rem;
|
||
--s-4: 1rem;
|
||
--s-5: 1.5rem;
|
||
--s-6: 2rem;
|
||
--s-7: 3rem;
|
||
--s-8: 4rem;
|
||
--s-9: 6rem;
|
||
--s-10: 8rem;
|
||
|
||
--sektion-y: clamp(3.5rem, 2rem + 6vw, 7rem);
|
||
--breite: 1200px;
|
||
--breite-eng: 740px;
|
||
--rand: clamp(1.15rem, 0.6rem + 2.4vw, 2.5rem);
|
||
|
||
/* --- Radien: zurückhaltend, technisch ---------------------------------- */
|
||
--r-1: 2px;
|
||
--r-2: 4px;
|
||
--r-3: 8px;
|
||
--r-4: 14px;
|
||
|
||
/* --- Schatten ---------------------------------------------------------- */
|
||
--schatten-1: 0 1px 2px rgba(34, 40, 43, 0.05),
|
||
0 2px 8px rgba(34, 40, 43, 0.04);
|
||
--schatten-2: 0 2px 4px rgba(34, 40, 43, 0.06),
|
||
0 14px 30px rgba(34, 40, 43, 0.08);
|
||
|
||
--dauer: 220ms;
|
||
--kurve: cubic-bezier(0.2, 0.7, 0.3, 1);
|
||
|
||
/* --- Schichtlinien: Textur, die auf den additiven Schichtaufbau anspielt.
|
||
Wird sehr sparsam als Hintergrund eingesetzt. -------------------- */
|
||
--schichten: repeating-linear-gradient(
|
||
to bottom,
|
||
rgba(255, 255, 255, 0.05) 0,
|
||
rgba(255, 255, 255, 0.05) 1px,
|
||
transparent 1px,
|
||
transparent 7px
|
||
);
|
||
}
|
||
|
||
/* Unter 500px darf die Hero-Headline vier Zeilen haben. Die festen Umbrüche
|
||
sind dort ausgeblendet (siehe .hero__umbruch), sie bricht also frei um.
|
||
Dadurch entfällt die enge Grenze aus der längsten Einzelzeile, und die
|
||
Schrift kann auf dem Telefon deutlich größer stehen. */
|
||
@media (max-width: 499px) {
|
||
:root {
|
||
--t-3xl: clamp(1.75rem, -0.07rem + 9.1vw, 2.8rem);
|
||
}
|
||
}
|
||
|
||
/* Schriften werden lokal ausgeliefert – keine Einbindung über die Google-CDN,
|
||
die in AT/DE datenschutzrechtlich angreifbar ist (LG München I, 3 O 17493/20).
|
||
Fehlen die Dateien, greifen automatisch die Fallbacks oben. */
|
||
@font-face {
|
||
font-family: "Archivo";
|
||
src: url("../fonts/archivo-variable.woff2") format("woff2-variations");
|
||
font-weight: 100 900;
|
||
font-stretch: 62% 125%;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: "Public Sans";
|
||
src: url("../fonts/public-sans-variable.woff2") format("woff2-variations");
|
||
font-weight: 100 900;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: "IBM Plex Mono";
|
||
src: url("../fonts/ibm-plex-mono-regular.woff2") format("woff2");
|
||
font-weight: 400;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: "IBM Plex Mono";
|
||
src: url("../fonts/ibm-plex-mono-medium.woff2") format("woff2");
|
||
font-weight: 500;
|
||
font-display: swap;
|
||
}
|