more Ui changes
This commit is contained in:
222
index.html
222
index.html
@@ -21,6 +21,7 @@
|
||||
--primary: #0D9488; /* teal */
|
||||
--primary2: #146C94; /* deep blue */
|
||||
--accent: #FF6B6B; /* coral */
|
||||
--adcom: #f59e0b; /* amber/yellow */
|
||||
--successBg: #eafff6;
|
||||
}
|
||||
|
||||
@@ -33,6 +34,7 @@
|
||||
--border: rgba(226,232,240,0.14);
|
||||
--shadow: 0 12px 34px rgba(0,0,0,0.40);
|
||||
--successBg: rgba(13,148,136,0.16);
|
||||
--adcom: #fbbf24; /* amber/yellow for dark */
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -42,6 +44,8 @@
|
||||
background: radial-gradient(1200px 600px at 10% 0%, var(--bg2), var(--bg));
|
||||
color: var(--text);
|
||||
}
|
||||
/* Prevent horizontal overflow from padding/borders */
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
|
||||
.container {
|
||||
width: min(92vw, 1120px);
|
||||
@@ -56,7 +60,55 @@
|
||||
padding: 16px;
|
||||
background: var(--card);
|
||||
box-shadow: var(--shadow);
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* Section cards: subtle themed accents for easy scanning */
|
||||
.sectionCard {
|
||||
padding: 0; /* header + body handle spacing */
|
||||
overflow: hidden;
|
||||
}
|
||||
.sectionHeader {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
padding: 14px 16px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: color-mix(in srgb, var(--card) 88%, var(--bg) 12%);
|
||||
}
|
||||
.sectionBody {
|
||||
padding: 14px 16px 16px;
|
||||
}
|
||||
.sectionTitle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
.sectionBadge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 4px 10px;
|
||||
border-radius: 999px;
|
||||
border: 1px solid var(--border);
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
background: color-mix(in srgb, var(--card) 92%, var(--bg) 8%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.sectionGoogle { border-left: 4px solid var(--primary2); }
|
||||
.sectionApple { border-left: 4px solid var(--accent); }
|
||||
.sectionAdcap { border-left: 4px solid var(--primary); }
|
||||
.sectionAdcom { border-left: 4px solid var(--adcom); }
|
||||
|
||||
.sectionGoogle .sectionHeader { background: color-mix(in srgb, var(--card) 86%, var(--primary2) 14%); }
|
||||
.sectionApple .sectionHeader { background: color-mix(in srgb, var(--card) 86%, var(--accent) 14%); }
|
||||
.sectionAdcap .sectionHeader { background: color-mix(in srgb, var(--card) 86%, var(--primary) 14%); }
|
||||
.sectionAdcom .sectionHeader { background: color-mix(in srgb, var(--card) 86%, var(--adcom) 14%); }
|
||||
.muted { color: var(--muted); font-size: 14px; }
|
||||
.btn {
|
||||
padding: 9px 12px;
|
||||
@@ -83,6 +135,7 @@
|
||||
border: 1px solid var(--border);
|
||||
background: color-mix(in srgb, var(--card) 92%, var(--bg) 8%);
|
||||
color: var(--text);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.grid2 { display: grid; grid-template-columns: 1fr; gap: 14px; }
|
||||
.topbar { display: flex; gap: 14px; align-items: stretch; flex-wrap: wrap; }
|
||||
@@ -114,6 +167,30 @@
|
||||
color: var(--text);
|
||||
}
|
||||
.navRow { display: flex; flex-wrap: wrap; gap: 10px; }
|
||||
|
||||
/* Floating Jump-to panel (desktop): outside container on the left */
|
||||
.jumpNav {
|
||||
position: fixed;
|
||||
top: 120px; /* closer to the header */
|
||||
left: max(14px, calc((100vw - 1120px) / 2 - 248px));
|
||||
width: 220px;
|
||||
z-index: 9000;
|
||||
}
|
||||
.jumpNav .navRow {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
.jumpNav .navBtn {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Show inline Jump-to inside the page on narrower screens */
|
||||
.inlineJump { display: none; }
|
||||
@media (max-width: 1200px) {
|
||||
.jumpNav { display: none; }
|
||||
.inlineJump { display: block; }
|
||||
}
|
||||
.navBtn {
|
||||
padding: 8px 10px;
|
||||
border-radius: 999px;
|
||||
@@ -128,6 +205,47 @@
|
||||
background: color-mix(in srgb, var(--card) 86%, var(--primary2) 14%);
|
||||
border-color: color-mix(in srgb, var(--border) 60%, var(--primary2) 40%);
|
||||
}
|
||||
|
||||
/* Jump-to button colors (match section accents) */
|
||||
.jumpNav .navBtn[data-scroll="googleSection"],
|
||||
.inlineJump .navBtn[data-scroll="googleSection"] {
|
||||
background: color-mix(in srgb, var(--card) 90%, var(--primary2) 10%);
|
||||
border-color: color-mix(in srgb, var(--border) 55%, var(--primary2) 45%);
|
||||
}
|
||||
.jumpNav .navBtn[data-scroll="googleSection"]:hover,
|
||||
.inlineJump .navBtn[data-scroll="googleSection"]:hover {
|
||||
background: color-mix(in srgb, var(--card) 84%, var(--primary2) 16%);
|
||||
}
|
||||
|
||||
.jumpNav .navBtn[data-scroll="appleSection"],
|
||||
.inlineJump .navBtn[data-scroll="appleSection"] {
|
||||
background: color-mix(in srgb, var(--card) 90%, var(--accent) 10%);
|
||||
border-color: color-mix(in srgb, var(--border) 55%, var(--accent) 45%);
|
||||
}
|
||||
.jumpNav .navBtn[data-scroll="appleSection"]:hover,
|
||||
.inlineJump .navBtn[data-scroll="appleSection"]:hover {
|
||||
background: color-mix(in srgb, var(--card) 84%, var(--accent) 16%);
|
||||
}
|
||||
|
||||
.jumpNav .navBtn[data-scroll="playfabAdcomSection"],
|
||||
.inlineJump .navBtn[data-scroll="playfabAdcomSection"] {
|
||||
background: color-mix(in srgb, var(--card) 90%, var(--adcom) 10%);
|
||||
border-color: color-mix(in srgb, var(--border) 55%, var(--adcom) 45%);
|
||||
}
|
||||
.jumpNav .navBtn[data-scroll="playfabAdcomSection"]:hover,
|
||||
.inlineJump .navBtn[data-scroll="playfabAdcomSection"]:hover {
|
||||
background: color-mix(in srgb, var(--card) 84%, var(--adcom) 16%);
|
||||
}
|
||||
|
||||
.jumpNav .navBtn[data-scroll="playfabAdcapSection"],
|
||||
.inlineJump .navBtn[data-scroll="playfabAdcapSection"] {
|
||||
background: color-mix(in srgb, var(--card) 90%, var(--primary) 10%);
|
||||
border-color: color-mix(in srgb, var(--border) 55%, var(--primary) 45%);
|
||||
}
|
||||
.jumpNav .navBtn[data-scroll="playfabAdcapSection"]:hover,
|
||||
.inlineJump .navBtn[data-scroll="playfabAdcapSection"]:hover {
|
||||
background: color-mix(in srgb, var(--card) 84%, var(--primary) 16%);
|
||||
}
|
||||
.ok { color: var(--primary); }
|
||||
.err { color: #ef4444; white-space: pre-wrap; }
|
||||
.small { font-size: 12px; color: var(--muted); }
|
||||
@@ -182,7 +300,7 @@
|
||||
.fieldBox textarea { min-height: 140px; }
|
||||
|
||||
@keyframes uploadFlash {
|
||||
0% { background-color: #eafff6; }
|
||||
0% { background-color: var(--successBg); }
|
||||
100% { background-color: var(--card); }
|
||||
}
|
||||
#uploadCard.flash {
|
||||
@@ -239,7 +357,7 @@
|
||||
|
||||
.toastHost {
|
||||
position: fixed;
|
||||
top: 16px;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
@@ -298,51 +416,79 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card" style="padding: 12px;">
|
||||
<div class="card inlineJump" style="padding: 12px;">
|
||||
<div class="small muted" style="margin-bottom: 6px; font-weight: 600;">Jump to</div>
|
||||
<div class="navRow">
|
||||
<button class="navBtn" type="button" data-scroll="googleSection">Google</button>
|
||||
<button class="navBtn" type="button" data-scroll="appleSection">Apple</button>
|
||||
<button class="navBtn" type="button" data-scroll="playfabAdcapSection">Playfab (AdCap)</button>
|
||||
<button class="navBtn" type="button" data-scroll="playfabAdcomSection">Playfab (AdCom/AdAges)</button>
|
||||
<button class="navBtn" type="button" data-scroll="playfabAdcapSection">Playfab (AdCap)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid2">
|
||||
<div class="card" id="googleSection">
|
||||
<div class="topbar" style="justify-content: space-between;">
|
||||
<div class="card sectionCard sectionGoogle" id="googleSection">
|
||||
<div class="sectionHeader">
|
||||
<div>
|
||||
<h3 style="margin:0 0 6px 0;">📦 Google Play output</h3>
|
||||
<h3 class="sectionTitle" style="margin:0 0 6px 0;">📦 Google Play output</h3>
|
||||
<div class="muted">Tagged format like <en-US>...</en-US></div>
|
||||
</div>
|
||||
<button class="btn" id="btnCopyGoogle" disabled><span class="btnLabel">Copy</span></button>
|
||||
<div style="display:flex; flex-direction: column; align-items: flex-end; gap: 8px;">
|
||||
<span class="sectionBadge">Google Console</span>
|
||||
<button class="btn" id="btnCopyGoogle" disabled><span class="btnLabel">Copy</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="outGoogle" readonly></textarea>
|
||||
</div>
|
||||
|
||||
<div class="card" id="appleSection">
|
||||
<h3 style="margin:0 0 6px 0;">🍎 App Store Connect output</h3>
|
||||
<div id="ascBoxes" class="ascGrid"></div>
|
||||
</div>
|
||||
|
||||
<div class="card" id="playfabAdcapSection">
|
||||
<h3 style="margin:0 0 6px 0;">📰 PlayFab News output (AdCap only)</h3>
|
||||
<div class="muted" style="margin-bottom: 10px;">Add this JSON to: AdCap > TitleData > Primary Title Data > <code>newsfeed_mobile</code> (PlayFab).</div>
|
||||
<div id="adcapHelp" class="small muted" style="margin-bottom: 10px;">Requires a valid game version above. Uses English text only.</div>
|
||||
<div class="topbar" style="justify-content: space-between;">
|
||||
<div class="small muted">Output JSON</div>
|
||||
<button class="btn" id="btnCopyAdcap" disabled><span class="btnLabel">Copy</span></button>
|
||||
<div class="sectionBody">
|
||||
<textarea id="outGoogle" readonly></textarea>
|
||||
</div>
|
||||
<textarea id="outAdcap" readonly rows="3" style="min-height: 92px;"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="card" id="playfabAdcomSection">
|
||||
<h3 style="margin:0 0 6px 0;">🗞️ PlayFab News output (AdCom/AdAges)</h3>
|
||||
<div class="muted">Per-language Title + Body. Requires a valid game version above.</div>
|
||||
<div id="playfabBoxes" class="ascGrid singleCol"></div>
|
||||
<div class="card sectionCard sectionApple" id="appleSection">
|
||||
<div class="sectionHeader">
|
||||
<div>
|
||||
<h3 class="sectionTitle" style="margin:0 0 6px 0;">🍎 App Store Connect output</h3>
|
||||
<div class="muted">Per-locale text blocks (copy individually).</div>
|
||||
</div>
|
||||
<span class="sectionBadge">App Store Connect</span>
|
||||
</div>
|
||||
<div class="sectionBody">
|
||||
<div id="ascBoxes" class="ascGrid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card sectionCard sectionAdcom" id="playfabAdcomSection">
|
||||
<div class="sectionHeader">
|
||||
<div>
|
||||
<h3 class="sectionTitle" style="margin:0 0 6px 0;">🗞️ PlayFab News output (AdCom/AdAges)</h3>
|
||||
<div class="muted">Per-language Title + Body (requires a valid game version).</div>
|
||||
</div>
|
||||
<span class="sectionBadge">PlayFab</span>
|
||||
</div>
|
||||
<div class="sectionBody">
|
||||
<div id="playfabBoxes" class="ascGrid singleCol"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card sectionCard sectionAdcap" id="playfabAdcapSection">
|
||||
<div class="sectionHeader">
|
||||
<div>
|
||||
<h3 class="sectionTitle" style="margin:0 0 6px 0;">📰 PlayFab News output (AdCap only)</h3>
|
||||
<div class="muted">JSON for newsfeed_mobile.</div>
|
||||
</div>
|
||||
<span class="sectionBadge">PlayFab</span>
|
||||
</div>
|
||||
<div class="sectionBody">
|
||||
<div class="muted" style="margin-bottom: 10px;">Add this JSON to: AdCap > TitleData > Primary Title Data > <code>newsfeed_mobile</code> (PlayFab).</div>
|
||||
<div id="adcapHelp" class="small muted" style="margin-bottom: 10px;">Requires a valid game version above. Uses English text only.</div>
|
||||
<div class="topbar" style="justify-content: space-between; margin-bottom: 8px;">
|
||||
<div class="small muted">Output JSON</div>
|
||||
<button class="btn" id="btnCopyAdcap" disabled><span class="btnLabel">Copy</span></button>
|
||||
</div>
|
||||
<textarea id="outAdcap" readonly rows="3" style="min-height: 92px;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="muted">
|
||||
Notes:
|
||||
@@ -359,6 +505,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card jumpNav" aria-label="Jump to">
|
||||
<div class="small muted" style="margin-bottom: 8px; font-weight: 700;">Jump to</div>
|
||||
<div class="navRow">
|
||||
<button class="navBtn" type="button" data-scroll="googleSection">Google</button>
|
||||
<button class="navBtn" type="button" data-scroll="appleSection">Apple</button>
|
||||
<button class="navBtn" type="button" data-scroll="playfabAdcomSection">Playfab (AdCom/AdAges)</button>
|
||||
<button class="navBtn" type="button" data-scroll="playfabAdcapSection">Playfab (AdCap)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="toastHost" class="toastHost"></div>
|
||||
|
||||
<script>
|
||||
@@ -447,19 +603,13 @@
|
||||
// Restore saved settings
|
||||
(function initPrefs() {
|
||||
try {
|
||||
const savedVersion = localStorage.getItem("rn_gameVersion");
|
||||
if (savedVersion && !gameVersionInput.value) gameVersionInput.value = savedVersion;
|
||||
|
||||
// Theme persists; game version should clear on refresh.
|
||||
const theme = localStorage.getItem("rn_theme") || "light";
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
if (btnTheme) btnTheme.textContent = theme === "dark" ? "☀️" : "🌙";
|
||||
} catch {}
|
||||
})();
|
||||
|
||||
gameVersionInput.addEventListener("input", () => {
|
||||
try { localStorage.setItem("rn_gameVersion", gameVersionInput.value || ""); } catch {}
|
||||
});
|
||||
|
||||
if (btnTheme) {
|
||||
btnTheme.addEventListener("click", () => {
|
||||
const cur = document.documentElement.getAttribute("data-theme") || "light";
|
||||
|
||||
Reference in New Issue
Block a user