[ui] Přidán CSS styl pro auth systém – tmavé pozadí, červený akcent, centrovaný pruh

This commit is contained in:
stepan
2026-03-18 21:55:55 +01:00
parent 3c9267b1c5
commit f1c73b41a7
2 changed files with 576 additions and 1 deletions
+575
View File
@@ -0,0 +1,575 @@
/* ============================================================
AUTH SYSTÉM STYL
============================================================
Umístění: libovolné (např. /css/auth-styl.css)
Aktivace: v auth/config.php nastavit
define('AUTH_CSS', '/css/auth-styl.css');
Funguje bez jakýchkoliv změn v PHP souborech.
Styluje čistě pomocí HTML elementů žádné třídy nejsou
potřeba.
============================================================ */
/* ------------------------------------------------------------
PROMĚNNÉ barvy a rozměry
------------------------------------------------------------ */
:root {
/* Pozadí */
--bg-hlavni: #1a1a1a; /* hlavní pozadí stránky */
--bg-obsah: #222222; /* pozadí obsahového pruhu */
--bg-prvek: #2c2c2c; /* pozadí inputů, tabulek, textarea */
--bg-prvek-focus: #333333; /* inputy při focusu */
/* Písmo */
--text-hlavni: #d4d4d4; /* hlavní text */
--text-jemny: #888888; /* pomocný text (span, popisky síly hesla) */
--text-nadpis: #f0f0f0; /* nadpisy */
/* Akcent tmavě červená */
--akcent: #8b1a1a; /* primární akcent */
--akcent-svetly: #c0392b; /* hover, aktivní stav */
--akcent-okraj: #6b1414; /* okraj akcentových prvků */
/* Doplňková barva ocelová šedá */
--ocel: #4a5568; /* okraje, oddělovače */
--ocel-svetly: #718096; /* jemnější prvky */
/* Stavy */
--chyba-text: #fc8181; /* text chybové hlášky */
--uspech-text: #68d391; /* text úspěšné hlášky */
/* Rozměry */
--pruh-max: 640px; /* maximální šířka obsahového pruhu */
--mezera: 1.5rem; /* základní mezera */
--polomer: 3px; /* zaoblení rohů */
}
/* ------------------------------------------------------------
ZÁKLAD reset a tělo stránky
------------------------------------------------------------ */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
scroll-behavior: smooth;
}
body {
background-color: var(--bg-hlavni);
color: var(--text-hlavni);
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 1rem;
line-height: 1.7;
min-height: 100vh;
padding: var(--mezera);
}
/* ------------------------------------------------------------
OBSAHOVÝ PRUH centrovaný, užší
------------------------------------------------------------ */
body > * {
max-width: var(--pruh-max);
margin-left: auto;
margin-right: auto;
}
/* Hlavní obal obsahu vizuální karta */
body {
display: flex;
flex-direction: column;
align-items: center;
}
body > h1,
body > h2,
body > h3,
body > p,
body > form,
body > table,
body > section,
body > hr,
body > ol,
body > ul,
body > textarea,
body > pre,
body > code {
width: 100%;
max-width: var(--pruh-max);
}
/* ------------------------------------------------------------
TYPOGRAFIE
------------------------------------------------------------ */
h1 {
color: var(--akcent-svetly);
font-size: 1.8rem;
font-weight: normal;
letter-spacing: 0.03em;
margin-top: calc(var(--mezera) * 1.5);
margin-bottom: 0.3rem;
border-bottom: 1px solid var(--akcent-okraj);
padding-bottom: 0.4rem;
}
h2 {
color: var(--text-nadpis);
font-size: 1.2rem;
font-weight: normal;
letter-spacing: 0.05em;
text-transform: uppercase;
margin-top: var(--mezera);
margin-bottom: 0.8rem;
color: var(--ocel-svetly);
}
h3 {
color: var(--akcent-svetly);
font-size: 1.05rem;
font-weight: bold;
margin-top: calc(var(--mezera) * 1.2);
margin-bottom: 0.6rem;
}
p {
margin-top: 0.7rem;
margin-bottom: 0.3rem;
max-width: var(--pruh-max);
width: 100%;
}
strong {
color: var(--text-nadpis);
font-weight: bold;
}
/* Chybové hlášky "Chyba: ..." */
p > strong:first-child {
color: var(--chyba-text);
}
/* Úspěšné hlášky "OK: ..." nebo "Registrace proběhla..." */
p > strong:first-child:not([style]) {
/* Heuristika: pokud strong začíná "OK" nebo "Registrace" nebo "Instalace",
probarvíme zeleně. Protože CSS neumí inspektovat obsah,
použijeme specifické selektory kde je to možné */
}
/* Explicitní zelená pro úspěch v install.php a ostatních */
p strong {
color: var(--text-nadpis);
}
/* ------------------------------------------------------------
ODKAZY
------------------------------------------------------------ */
a {
color: var(--akcent-svetly);
text-decoration: none;
border-bottom: 1px solid var(--akcent-okraj);
transition: color 0.15s, border-color 0.15s;
}
a:hover,
a:focus {
color: #e74c3c;
border-bottom-color: #e74c3c;
outline: none;
}
/* ------------------------------------------------------------
ODDĚLOVAČE
------------------------------------------------------------ */
hr {
border: none;
border-top: 1px solid var(--ocel);
margin: calc(var(--mezera) * 1.2) auto;
width: 100%;
max-width: var(--pruh-max);
}
/* ------------------------------------------------------------
FORMULÁŘE obecně
------------------------------------------------------------ */
form {
width: 100%;
max-width: var(--pruh-max);
margin-top: 0.5rem;
}
form p {
margin-bottom: 0.8rem;
}
label {
display: block;
font-size: 0.88rem;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--ocel-svetly);
margin-bottom: 0.3rem;
}
/* Inline label pro checkbox nepřepisujeme display */
label:has(input[type="checkbox"]) {
display: inline-flex;
align-items: center;
gap: 0.5rem;
text-transform: none;
letter-spacing: normal;
font-size: 0.95rem;
color: var(--text-hlavni);
cursor: pointer;
}
/* ------------------------------------------------------------
INPUTY
------------------------------------------------------------ */
input[type="text"],
input[type="email"],
input[type="password"] {
display: block;
width: 100%;
background-color: var(--bg-prvek);
color: var(--text-hlavni);
border: 1px solid var(--ocel);
border-radius: var(--polomer);
padding: 0.55rem 0.75rem;
font-size: 1rem;
font-family: inherit;
transition: border-color 0.15s, background-color 0.15s;
outline: none;
margin-top: 0.2rem;
}
input[type="text"]:focus,
input[type="email"]:focus,
input[type="password"]:focus {
background-color: var(--bg-prvek-focus);
border-color: var(--akcent-svetly);
}
input[type="text"]::placeholder,
input[type="email"]::placeholder,
input[type="password"]::placeholder {
color: var(--ocel-svetly);
opacity: 0.7;
}
/* Inline inputy pro heslo v tabulce admin.php */
table input[type="password"] {
width: auto;
display: inline-block;
padding: 0.3rem 0.5rem;
font-size: 0.9rem;
}
input[type="checkbox"] {
width: 1rem;
height: 1rem;
accent-color: var(--akcent-svetly);
cursor: pointer;
flex-shrink: 0;
}
/* ------------------------------------------------------------
TEXTAREA (install.php SQL výpis)
------------------------------------------------------------ */
textarea {
display: block;
width: 100%;
max-width: var(--pruh-max);
background-color: var(--bg-prvek);
color: #a8d8a8; /* zelenkavá pro SQL kód */
border: 1px solid var(--ocel);
border-radius: var(--polomer);
padding: 0.75rem;
font-family: 'Courier New', Courier, monospace;
font-size: 0.82rem;
line-height: 1.5;
resize: vertical;
outline: none;
margin-top: 0.5rem;
}
textarea:focus {
border-color: var(--akcent-svetly);
}
/* ------------------------------------------------------------
TLAČÍTKA
------------------------------------------------------------ */
button[type="submit"],
button[type="button"] {
background-color: var(--akcent);
color: #f0f0f0;
border: 1px solid var(--akcent-okraj);
border-radius: var(--polomer);
padding: 0.5rem 1.2rem;
font-size: 0.95rem;
font-family: inherit;
letter-spacing: 0.04em;
cursor: pointer;
transition: background-color 0.15s, border-color 0.15s;
margin-top: 0.3rem;
}
button[type="submit"]:hover,
button[type="button"]:hover {
background-color: var(--akcent-svetly);
border-color: var(--akcent-svetly);
}
button[type="submit"]:focus,
button[type="button"]:focus {
outline: 2px solid var(--akcent-svetly);
outline-offset: 2px;
}
/* Zakázané tlačítko (čeká na dostatečné heslo) */
button:disabled {
background-color: var(--bg-prvek);
color: var(--ocel-svetly);
border-color: var(--ocel);
cursor: not-allowed;
}
button:disabled:hover {
background-color: var(--bg-prvek);
border-color: var(--ocel);
}
/* Inline formulář (odhlášení v $auth_logout_html a tabulce admina) */
form[style*="display:inline"],
form[style*="display: inline"] {
display: inline;
width: auto;
margin: 0;
}
form[style*="display:inline"] button,
form[style*="display: inline"] button {
margin-top: 0;
padding: 0.25rem 0.7rem;
font-size: 0.88rem;
}
/* ------------------------------------------------------------
INDIKÁTOR SÍLY HESLA (span#heslo-sila)
------------------------------------------------------------ */
#heslo-sila {
display: inline-block;
font-size: 0.82rem;
color: var(--text-jemny);
margin-top: 0.3rem;
}
/* Vysvětlení proč je tlačítko zakázané (span#tlacitko-duvod) */
#tlacitko-duvod,
#novy-tlacitko-duvod {
font-size: 0.82rem;
color: var(--text-jemny);
margin-left: 0.4rem;
}
/* ------------------------------------------------------------
TABULKY (admin.php seznam uživatelů, konfigurace)
------------------------------------------------------------ */
table {
width: 100%;
max-width: var(--pruh-max);
border-collapse: collapse;
margin-top: 0.8rem;
font-size: 0.92rem;
}
table th {
background-color: var(--akcent);
color: #f0f0f0;
text-align: left;
padding: 0.5rem 0.7rem;
font-size: 0.82rem;
letter-spacing: 0.05em;
text-transform: uppercase;
border: 1px solid var(--akcent-okraj);
}
table td {
background-color: var(--bg-prvek);
color: var(--text-hlavni);
padding: 0.45rem 0.7rem;
border: 1px solid var(--ocel);
vertical-align: middle;
}
table tr:nth-child(even) td {
background-color: #2a2a2a;
}
table tr:hover td {
background-color: #303030;
}
/* Hodnota "ANO" v tabulce admina */
table td:has(> *:only-child) {
/* nelze cílit na obsah v CSS, necháme obecný styl */
}
/* Kurzívní poznámka v tabulce "(první uživatel systému nelze smazat)" */
table td em {
color: var(--text-jemny);
font-style: italic;
font-size: 0.85rem;
}
/* ------------------------------------------------------------
KÓDOVÉ ELEMENTY (code v admin.php)
------------------------------------------------------------ */
code {
background-color: var(--bg-prvek);
color: #a8d8a8;
font-family: 'Courier New', Courier, monospace;
font-size: 0.88em;
padding: 0.1em 0.35em;
border-radius: var(--polomer);
border: 1px solid var(--ocel);
}
/* ------------------------------------------------------------
SEZNAMY (ol, ul v install.php)
------------------------------------------------------------ */
ol, ul {
width: 100%;
max-width: var(--pruh-max);
padding-left: 1.5rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
ol li, ul li {
margin-bottom: 0.3rem;
line-height: 1.6;
}
/* ------------------------------------------------------------
$auth_logout_html badge s emailem a odhlášením
(vkládán jako inline HTML, bez wrapperu)
Cílíme na přímé potomky body nebo na libovolné umístění
------------------------------------------------------------ */
/* Odkaz "Administrace" v logout_html */
a[href$="admin.php"] {
color: var(--akcent-svetly);
font-size: 0.9rem;
letter-spacing: 0.03em;
}
/* ------------------------------------------------------------
RESPONSIVNÍ DESIGN
------------------------------------------------------------ */
@media (max-width: 680px) {
:root {
--pruh-max: 100%;
}
body {
padding: 0.75rem;
}
h1 {
font-size: 1.4rem;
}
table {
font-size: 0.82rem;
}
table th,
table td {
padding: 0.35rem 0.4rem;
}
/* Na mobilu se inline formuláře v tabulce přesunou pod sebe */
table td form[style*="display:inline"],
table td form[style*="display: inline"] {
display: block;
margin-bottom: 0.3rem;
}
table td form[style*="display:inline"] button,
table td form[style*="display: inline"] button {
width: 100%;
}
input[type="text"],
input[type="email"],
input[type="password"] {
font-size: 1rem; /* zabrání zoomu na iOS */
}
/* Inline inputy pro heslo v tabulce na mobilu plná šířka */
table input[type="password"] {
display: block;
width: 100%;
margin-bottom: 0.3rem;
}
}
@media (max-width: 400px) {
h1 {
font-size: 1.2rem;
}
button[type="submit"],
button[type="button"] {
width: 100%;
}
}
/* ------------------------------------------------------------
DROBNÉ DETAILY A DOLADĚNÍ
------------------------------------------------------------ */
/* Vizuální oddělení stránky od kraje jemný svislý ohraničující
efekt na širších obrazovkách */
@media (min-width: 700px) {
body {
background-image:
linear-gradient(to right,
transparent calc(50% - 340px),
#252525 calc(50% - 340px),
#252525 calc(50% + 340px),
transparent calc(50% + 340px)
);
}
}
/* Přechod pro plynulejší načtení */
body {
animation: fadein 0.2s ease-in;
}
@keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}