/* FDMTech — warstwa projektanta. Jasne tło robocze, decyzyjny teal, sygnał limonki. */ @font-face { font-family: "Bricolage Grotesque"; src: url("../fonts/bricolage-800.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; } @font-face { font-family: "Bricolage Grotesque"; src: url("../fonts/bricolage-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: "Bricolage Grotesque"; src: url("../fonts/bricolage-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "DM Sans"; src: url("../fonts/dmsans-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "DM Sans"; src: url("../fonts/dmsans-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "DM Sans"; src: url("../fonts/dmsans-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } :root { --teal: #102c32; --teal-deep: #0b2025; --lime: #d7f171; --lime-ink: #2a3a00; --mist: #eef2ef; --paper: #f7faf7; --ink: #102c32; --ink-soft: #2c444a; --coral: #f47f5f; --line: #c9d4cd; --focus: #0b2025; --radius: 14px; --measure: 70ch; --font-display: "Bricolage Grotesque", "DM Sans", Inter, system-ui, "Segoe UI", sans-serif; --font-body: "DM Sans", Inter, system-ui, "Segoe UI", Roboto, sans-serif; } *, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; } body { margin: 0; background: var(--mist); color: var(--ink); font-family: var(--font-body); font-size: 1.0625rem; line-height: 1.65; } h1, h2, h3 { font-family: var(--font-display); line-height: 1.08; letter-spacing: -0.015em; text-wrap: balance; margin: 2.2em 0 0.55em; } h1 { font-size: clamp(2.2rem, 5vw, 3.9rem); font-weight: 800; margin-top: 0; } h2 { font-size: clamp(1.5rem, 3vw, 2.2rem); font-weight: 750; } h3 { font-size: 1.2rem; font-weight: 700; } p, ul, ol, dl { max-width: var(--measure); } a { color: inherit; text-underline-offset: 0.18em; } a:hover { text-decoration-thickness: 2px; } ::selection { background: var(--lime); color: var(--teal-deep); } :focus-visible { outline: 3px solid var(--lime); outline-offset: 3px; border-radius: 4px; } .on-dark :focus-visible { outline-color: var(--lime); } /* Skip link */ .skip-link { position: absolute; left: 1rem; top: -4rem; z-index: 100; background: var(--teal); color: var(--lime); padding: 0.7rem 1.1rem; border-radius: 0 0 10px 10px; text-decoration: none; font-weight: 700; transition: top 0.15s ease-out; } .skip-link:focus { top: 0; } /* Demo banner */ aside[role="note"] { background: var(--teal-deep); color: var(--lime); text-align: center; padding: 0.55rem 1rem; font-size: 0.95rem; } /* Header */ .site-header { background: var(--teal); color: #f2f6f2; } .header-inner { max-width: 72rem; margin: 0 auto; padding: 0.9rem 1.25rem; display: flex; align-items: center; gap: 1rem; } .brand { display: inline-flex; align-items: center; gap: 0.65rem; text-decoration: none; font-family: var(--font-display); font-weight: 800; font-size: 1.25rem; letter-spacing: 0.01em; margin-right: auto; } .brand svg { display: block; } .brand-name { white-space: nowrap; } .site-nav ul { list-style: none; display: flex; gap: 0.25rem; margin: 0; padding: 0; } .site-nav a { display: inline-block; padding: 0.55rem 0.85rem; border-radius: 9px; text-decoration: none; font-weight: 600; } .site-nav a:hover { background: rgba(215, 241, 113, 0.14); } .site-nav a[aria-current="page"] { background: var(--lime); color: var(--teal-deep); } .nav-toggle { display: none; background: transparent; border: 2px solid var(--lime); color: var(--lime); border-radius: 10px; padding: 0.5rem 0.8rem; font: inherit; font-weight: 700; cursor: pointer; } /* Layout shell */ .wrap { max-width: 72rem; margin: 0 auto; padding: 0 1.25rem; } #cms-content { display: block; padding: 0 0 3rem; } /* Hero — teal field, counter instrument on the side */ .hero { background: var(--teal); color: #f2f6f2; border-radius: 0 0 26px 26px; } .hero-inner { max-width: 72rem; margin: 0 auto; padding: 3.2rem 1.25rem 2.8rem; display: grid; grid-template-columns: 1.25fr 0.9fr; gap: 2.5rem; align-items: center; } .hero h1 { color: #fff; } .hero-lede { font-size: 1.2rem; line-height: 1.6; color: #dbe5dd; max-width: 44ch; } .hero-actions { display: flex; flex-wrap: wrap; gap: 0.8rem; margin-top: 1.6rem; } .btn { display: inline-block; border-radius: 999px; padding: 0.8rem 1.5rem; font-weight: 700; text-decoration: none; border: 2px solid transparent; cursor: pointer; font-size: 1rem; } .btn-primary { background: var(--lime); color: var(--teal-deep); } .btn-primary:hover { background: #e4fa8d; } .btn-ghost { border-color: rgba(242, 246, 242, 0.55); color: #fff; } .btn-ghost:hover { border-color: var(--lime); color: var(--lime); } .counter-panel { background: var(--teal-deep); border: 1px solid rgba(215, 241, 113, 0.35); border-radius: var(--radius); padding: 1.4rem 1.4rem 1.1rem; box-shadow: 0 18px 40px rgba(0, 0, 0, 0.35); } .counter-panel svg.signal { width: 100%; height: auto; display: block; } .counter-panel svg.signal path.trace { stroke-dasharray: 320; stroke-dashoffset: 320; animation: trace 1.6s cubic-bezier(0.2, 0.7, 0.2, 1) 0.2s forwards; } @keyframes trace { to { stroke-dashoffset: 0; } } .counter-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.8rem; margin-top: 1rem; } .counter-cell { background: rgba(238, 242, 239, 0.06); border: 1px solid rgba(238, 242, 239, 0.16); border-radius: 10px; padding: 0.7rem 0.6rem; text-align: center; } .counter-cell b { display: block; font-family: var(--font-display); font-variant-numeric: tabular-nums; font-size: 1.35rem; color: var(--lime); } .counter-cell span { font-size: 0.82rem; color: #c4d2c7; } .demo-tag { display: inline-block; margin-top: 0.9rem; font-size: 0.82rem; color: var(--teal-deep); background: var(--lime); border-radius: 999px; padding: 0.2rem 0.7rem; font-weight: 700; } /* Sections on mist */ .section { padding: 2.6rem 0 0.4rem; } .measure-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem 2rem; margin: 1.4rem 0 0; padding: 0; list-style: none; max-width: none; } .measure-list li { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 1.1rem 1.2rem; box-shadow: 0 10px 24px rgba(16, 44, 50, 0.08); } .measure-list h3 { margin: 0 0 0.35rem; display: flex; align-items: center; gap: 0.55rem; } .measure-list h3 svg { flex: none; } .measure-list p { margin: 0; color: var(--ink-soft); font-size: 1rem; } .print-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; align-items: start; background: var(--paper); border: 1px solid var(--line); border-radius: 20px; padding: clamp(1.4rem, 3vw, 2.4rem); margin-top: 1.4rem; } .print-grid h2 { margin-top: 0; } .print-grid ul { padding-left: 1.2rem; color: var(--ink-soft); } .print-grid li + li { margin-top: 0.5rem; } .specimen { background: var(--teal); color: #eef4ee; border-radius: 12px; padding: 1.3rem; font-variant-numeric: tabular-nums; } .specimen table { width: 100%; border-collapse: collapse; font-size: 0.95rem; } .specimen caption { text-align: left; font-weight: 700; color: var(--lime); padding-bottom: 0.6rem; } .specimen th, .specimen td { text-align: left; padding: 0.5rem 0.4rem; border-top: 1px solid rgba(238, 242, 239, 0.22); } .specimen td:last-child, .specimen th:last-child { text-align: right; } /* Audit band */ .audit-band { margin-top: 2.6rem; background: var(--teal); color: #f2f6f2; border-radius: 20px; padding: clamp(1.6rem, 4vw, 2.8rem); display: grid; grid-template-columns: 1.3fr 0.7fr; gap: 1.6rem; align-items: center; } .audit-band h2 { margin-top: 0; color: #fff; } .audit-band p { color: #d7e1d8; margin-bottom: 0; } .audit-band .btn { justify-self: end; } /* Inquiry + contact summary */ .inquiry-grid { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 2rem; margin-top: 2.4rem; align-items: start; } .inquiry-form, .inquiry { background: var(--paper); border: 1px solid var(--line); border-radius: 20px; padding: clamp(1.4rem, 3vw, 2.2rem); } .inquiry-form h2, .inquiry h1 { margin-top: 0; } .field { margin-top: 1rem; } .field label { display: block; font-weight: 700; margin-bottom: 0.35rem; } .field input[type="text"], .field input[type="email"], .field input[type="tel"], .field textarea { width: 100%; border: 2px solid var(--line); border-radius: 10px; padding: 0.7rem 0.85rem; font: inherit; background: #fff; color: var(--ink); } .field input:focus, .field textarea:focus { border-color: var(--teal); outline: 3px solid var(--lime); outline-offset: 1px; } .field [aria-invalid="true"] { border-color: var(--coral); } .field-error { color: #7c2d12; background: #fdeee6; border: 1px solid var(--coral); border-radius: 8px; padding: 0.45rem 0.7rem; margin: 0.45rem 0 0; font-size: 0.95rem; } .form-alert { border: 1px solid var(--coral); background: #fdeee6; color: #5c2008; border-radius: 10px; padding: 0.8rem 1rem; } .form-notice { border: 1px solid var(--teal); background: var(--mist); border-radius: 10px; padding: 0.8rem 1rem; } .consent { display: flex; gap: 0.6rem; align-items: flex-start; font-size: 0.98rem; } .consent input { width: 1.2em; height: 1.2em; margin-top: 0.25em; accent-color: var(--teal); } button.btn-primary { margin-top: 1.2rem; font-family: var(--font-body); } button.btn-primary:disabled { opacity: 0.55; cursor: not-allowed; } .fine-print { font-size: 0.9rem; color: var(--ink-soft); } .contact-card { background: var(--teal-deep); color: #eef4ee; border-radius: 20px; padding: clamp(1.4rem, 3vw, 2rem); } .contact-card h2 { margin-top: 0; color: var(--lime); } .contact-card address { font-style: normal; line-height: 1.7; } .contact-card a { color: var(--lime); } /* Footer */ .site-footer { background: var(--teal-deep); color: #cfdad1; margin-top: 3rem; } .footer-inner { max-width: 72rem; margin: 0 auto; padding: 2.4rem 1.25rem 1.6rem; display: grid; grid-template-columns: 1.2fr 1fr; gap: 2rem; } .site-footer h2 { color: #fff; font-size: 1.1rem; margin-top: 0; } .site-footer address { font-style: normal; line-height: 1.75; } .site-footer nav ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.4rem; } .site-footer a { color: var(--lime); } .footer-base { max-width: 72rem; margin: 0 auto; padding: 0 1.25rem 1.6rem; border-top: 1px solid rgba(238, 242, 239, 0.18); padding-top: 1rem; font-size: 0.9rem; display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; } /* Formularz aplikacyjny /kontakt (znaczniki renderera View::form). */ .inquiry { max-width: 44rem; background: var(--paper); border: 1px solid var(--line); border-radius: 20px; padding: clamp(1.4rem, 3vw, 2.2rem); margin: 2rem auto 0; } .inquiry h1 { margin-top: 0; font-size: clamp(1.8rem, 4vw, 2.6rem); } .inquiry form > div { margin-top: 1rem; } .inquiry label { display: block; font-weight: 700; margin-bottom: 0.35rem; } .inquiry input[type="text"], .inquiry input[type="email"], .inquiry input[type="tel"], .inquiry textarea { width: 100%; border: 2px solid var(--line); border-radius: 10px; padding: 0.7rem 0.85rem; font: inherit; background: #fff; color: var(--ink); } .inquiry input:focus, .inquiry textarea:focus { border-color: var(--teal); outline: 3px solid var(--lime); outline-offset: 1px; } .inquiry input[type="checkbox"] { width: 1.2em; height: 1.2em; accent-color: var(--teal); } .inquiry button[type="submit"] { margin-top: 1.2rem; border-radius: 999px; padding: 0.8rem 1.5rem; font: inherit; font-weight: 700; background: var(--lime); color: var(--teal-deep); border: 2px solid transparent; cursor: pointer; } .inquiry button[type="submit"]:disabled { opacity: 0.55; cursor: not-allowed; } /* Error page */ .error-card { background: var(--paper); border: 1px solid var(--line); border-radius: 20px; padding: 2rem; margin-top: 2rem; } /* Responsive */ @media (max-width: 900px) { .hero-inner { grid-template-columns: 1fr; } .measure-list { grid-template-columns: 1fr; } .print-grid { grid-template-columns: 1fr; } .audit-band { grid-template-columns: 1fr; } .audit-band .btn { justify-self: start; } .inquiry-grid { grid-template-columns: 1fr; } .footer-inner { grid-template-columns: 1fr; } .nav-toggle { display: inline-block; } .site-nav { position: fixed; inset: 0 0 0 auto; width: min(20rem, 85vw); background: var(--teal-deep); padding: 4.5rem 1.4rem 1.4rem; transform: translateX(105%); transition: transform 0.22s ease-out; z-index: 50; box-shadow: -18px 0 44px rgba(0, 0, 0, 0.35); } .site-nav[data-open="true"] { transform: none; } .site-nav ul { flex-direction: column; gap: 0.5rem; } .site-nav a { display: block; padding: 0.8rem 1rem; } .nav-close { position: absolute; top: 1rem; right: 1rem; } .nav-scrim { position: fixed; inset: 0; background: rgba(11, 32, 37, 0.55); z-index: 40; } .nav-scrim[hidden] { display: none; } } /* Instrumenty z panelu Sensory (podgląd demonstracyjny w treści CMS) */ .kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-top: 1.4rem; } .kpi-card { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 1.1rem 1.2rem; box-shadow: 0 10px 24px rgba(16, 44, 50, 0.08); } .kpi-card b { display: block; font-family: var(--font-display); font-variant-numeric: tabular-nums; font-size: 1.9rem; line-height: 1.1; color: var(--teal); } .kpi-card span { font-size: 0.92rem; color: var(--ink-soft); } .machine-row { display: grid; grid-template-columns: 1fr auto; gap: 0.35rem 1rem; align-items: center; padding: 0.85rem 0; border-top: 1px solid var(--line); } .machine-row:first-of-type { border-top: 0; } .machine-row b { color: var(--ink); } .machine-row .sub { display: block; color: var(--ink-soft); font-size: 0.88rem; font-weight: 400; } .pill { display: inline-block; font-size: 0.78rem; font-weight: 700; letter-spacing: 0.07em; padding: 0.3rem 0.75rem; border-radius: 999px; white-space: nowrap; } .pill--ok { background: #ddf0c8; color: #2c4a00; } .pill--bad { background: #fbe0d6; color: #8f2b16; } .pill--idle { background: #f4e9c8; color: #6b4e00; } .bar { height: 0.65rem; background: #dde5dd; border-radius: 999px; overflow: hidden; grid-column: 1 / -1; } .bar > span { display: block; height: 100%; border-radius: 999px; } .bar > span.good { background: #3f9e4d; } .bar > span.bad { background: #d95f4b; } .stripes { display: flex; height: 15px; border-radius: 999px; overflow: hidden; background: #dde5dd; margin-top: 0.5rem; } .stripes i { display: block; height: 100%; } .stripes .w { background: #3f9e4d; flex: 5; } .stripes .s { background: #d9a441; flex: 2; } .stripes .p { background: #d95f4b; flex: 3; } .timeline-legend { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; font-size: 0.88rem; color: var(--ink-soft); margin-top: 0.8rem; } .timeline-legend i { display: inline-block; width: 0.75rem; height: 0.75rem; border-radius: 3px; margin-right: 0.35rem; vertical-align: baseline; } @media (max-width: 900px) { .kpi-row { grid-template-columns: repeat(2, 1fr); } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.001s !important; transition-duration: 0.001s !important; } .counter-panel svg.signal path.trace { animation: none; stroke-dashoffset: 0; } }