mirror of
https://github.com/KarnerF/SMPlusGui.git
synced 2026-10-06 07:00:24 +02:00
Add headers to all panels, thin scrollbar like PayloadManager
This commit is contained in:
1 parent
ee98813ea5
commit
f277a0f765
1 file changed
+9
-7
@@ -848,7 +848,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
"font-size='14' font-weight='bold' fill='%%2310b981'>SM</text>"
|
||||
"</svg>\">"
|
||||
"<style>"
|
||||
":root{--bg:#07090f;--surface:#0d111a;--surface2:#131927;--surface3:#1a2135;""--border:#1e2a42;--text:#e2e8f0;--dim:#64748b;--muted:#334155;""--accent:#10b981;--accent-dim:rgba(16,185,129,.12);""--accent-glow:rgba(16,185,129,.25);""--green:#34d399;--orange:#f59e0b;--red:#f87171;""--mono:ui-monospace,'Cascadia Code',Menlo,Consolas,monospace;""--sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;}""*{box-sizing:border-box;}""html{height:100%%;}""body{margin:0;height:100%%;overflow:hidden;background:var(--bg);""background-image:""radial-gradient(ellipse at 20%% 0%%,rgba(16,185,129,.07) 0%%,transparent 50%%),""radial-gradient(ellipse at 80%% 100%%,rgba(96,165,250,.04) 0%%,transparent 50%%);""color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.6;""display:flex;justify-content:center;}""@media(min-width:1280px){body{font-size:20px;}}"".card{width:100%%;max-width:1600px;display:flex;flex-direction:column;height:100%%;padding:12px 16px 0;}"".g2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;}"".g2.top{align-items:start;}""@media(max-width:720px){.g2{grid-template-columns:1fr;}}"".badge{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);""font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;}"".badge-dot{width:7px;height:7px;border-radius:50%%;background:var(--accent);""box-shadow:0 0 6px var(--accent),0 0 14px var(--accent-glow);""animation:pulse 2.5s ease-in-out infinite;}""@keyframes pulse{0%%,100%%{opacity:1;box-shadow:0 0 6px var(--accent),0 0 14px var(--accent-glow);}""50%%{opacity:.5;box-shadow:0 0 3px var(--accent);}}"".topbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:16px;}""h1{font-size:1.8rem;font-weight:800;margin:0;letter-spacing:-.02em;""background:linear-gradient(135deg,#e2e8f0 0%%,#94a3b8 100%%);""-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}"".sub{color:var(--dim);font-size:1rem;margin:0;}"".lang{display:flex;gap:4px;margin-top:6px;}"".lang a{font-family:var(--mono);font-size:.8rem;padding:5px 13px;""border-radius:6px;border:1px solid var(--border);color:var(--dim);text-decoration:none;""transition:all .15s;cursor:pointer;}"".lang a:hover{border-color:var(--accent);color:var(--accent);}"".lang a.active{border-color:var(--accent);color:var(--accent);""background:var(--accent-dim);font-weight:700;}"".statusbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:32px;}"".chip{display:flex;align-items:center;gap:8px;font-family:var(--mono);""font-size:.78rem;color:var(--dim);background:var(--surface);""border:1px solid var(--border);border-radius:8px;padding:7px 14px;}"".chip b{color:var(--text);}"".chip-live{width:7px;height:7px;border-radius:50%%;background:var(--green);""box-shadow:0 0 6px var(--green);animation:pulse 2s infinite;}"".chip-dead{width:7px;height:7px;border-radius:50%%;background:var(--red);opacity:.7;}"".section{background:var(--surface);border:1px solid var(--border);""border-radius:12px;padding:18px 22px;margin-bottom:12px;""box-shadow:0 2px 12px rgba(0,0,0,.3);}"".g2 .section,.g2.top .section,.g2.top details.section{margin-bottom:0;}"".section h2,.section>summary{font-size:.95rem;text-transform:uppercase;""letter-spacing:.06em;color:var(--text);margin:0 0 16px;font-family:var(--mono);""font-weight:700;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}"".section>summary{margin-bottom:0;}"".section>summary::-webkit-details-marker{display:none;}""details.section{margin-bottom:16px;}""details.section[open]>summary{margin-bottom:20px;}""details.section[open]>summary .arr{transform:rotate(90deg);}"".arr{display:inline-block;transition:transform .2s;}"".row{display:flex;align-items:center;justify-content:space-between;""padding:9px 0;border-bottom:1px solid var(--border);gap:16px;}"".row:last-child{border-bottom:none;}"".row>label:first-child{flex:1;font-size:.85rem;font-weight:500;color:var(--text);}""input[type=checkbox]{display:none;}"".switch{width:58px;height:30px;border-radius:15px;background:var(--surface3);""border:1px solid var(--border);position:relative;cursor:pointer;""flex-shrink:0;transition:background .2s,border-color .2s;}"".switch::after{content:'';position:absolute;top:5px;left:5px;width:18px;height:18px;""border-radius:50%%;background:var(--dim);transition:transform .2s,background .2s,box-shadow .2s;}""input[type=checkbox]:checked+.switch{background:var(--accent-dim);border-color:var(--accent);}""input[type=checkbox]:checked+.switch::after{transform:translateX(28px);""background:var(--accent);box-shadow:0 0 8px var(--accent-glow);}"".numfield{display:flex;align-items:center;justify-content:space-between;""padding:9px 0;border-bottom:1px solid var(--border);font-size:.85rem;gap:16px;}"".numfield:last-child{border-bottom:none;}"".numfield label{flex:1;font-weight:500;color:var(--text);}""input[type=number],input[type=Line truncated
|
||||
":root{--bg:#07090f;--surface:#0d111a;--surface2:#131927;--surface3:#1a2135;""--border:#1e2a42;--text:#e2e8f0;--dim:#64748b;--muted:#334155;""--accent:#10b981;--accent-dim:rgba(16,185,129,.12);""--accent-glow:rgba(16,185,129,.25);""--green:#34d399;--orange:#f59e0b;--red:#f87171;""--mono:ui-monospace,'Cascadia Code',Menlo,Consolas,monospace;""--sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;}""*{box-sizing:border-box;}""html{height:100%%;}""body{margin:0;height:100%%;overflow:hidden;background:var(--bg);""background-image:""radial-gradient(ellipse at 20%% 0%%,rgba(16,185,129,.07) 0%%,transparent 50%%),""radial-gradient(ellipse at 80%% 100%%,rgba(96,165,250,.04) 0%%,transparent 50%%);""color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.6;""display:flex;justify-content:center;}""@media(min-width:1280px){body{font-size:20px;}}"".card{width:100%%;max-width:1600px;display:flex;flex-direction:column;height:100%%;padding:12px 16px 0;}"".g2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;}"".g2.top{align-items:start;}""@media(max-width:720px){.g2{grid-template-columns:1fr;}}"".badge{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);""font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;}"".badge-dot{width:7px;height:7px;border-radius:50%%;background:var(--accent);""box-shadow:0 0 6px var(--accent),0 0 14px var(--accent-glow);""animation:pulse 2.5s ease-in-out infinite;}""@keyframes pulse{0%%,100%%{opacity:1;box-shadow:0 0 6px var(--accent),0 0 14px var(--accent-glow);}""50%%{opacity:.5;box-shadow:0 0 3px var(--accent);}}"".topbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:16px;}""h1{font-size:1.8rem;font-weight:800;margin:0;letter-spacing:-.02em;""background:linear-gradient(135deg,#e2e8f0 0%%,#94a3b8 100%%);""-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}"".sub{color:var(--dim);font-size:1rem;margin:0;}"".lang{display:flex;gap:4px;margin-top:6px;}"".lang a{font-family:var(--mono);font-size:.8rem;padding:5px 13px;""border-radius:6px;border:1px solid var(--border);color:var(--dim);text-decoration:none;""transition:all .15s;cursor:pointer;}"".lang a:hover{border-color:var(--accent);color:var(--accent);}"".lang a.active{border-color:var(--accent);color:var(--accent);""background:var(--accent-dim);font-weight:700;}"".statusbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:32px;}"".chip{display:flex;align-items:center;gap:8px;font-family:var(--mono);""font-size:.78rem;color:var(--dim);background:var(--surface);""border:1px solid var(--border);border-radius:8px;padding:7px 14px;}"".chip b{color:var(--text);}"".chip-live{width:7px;height:7px;border-radius:50%%;background:var(--green);""box-shadow:0 0 6px var(--green);animation:pulse 2s infinite;}"".chip-dead{width:7px;height:7px;border-radius:50%%;background:var(--red);opacity:.7;}"".section{background:var(--surface);border:1px solid var(--border);""border-radius:12px;padding:18px 22px;margin-bottom:12px;""box-shadow:0 2px 12px rgba(0,0,0,.3);}"".g2 .section,.g2.top .section,.g2.top details.section{margin-bottom:0;}"".section h2,.section>summary{font-size:.95rem;text-transform:uppercase;""letter-spacing:.06em;color:var(--text);margin:0 0 16px;font-family:var(--mono);""font-weight:700;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}"".section>summary{margin-bottom:0;}"".section>summary::-webkit-details-marker{display:none;}""details.section{margin-bottom:16px;}""details.section[open]>summary{margin-bottom:20px;}""details.section[open]>summary .arr{transform:rotate(90deg);}"".arr{display:inline-block;transition:transform .2s;}"".row{display:flex;align-items:center;justify-content:space-between;""padding:9px 0;border-bottom:1px solid var(--border);gap:16px;}"".row:last-child{border-bottom:none;}"".row>label:first-child{flex:1;font-size:.85rem;font-weight:500;color:var(--text);}""input[type=checkbox]{display:none;}"".switch{width:58px;height:30px;border-radius:15px;background:var(--surface3);""border:1px solid var(--border);position:relative;cursor:pointer;""flex-shrink:0;transition:background .2s,border-color .2s;}"".switch::after{content:'';position:absolute;top:5px;left:5px;width:18px;height:18px;""border-radius:50%%;background:var(--dim);transition:transform .2s,background .2s,box-shadow .2s;}""input[type=checkbox]:checked+.switch{background:var(--accent-dim);border-color:var(--accent);}""input[type=checkbox]:checked+.switch::after{transform:translateX(28px);""background:var(--accent);box-shadow:0 0 8px var(--accent-glow);}"".numfield{display:flex;align-items:center;justify-content:space-between;""padding:9px 0;border-bottom:1px solid var(--border);font-size:.85rem;gap:16px;}"".numfield:last-child{border-bottom:none;}"".numfield label{flex:1;font-weight:500;color:var(--text);}""input[type=number],input[type=Line truncated
|
||||
"@media(max-width:720px){.log-out{white-space:pre-wrap;overflow-x:hidden;}}"
|
||||
".bak-row{display:flex;gap:4px;align-items:center;padding:5px 0;border-bottom:1px solid var(--border);min-width:0;}"
|
||||
".bak-nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:.78rem;}"
|
||||
@@ -1004,7 +1004,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: General / Notifications */
|
||||
H("<div id='panel-gen' class='panel'><div class='section'>");
|
||||
SW("qm","quiet_mode",L(LS_QUIET_MODE),cfg.quiet_mode);
|
||||
H("<div class='sublist-title'>%s</div>",L(LS_NOTIFS));
|
||||
H("<div id='lang-row' class='numfield' style='%s'>",has_lang?"":"opacity:.35;pointer-events:none;");
|
||||
H("<label>%s <span class='vbadge' id='lang-badge' style='%s'>ab 1.7alpha4</span></label>",
|
||||
L(LS_NOTIF_LANG),has_lang?"display:none;":"");
|
||||
@@ -1102,7 +1102,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: kstuff */
|
||||
H("<div id='panel-kst' class='panel'><div class='section'>");
|
||||
SW("kgt","kstuff_game_auto_toggle",L(LS_KSTUFF_PAUSE),cfg.kstuff_game_auto_toggle);
|
||||
H("<div class='sublist-title'>kstuff</div>");
|
||||
SW("kcd","kstuff_crash_detection",L(LS_CRASH_TUNE),cfg.kstuff_crash_detection);
|
||||
H("<p class='hint' style='margin:-4px 0 10px;'>ⓘ %s</p>",L(LS_KSTUFF_TOG));
|
||||
NF("kstuff_pause_delay_image_seconds",L(LS_PAUSE_IMG),"1","3600",cfg.kstuff_pause_delay_image_seconds);
|
||||
@@ -1124,7 +1124,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: Fakelib */
|
||||
H("<div id='panel-fkl' class='panel'><div class='section'>");
|
||||
SW("bf","backport_fakelib",L(LS_EN_BACKPORT),cfg.backport_fakelib);
|
||||
H("<div class='sublist-title'>Fakelib</div>");
|
||||
SW("gf","global_fakelib",L(LS_EN_GLOBAL_FL),cfg.global_fakelib);
|
||||
H("<p class='hint' style='margin:-4px 0 10px;'>ⓘ %s</p>",L(LS_FAKELIB_HINT));
|
||||
TF("global_fakelib_path",L(LS_FL_PATH),cfg.global_fakelib_path,"/data/shadowmount/fakelib");
|
||||
@@ -1148,7 +1148,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: Backend */
|
||||
H("<div id='panel-bkd' class='panel'><div class='section'>");
|
||||
H("<p class='hint' style='margin-bottom:12px;'>ⓘ %s</p>",
|
||||
H("<div class='sublist-title'>Backend</div>");
|
||||
L(LS_SECTOR_HINT));
|
||||
H("<div class='numfield'><label>%s</label>"
|
||||
"<select name='exfat_backend'>"
|
||||
@@ -1193,7 +1193,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
H("<p style='margin:0 0 14px;'><span id='api-badge' class='vbadge'>ab 1.7alpha3</span></p>");
|
||||
else
|
||||
H("<span id='api-badge' class='vbadge' style='display:none;'>ab 1.7alpha3</span>");
|
||||
H("<div class='numfield'><label>%s</label>"
|
||||
H("<div class='sublist-title'>API</div>");
|
||||
"<select name='api_bind_address'>"
|
||||
"<option value='127.0.0.1'%s>127.0.0.1 — %s</option>"
|
||||
"<option value='0.0.0.0'%s>0.0.0.0 — %s</option>"
|
||||
@@ -1383,7 +1383,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: Image Overrides */
|
||||
H("<div id='panel-ovi' class='panel'><div class='section'>");
|
||||
H("<div class='sublist-title'>image_ro</div>");
|
||||
H("<div class='sublist-title'>%s</div>",L(LS_IMG_OVERRIDES));
|
||||
H("<p class='hint'><b>📄 Beispiel:</b> <code>PPSA12345.exfat</code> %s <code>PPSA12345.ffpfs</code></p>",L(LS_OR));
|
||||
H("<div id='img-ro-list'>");
|
||||
for(int i=0;i<cfg.image_ro_count;i++)
|
||||
@@ -1405,6 +1405,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: Manual List */
|
||||
H("<div id='panel-man' class='panel'><div class='section'>");
|
||||
H("<div class='sublist-title'>%s</div>",L(LS_MANUAL));
|
||||
H("<p class='hint'>ⓘ %s</p>",
|
||||
L(LS_MANUAL_HINT));
|
||||
H("<p class='hint' style='margin-top:6px;'><b>📄 Beispiel:</b> <code>/mnt/usb0/PPSA12345</code> %s <code>/mnt/usb0/PPSA12345.ffpkg</code></p>",L(LS_OR));
|
||||
@@ -1416,6 +1417,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data) {
|
||||
|
||||
/* Panel: Debug Log */
|
||||
H("<div id='panel-log' class='panel'><div class='section' style='padding:14px 16px;'>");
|
||||
H("<div class='sublist-title'>Log</div>");
|
||||
SW("dbg","debug",L(LS_DEBUG_LOG),cfg.debug);
|
||||
H("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;margin-top:12px;'>"
|
||||
"<code style='font-size:.72rem;color:var(--dim);'>/data/shadowmount/debug.log</code>"
|
||||
|
||||
Reference in new issue
Block a user