Panelowy jezyk strony: statusy, paski tempa, os przestojow, fonty, wersjonowanie assetow

This commit is contained in:
FDMTech
2026-10-11 21:26:27 +02:00
parent 1b25943bb5
commit 2526b73cfa
5 changed files with 138 additions and 4 deletions
+23
View File
@@ -0,0 +1,23 @@
-- Seed v4 strony `home`: instrument i sekcje w języku panelu Sensory
-- (karty KPI, wiersze statusów, paski tempa, oś przestojów). Wszystko z tagiem demo.
-- TYLKO elementy dialektu CMS (div/p/span/h1-h6/a/ul/ol/li/strong/em/table...).
UPDATE cms_pages SET
title = 'Strona główna',
draft_json = '{}',
draft_html = '',
draft_css = '',
draft_seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
draft_seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
published_html = '<div class="hero" aria-labelledby="hero-title"><div class="hero-inner"><div><h1 id="hero-title">Porządek w pomiarach Twojej produkcji</h1><p class="hero-lede">FDMTech buduje <strong>BlackBox Sensory</strong>, licznik produkcji przy maszynie. Zlicza sztuki z czujników, zapisuje je z czasem i pokazuje, kiedy maszyna pracuje, a kiedy stoi.</p><p class="hero-actions"><a class="btn btn-primary" href="/kontakt">Zapytaj o bezpłatny audyt</a><a class="btn btn-ghost" href="#panel">Zobacz panel</a></p></div><div class="counter-panel"><div class="counter-row"><div class="counter-cell"><b>1 024</b><span>szt. w sesji*</span></div><div class="counter-cell"><b>750</b><span>szt./h tempa*</span></div><div class="counter-cell"><b>PRACUJE</b><span>status*</span></div></div><span class="demo-tag">* podgląd demonstracyjny</span></div></div></div><div class="wrap"><div class="section" id="panel" aria-labelledby="panel-title"><h2 id="panel-title">Tak wygląda panel</h2><p><span class="demo-tag">Podgląd demonstracyjny</span></p><p>Statusy maszyn, tempo względem taktu i oś przestojów — na żywo, z dowolnego miejsca.</p><div class="machine-row"><div><b>Maszyna arkuszowa B2</b><small>nakład 12 400 egz.</small><div class="bar"><span class="good w82"></span></div></div><span class="pill pill--ok">PRACUJE</span></div><div class="machine-row"><div><b>Linia oprawy</b><small>klejenie · czeka na tekturę</small><div class="bar"><span class="bad w31"></span></div></div><span class="pill pill--bad">PRZESTÓJ</span></div><div class="stripes"><i class="w"></i><i class="s"></i><i class="w"></i><i class="p"></i><i class="w"></i></div><p class="timeline-legend"><span><i class="w"></i>Praca</span><span><i class="s"></i>Przerwa &gt; 2 min</span><span><i class="p"></i>Przerwa &gt; 10 min</span></p></div><div class="section" id="pomiary" aria-labelledby="pomiary-title"><h2 id="pomiary-title">Co mierzy BlackBox</h2><p>BlackBox Sensory zlicza impulsy z czujników przy maszynie i zamienia je na sztuki. Z pomiaru powstają liczba produkcji, tempo, czas pracy i przestoje.</p><ul class="measure-list"><li><h3>Liczba sztuk</h3><p>Impulsy z czujnika optycznego lub enkodera, przeliczone na sztuki. Licznik całkowity i licznik sesji.</p></li><li><h3>Takt i tempo</h3><p>Odstępy między impulsami dają takt maszyny i tempo w sztukach na godzinę, do porównania z normą.</p></li><li><h3>Praca i przestoje</h3><p>Strumień impulsów rozróżnia pracę od postoju. Przerwy w sygnale trafiają do rejestru z czasem trwania.</p></li><li><h3>Znacznik czasu</h3><p>Każdy odczyt niesie czas, więc wracasz do konkretnej zmiany, godziny i nakładu.</p></li></ul></div><div class="section" aria-labelledby="druk-title"><div class="print-grid"><div><h2 id="druk-title">Drukarnie i powtarzalna produkcja książek</h2><p>Ten sam tytuł wraca po miesiącach — porównaj tempo i przestoje z poprzednim nakładem zamiast zgadywać.</p><ul><li>Ten sam zestaw pomiarów dla pierwszego nakładu i dodruku.</li><li>Liczba sztuk i tempo z czasem, do własnej dokumentacji partii.</li><li>Audyt zaczyna się od Twoich potrzeb, nie od cennika.</li></ul></div><div><h2>Od czego zacząć</h2><p>Opowiedz, co produkujesz i co chcesz sprawdzać. Oddzwaniamy z propozycją rozmowy.</p><p><a href="/kontakt">Umów bezpłatny audyt</a></p></div></div></div><div class="audit-band" aria-labelledby="audyt-title"><div><h2 id="audyt-title">Bezpłatny audyt</h2><p>Zapytanie trafia do zespołu FDMTech. Odpowiadamy zwykle w ciągu jednego dnia roboczego.</p></div><a class="btn btn-primary" href="/kontakt">Przejdź do formularza</a></div><div class="section" aria-labelledby="kontakt-title"><h2 id="kontakt-title">Kontakt</h2><p>FDMTech Bartosz Pulchny, Krakowska 67/1, 71-017 Szczecin, NIP 852-251-80-36, tel. <a href="tel:+48533873555">533 873 555</a>. Pełny formularz na stronie <a href="/kontakt">Kontakt</a>.</p></div></div>',
published_css = '.w82{width:82%}.w31{width:31%}',
published_title = 'FDMTech — monitoring produkcji',
seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
status = 'published',
published_at = UTC_TIMESTAMP(),
version = 4,
updated_by = 1,
updated_at = UTC_TIMESTAMP()
WHERE slug = 'home';
INSERT INTO cms_revisions (page_id, version, snapshot_json, created_by, created_at)
SELECT id, 4, '{}', 1, UTC_TIMESTAMP() FROM cms_pages WHERE slug = 'home';
+23
View File
@@ -0,0 +1,23 @@
-- Seed v4 strony `home`: instrument i sekcje w języku panelu Sensory
-- (karty KPI, wiersze statusów, paski tempa, oś przestojów). Wszystko z tagiem demo.
-- TYLKO elementy dialektu CMS (div/p/span/h1-h6/a/ul/ol/li/strong/em/table...).
UPDATE cms_pages SET
title = 'Strona główna',
draft_json = '{}',
draft_html = '',
draft_css = '',
draft_seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
draft_seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
published_html = '<div class="hero" aria-labelledby="hero-title"><div class="hero-inner"><div><h1 id="hero-title">Porządek w pomiarach Twojej produkcji</h1><p class="hero-lede">FDMTech buduje <strong>BlackBox Sensory</strong>, licznik produkcji przy maszynie. Zlicza sztuki z czujników, zapisuje je z czasem i pokazuje, kiedy maszyna pracuje, a kiedy stoi.</p><p class="hero-actions"><a class="btn btn-primary" href="/kontakt">Zapytaj o bezpłatny audyt</a><a class="btn btn-ghost" href="#panel">Zobacz panel</a></p></div><div class="counter-panel"><div class="counter-row"><div class="counter-cell"><b>1 024</b><span>szt. w sesji*</span></div><div class="counter-cell"><b>750</b><span>szt./h tempa*</span></div><div class="counter-cell"><b>PRACUJE</b><span>status*</span></div></div><span class="demo-tag">* podgląd demonstracyjny</span></div></div></div><div class="wrap"><div class="section" id="panel" aria-labelledby="panel-title"><h2 id="panel-title">Tak wygląda panel</h2><p><span class="demo-tag">Podgląd demonstracyjny</span></p><p>Statusy maszyn, tempo względem taktu i oś przestojów — na żywo, z dowolnego miejsca.</p><div class="machine-row"><div><b>Maszyna arkuszowa B2</b><span class="sub">nakład 12 400 egz.</span><div class="bar"><span class="good w82"></span></div></div><span class="pill pill--ok">PRACUJE</span></div><div class="machine-row"><div><b>Linia oprawy</b><span class="sub">klejenie · czeka na tekturę</span><div class="bar"><span class="bad w31"></span></div></div><span class="pill pill--bad">PRZESTÓJ</span></div><div class="stripes"><i class="w"></i><i class="s"></i><i class="w"></i><i class="p"></i><i class="w"></i></div><p class="timeline-legend"><span><i class="w"></i>Praca</span><span><i class="s"></i>Przerwa &gt; 2 min</span><span><i class="p"></i>Przerwa &gt; 10 min</span></p></div><div class="section" id="pomiary" aria-labelledby="pomiary-title"><h2 id="pomiary-title">Co mierzy BlackBox</h2><p>BlackBox Sensory zlicza impulsy z czujników przy maszynie i zamienia je na sztuki. Z pomiaru powstają liczba produkcji, tempo, czas pracy i przestoje.</p><ul class="measure-list"><li><h3>Liczba sztuk</h3><p>Impulsy z czujnika optycznego lub enkodera, przeliczone na sztuki. Licznik całkowity i licznik sesji.</p></li><li><h3>Takt i tempo</h3><p>Odstępy między impulsami dają takt maszyny i tempo w sztukach na godzinę, do porównania z normą.</p></li><li><h3>Praca i przestoje</h3><p>Strumień impulsów rozróżnia pracę od postoju. Przerwy w sygnale trafiają do rejestru z czasem trwania.</p></li><li><h3>Znacznik czasu</h3><p>Każdy odczyt niesie czas, więc wracasz do konkretnej zmiany, godziny i nakładu.</p></li></ul></div><div class="section" aria-labelledby="druk-title"><div class="print-grid"><div><h2 id="druk-title">Drukarnie i powtarzalna produkcja książek</h2><p>Ten sam tytuł wraca po miesiącach — porównaj tempo i przestoje z poprzednim nakładem zamiast zgadywać.</p><ul><li>Ten sam zestaw pomiarów dla pierwszego nakładu i dodruku.</li><li>Liczba sztuk i tempo z czasem, do własnej dokumentacji partii.</li><li>Audyt zaczyna się od Twoich potrzeb, nie od cennika.</li></ul></div><div><h2>Od czego zacząć</h2><p>Opowiedz, co produkujesz i co chcesz sprawdzać. Oddzwaniamy z propozycją rozmowy.</p><p><a href="/kontakt">Umów bezpłatny audyt</a></p></div></div></div><div class="audit-band" aria-labelledby="audyt-title"><div><h2 id="audyt-title">Bezpłatny audyt</h2><p>Zapytanie trafia do zespołu FDMTech. Odpowiadamy zwykle w ciągu jednego dnia roboczego.</p></div><a class="btn btn-primary" href="/kontakt">Przejdź do formularza</a></div><div class="section" aria-labelledby="kontakt-title"><h2 id="kontakt-title">Kontakt</h2><p>FDMTech Bartosz Pulchny, Krakowska 67/1, 71-017 Szczecin, NIP 852-251-80-36, tel. <a href="tel:+48533873555">533 873 555</a>. Pełny formularz na stronie <a href="/kontakt">Kontakt</a>.</p></div></div>',
published_css = '.w82{width:82%}.w31{width:31%}',
published_title = 'FDMTech — monitoring produkcji',
seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
status = 'published',
published_at = UTC_TIMESTAMP(),
version = 5,
updated_by = 1,
updated_at = UTC_TIMESTAMP()
WHERE slug = 'home';
INSERT INTO cms_revisions (page_id, version, snapshot_json, created_by, created_at)
SELECT id, 5, '{}', 1, UTC_TIMESTAMP() FROM cms_pages WHERE slug = 'home';
+2 -2
View File
@@ -54,12 +54,12 @@ final class View
. '<title>' . $e($meta['title']) . '</title><meta name="description" content="' . $e($meta['description']) . '">'
. '<meta name="robots" content="' . $e($meta['robots']) . '">'
. ($meta['canonical'] !== '' ? '<link rel="canonical" href="' . $e($meta['canonical']) . '">' : '')
. '<link rel="stylesheet" href="/assets/css/site.css?v=2">' . $cmsStyleTag . '</head><body>'
. '<link rel="stylesheet" href="/assets/css/site.css?v=4">' . $cmsStyleTag . '</head><body>'
. '<header><a href="/">' . $e($site['name']) . '</a><nav aria-label="Nawigacja główna">' . $navigation . '</nav></header>'
. $content . '<footer><p>' . $e($site['name']) . '</p>'
. ($site['contact_email'] !== '' ? '<a href="mailto:' . $e($site['contact_email']) . '">' . $e($site['contact_email']) . '</a>' : '')
. ($site['contact_phone'] !== '' ? '<p>' . $e($site['contact_phone']) . '</p>' : '')
. '</footer><script src="/assets/js/site.js?v=2" defer></script></body></html>';
. '</footer><script src="/assets/js/site.js?v=4" defer></script></body></html>';
}
public static function form(array $data): string
+88
View File
@@ -542,6 +542,94 @@ button.btn-primary:disabled { opacity: 0.55; cursor: not-allowed; }
.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 {
+2 -2
View File
@@ -16,7 +16,7 @@ $isError = ($statusCode ?? 200) >= 400;
<?php if (($meta['canonical'] ?? '') !== '') : ?>
<link rel="canonical" href="<?= $e($meta['canonical']) ?>">
<?php endif; ?>
<link rel="stylesheet" href="/assets/css/site.css?v=2">
<link rel="stylesheet" href="/assets/css/site.css?v=4">
<?= $cmsStyleTag ?>
<link rel="icon" type="image/svg+xml" href="/assets/img/logo-pulse.svg">
</head>
@@ -81,6 +81,6 @@ $isError = ($statusCode ?? 200) >= 400;
<span>BlackBox Sensory to nazwa produktu FDMTech.</span>
</div>
</footer>
<script src="/assets/js/site.js?v=2" nonce="<?= $e($nonce ?? '') ?>" defer></script>
<script src="/assets/js/site.js?v=4" nonce="<?= $e($nonce ?? '') ?>" defer></script>
</body>
</html>