diff --git a/packages/secubox-picobrew/www/picobrew/index.html b/packages/secubox-picobrew/www/picobrew/index.html index 87e9d306..8c280ec4 100644 --- a/packages/secubox-picobrew/www/picobrew/index.html +++ b/packages/secubox-picobrew/www/picobrew/index.html @@ -12,38 +12,29 @@ :root{ --p31-dim:#6b7b8b; --bg-dark:#0d1117; --bg-card:rgba(30,40,55,.8); --bg-row:rgba(20,30,45,.6); --border:rgba(100,150,200,.2); --text:#e8e6d9; - --cyan:#00d4ff; --red:#ff4466; --orange:#ff9944; --yellow:#ffcc00; - --green:#00dd44; --blue:#4488ff; --purple:#a371f7; + --cyan:#00d4ff; --red:#ff4466; --green:#00dd44; } body{font-family:'Courier Prime',monospace;color:var(--text);background:var(--bg-dark)} - .header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.5rem} - .header h1{font-size:1.4rem;color:var(--cyan);text-shadow:0 0 10px var(--cyan)} - .header .sub{font-size:.72rem;color:var(--p31-dim);letter-spacing:.05em;margin-top:.25rem} - .btn-group{display:flex;flex-wrap:wrap;gap:.4rem} - .btn{font-family:inherit;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em; - text-decoration:none;color:var(--text);background:var(--bg-row);border:1px solid var(--border); - border-radius:6px;padding:.45rem .8rem;cursor:pointer;transition:border-color .15s,box-shadow .15s} + .main{display:flex;flex-direction:column;height:100vh;box-sizing:border-box} + .bar{display:flex;justify-content:space-between;align-items:center;gap:.6rem;flex-wrap:wrap; + padding:.55rem .8rem;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;margin-bottom:.6rem} + .bar h1{font-size:1.05rem;color:var(--cyan);text-shadow:0 0 8px var(--cyan);margin:0} + .bar .st{font-size:.72rem;color:var(--p31-dim);margin-left:.6rem} + .dot{display:inline-block;width:.6rem;height:.6rem;border-radius:50%;background:var(--p31-dim);margin-right:.3rem;vertical-align:middle} + .dot.on{background:var(--green);box-shadow:0 0 6px var(--green)} .dot.off{background:var(--red)} + .btns{display:flex;flex-wrap:wrap;gap:.4rem} + .btn{font-family:inherit;font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;text-decoration:none; + color:var(--text);background:var(--bg-row);border:1px solid var(--border);border-radius:6px; + padding:.4rem .75rem;cursor:pointer;transition:border-color .15s,box-shadow .15s} .btn:hover{border-color:var(--cyan);box-shadow:0 0 8px rgba(0,212,255,.4)} .btn.primary{border-color:var(--cyan);color:var(--cyan)} .btn[disabled]{opacity:.4;cursor:not-allowed} - .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.75rem;margin-bottom:1rem} - .stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:8px; - padding:.7rem;text-align:center;backdrop-filter:blur(10px)} - .stat-card .value{font-size:1.3rem;font-weight:bold;text-shadow:0 0 10px currentColor;color:var(--text)} - .stat-card .label{font-size:.6rem;color:var(--p31-dim);letter-spacing:.1em;margin-top:.2rem;text-transform:uppercase} - .stat-card.ok .value{color:var(--green)} .stat-card.off .value{color:var(--red)} - .stat-card.cyan .value{color:var(--cyan)} .stat-card.yellow .value{color:var(--yellow)} - .card{background:var(--bg-card);border:1px solid var(--border);border-radius:8px; - padding:1rem;margin-bottom:1rem;backdrop-filter:blur(10px)} - .card h3{font-size:.8rem;color:var(--cyan);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.6rem} - .card p{font-size:.8rem;color:var(--p31-dim);line-height:1.5} - .kv{display:flex;justify-content:space-between;gap:1rem;padding:.35rem 0;border-bottom:1px solid var(--border);font-size:.82rem} - .kv:last-child{border-bottom:0} - .kv .k{color:var(--p31-dim)} .kv .v{font-variant-numeric:tabular-nums} - code{color:var(--cyan);font-size:.78rem} - .toast{position:fixed;bottom:1rem;right:1rem;background:var(--cyan);color:#07121a; - padding:.6rem 1rem;border-radius:6px;font-size:.8rem;opacity:0;pointer-events:none; - transition:opacity .2s;z-index:50} + .frame-wrap{flex:1;position:relative;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff} + iframe{width:100%;height:100%;border:0;display:block} + .placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center; + text-align:center;color:var(--p31-dim);font-size:.9rem;background:var(--bg-dark);padding:2rem} + .toast{position:fixed;bottom:1rem;right:1rem;background:var(--cyan);color:#07121a;padding:.6rem 1rem; + border-radius:6px;font-size:.8rem;opacity:0;pointer-events:none;transition:opacity .2s;z-index:50} .toast.show{opacity:1} .toast.error{background:var(--red);color:#fff} @media(max-width:768px){.main{margin-left:0}} @@ -53,100 +44,73 @@
-
+
-

🍺 PicoBrew

-
nœud de brassage · chargement…
+

🍺 PicoBrew

+ chargement…
-
- +
- + + ↗ Plein écran
-
- -
-
–
📦 Conteneur
-
–
⚙️ État
-
–
🔖 Version figée
-
–
🔥 Session
-
-

Détails

-
Adresse du conteneur–
-
Version upstream (SHA figé)–
-
Session de brassage active–
-
- -
-

Ă€ propos

-

Ce module redonne vie à un appareil PicoBrew dont le cloud constructeur est éteint depuis 2020, - via un conteneur qui parle son protocole. L'appareil est redirigé localement (DNS) vers ce nœud. - La version du serveur est figée : aucune mise à jour ne survient pendant un brassage.

+
+ +
Conteneur à l'arrêt — démarre-le pour afficher l'interface PicoBrew.