Design system refactor: shared CSS tokens, cleaner customer/admin pages, kiosk name privacy, v0.9.1

This commit is contained in:
Troll (Hermes Agent) 2026-08-31 03:17:14 +00:00
parent 2f5050b29f
commit cc27c5db48
10 changed files with 1490 additions and 1224 deletions

View file

@ -7,193 +7,20 @@
{% if refresh_seconds and refresh_seconds > 0 %}
<meta http-equiv="refresh" content="{{ refresh_seconds }}">
{% endif %}
<style>
*{box-sizing:border-box;}
html,body{
margin:0;
padding:0;
height:100%;
font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
background:linear-gradient(135deg,#0f172a 0%,#1e3a8a 50%,#0f172a 100%);
color:#f3f4f6;
overflow:hidden;
}
.kiosk{
height:100%;
display:flex;
flex-direction:column;
align-items:center;
justify-content:space-between;
padding:2vh 3vw;
text-align:center;
}
.banner{
width:100%;
max-height:22vh;
object-fit:contain;
border-radius:1rem;
box-shadow:0 10px 40px rgba(0,0,0,.4);
}
.status-pill{
display:inline-block;
margin-top:1.5vh;
padding:.6rem 1.4rem;
border-radius:9999px;
font-weight:700;
font-size:1.2rem;
text-transform:uppercase;
letter-spacing:.05em;
}
.status-open{background:#10b981;color:#000;}
.status-closed{background:#ef4444;color:#000;}
.stage{
flex:1;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
width:100%;
max-width:900px;
margin:2vh 0;
}
.slide{
width:100%;
animation:fadeIn .8s ease;
}
@keyframes fadeIn{
from{opacity:0;transform:translateY(20px);}
to{opacity:1;transform:translateY(0);}
}
.slide.hidden{display:none;}
h1{
margin:0 0 1.5vh 0;
font-size:clamp(2rem,5vw,3.5rem);
color:#60a5fa;
}
.qr-code{
max-height:44vh;
max-width:44vh;
width:auto;
border-radius:1rem;
box-shadow:0 10px 40px rgba(0,0,0,.4);
background:#fff;
padding:.6rem;
}
.qr-caption{
margin-top:1.5vh;
font-size:clamp(1.1rem,2.5vw,1.6rem);
color:#93c5fd;
}
.price-card{
background:rgba(31,41,55,.85);
border:1px solid rgba(96,165,250,.25);
border-radius:1.2rem;
padding:3vh 4vw;
box-shadow:0 15px 50px rgba(0,0,0,.35);
width:100%;
}
.price-card h2{
margin:0 0 2vh 0;
font-size:clamp(1.6rem,4vw,2.6rem);
color:#fbbf24;
}
.price-list{
list-style:none;
margin:0;
padding:0;
text-align:left;
}
.price-list li{
display:flex;
justify-content:space-between;
align-items:center;
border-bottom:1px solid rgba(147,197,253,.2);
padding:1.2vh 0;
font-size:clamp(1.2rem,3vw,1.8rem);
}
.price-list li:last-child{border-bottom:none;}
.price-list .label{color:#e5e7eb;}
.price-list .amount{font-weight:700;color:#fbbf24;}
.price-empty{
font-size:1.3rem;
color:#9ca3af;
}
.queue-card{
background:rgba(31,41,55,.85);
border:1px solid rgba(96,165,250,.25);
border-radius:1.2rem;
padding:3vh 4vw;
box-shadow:0 15px 50px rgba(0,0,0,.35);
width:100%;
max-height:62vh;
display:flex;
flex-direction:column;
}
.queue-card h2{
margin:0 0 2vh 0;
font-size:clamp(1.6rem,4vw,2.6rem);
color:#fbbf24;
}
.queue-list{
list-style:none;
margin:0;
padding:0;
text-align:left;
overflow-y:auto;
flex:1;
}
.queue-list li{
display:flex;
justify-content:space-between;
align-items:center;
border-bottom:1px solid rgba(147,197,253,.2);
padding:1.4vh 0;
font-size:clamp(1.2rem,2.8vw,1.7rem);
}
.queue-list li:last-child{border-bottom:none;}
.queue-list .customer{color:#e5e7eb;font-weight:600;}
.queue-list .status{font-weight:700;color:#60a5fa;text-align:right;}
.queue-empty{
font-size:1.4rem;
color:#9ca3af;
text-align:center;
margin:auto 0;
}
.queue-note{
font-size:1rem;
color:#9ca3af;
margin-top:1.5vh;
text-align:center;
}
.footer{
font-size:1rem;
color:#9ca3af;
}
.dots{
display:flex;
gap:.6rem;
justify-content:center;
margin-top:1vh;
}
.dot{
width:12px;
height:12px;
border-radius:50%;
background:#374151;
transition:background .3s;
}
.dot.active{background:#60a5fa;}
</style>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@500;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='css/booth.css') }}">
</head>
<body>
<body class="booth-page kiosk-page">
<div class="kiosk">
<div class="header">
{% if booth_open %}
<img src="{{ url_for('static', filename='Trollgorithm_booth.jpg') }}" alt="Trollgorithm Theme Song Booth" class="banner">
<div class="status-pill status-open">Booth is Open</div>
<img src="{{ url_for('static', filename='Trollgorithm_booth.jpg') }}" alt="Trollgorithm Theme Song Booth" class="kiosk-banner">
<div class="status-pill open">Booth is Open</div>
{% else %}
<img src="{{ url_for('static', filename='Booth_closed.png') }}" alt="Booth Closed" class="banner">
<div class="status-pill status-closed">Booth is Closed</div>
<img src="{{ url_for('static', filename='Booth_closed.png') }}" alt="Booth Closed" class="kiosk-banner">
<div class="status-pill closed">Booth is Closed</div>
{% endif %}
</div>