rpgmaker / static /style.css
Cnass's picture
Update static/style.css
a14c632 verified
Raw History Blame Contribute Delete
14.5 kB
/* ==========================================================================
Riaslink Port Builder — tavern-themed build form
Palette matches android-template's RIA_TavernMenu.js exactly (--ria-*
tokens there), so the build tool and the in-game menu it produces share
one visual identity.
========================================================================== */
:root {
--ink: #120D09;
--wood-dark: #1c150e;
--wood: #2a2016;
--wood-light: #3d2f1e;
--brass: #c99a4a;
--ember: #e8a343;
--ember-dim: rgba(232, 163, 67, 0.35);
--parchment: #d4c4a8;
--parchment-dim: #a8987e;
--danger: #a13d2e;
--danger-bright: #d9705a;
--success: #6fae6f;
--success-bright: #8fd98f;
--font-heading: Georgia, 'Times New Roman', serif;
--font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'Courier New', ui-monospace, monospace;
}
* {
box-sizing: border-box;
}
html, body {
margin: 0;
padding: 0;
background: var(--ink);
color: var(--parchment);
font-family: var(--font-body);
min-height: 100vh;
}
.tavern-bg {
position: fixed;
inset: 0;
z-index: -1;
background:
radial-gradient(ellipse at 50% 15%, rgba(232, 163, 67, 0.08), transparent 55%),
radial-gradient(ellipse at 50% 100%, rgba(232, 163, 67, 0.06), transparent 60%),
var(--ink);
}
code {
background: rgba(0, 0, 0, 0.3);
padding: 1px 5px;
border-radius: 3px;
font-family: var(--font-mono);
font-size: 0.9em;
color: var(--ember);
}
/* ---- Header ------------------------------------------------------------ */
.site-header {
padding: 24px 20px 16px;
border-bottom: 1px solid rgba(201, 154, 74, 0.2);
}
.site-header-inner {
max-width: 1080px;
margin: 0 auto;
display: flex;
align-items: center;
gap: 14px;
}
.lantern-icon {
width: 44px;
height: 44px;
min-width: 44px;
border-radius: 50%;
background: radial-gradient(circle at 35% 30%, var(--wood-light), var(--wood-dark) 75%);
border: 2px solid var(--brass);
box-shadow: 0 3px 10px rgba(0,0,0,0.5), 0 0 14px var(--ember-dim);
display: flex;
align-items: center;
justify-content: center;
}
.lantern-icon svg {
width: 24px;
height: 24px;
}
.site-header h1 {
font-family: var(--font-heading);
font-size: 22px;
margin: 0;
color: var(--parchment);
letter-spacing: 0.01em;
}
.subtitle {
margin: 2px 0 0;
font-size: 13px;
color: var(--parchment-dim);
}
/* ---- Layout -------------------------------------------------------------- */
.layout {
max-width: 1080px;
margin: 0 auto;
padding: 24px 20px 40px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
align-items: start;
}
@media (max-width: 800px) {
.layout {
grid-template-columns: 1fr;
}
}
.panel {
background:
linear-gradient(180deg, rgba(255,255,255,0.02), rgba(0,0,0,0.12)),
var(--wood);
border: 2px solid var(--wood-dark);
border-radius: 10px;
box-shadow:
0 10px 26px rgba(0,0,0,0.5),
inset 0 0 0 1px rgba(201, 154, 74, 0.18);
padding: 22px;
}
.panel h2 {
font-family: var(--font-heading);
font-size: 18px;
margin: 0 0 6px;
color: var(--parchment);
}
.panel-desc {
font-size: 13px;
color: var(--parchment-dim);
line-height: 1.5;
margin: 0 0 20px;
}
.section-title {
font-family: var(--font-heading);
font-size: 14px;
color: var(--ember);
margin: 22px 0 12px;
padding-top: 14px;
border-top: 1px solid rgba(201, 154, 74, 0.18);
letter-spacing: 0.02em;
}
/* ---- Form fields --------------------------------------------------------- */
.field {
margin-bottom: 16px;
}
.field-row {
display: flex;
gap: 12px;
}
.field-row .field {
flex: 1;
}
.field-narrow {
flex: 0 0 120px !important;
}
label {
display: block;
font-size: 13px;
font-weight: 600;
color: var(--parchment);
margin-bottom: 6px;
}
.required {
color: var(--danger-bright);
}
.field-hint {
display: block;
font-size: 11px;
color: var(--parchment-dim);
margin-top: 4px;
font-weight: 400;
}
.field-hint.block {
margin-top: 3px;
}
input[type="text"],
input[type="number"] {
width: 100%;
background: rgba(0, 0, 0, 0.3);
border: 1px solid rgba(201, 154, 74, 0.3);
border-radius: 5px;
padding: 10px 12px;
font-size: 14px;
color: var(--parchment);
font-family: var(--font-body);
min-height: 44px;
}
input[type="text"]:focus,
input[type="number"]:focus {
outline: none;
border-color: var(--ember);
box-shadow: 0 0 0 2px var(--ember-dim);
}
input[type="text"]::placeholder {
color: var(--parchment-dim);
}
/* ---- File drop ------------------------------------------------------------ */
.file-drop {
position: relative;
border: 2px dashed rgba(201, 154, 74, 0.35);
border-radius: 6px;
padding: 18px 14px;
text-align: center;
background: rgba(0, 0, 0, 0.2);
transition: border-color 120ms ease, background 120ms ease;
min-height: 44px;
display: flex;
align-items: center;
justify-content: center;
}
.file-drop.drag-over {
border-color: var(--ember);
background: rgba(232, 163, 67, 0.08);
}
.file-drop input[type="file"] {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
width: 100%;
height: 100%;
}
.file-drop-label {
font-size: 13px;
color: var(--parchment-dim);
pointer-events: none;
}
.file-drop-label.has-file {
color: var(--ember);
font-weight: 600;
}
/* ---- Upload progress ring -------------------------------------------------- */
/* Small circular indicator shown inside the file-drop area while the zip
is uploading. Standard SVG technique: stroke-dasharray is fixed to the
circle's circumference, stroke-dashoffset is animated from full
circumference (0% shown) down to 0 (100% shown). */
.upload-ring {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 40px;
height: 40px;
pointer-events: none;
}
.upload-ring.hidden {
display: none;
}
.upload-ring svg {
width: 100%;
height: 100%;
transform: rotate(-90deg);
}
.upload-ring-track {
fill: none;
stroke: rgba(0, 0, 0, 0.35);
stroke-width: 3;
}
.upload-ring-progress {
fill: none;
stroke: var(--ember);
stroke-width: 3;
stroke-linecap: round;
stroke-dasharray: 97.389;
stroke-dashoffset: 97.389;
transition: stroke-dashoffset 120ms ease;
}
.upload-ring-label {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: 700;
color: var(--parchment);
font-family: var(--font-mono);
}
/* While uploading, fade the filename text so the ring reads clearly
without the two overlapping. */
.file-drop.uploading .file-drop-label {
opacity: 0.25;
}
/* ---- Toggle switch --------------------------------------------------------- */
.field-toggle {
background: rgba(0,0,0,0.15);
border-radius: 6px;
padding: 12px 14px;
}
.toggle-label {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
cursor: pointer;
margin: 0;
font-weight: 400;
font-size: 13px;
color: var(--parchment);
}
.switch {
position: relative;
flex-shrink: 0;
}
.switch input {
position: absolute;
opacity: 0;
width: 46px;
height: 26px;
margin: 0;
cursor: pointer;
}
.switch-track {
display: block;
width: 46px;
height: 26px;
border-radius: 13px;
background: rgba(0,0,0,0.4);
border: 1px solid rgba(201, 154, 74, 0.3);
transition: background 160ms ease, border-color 160ms ease;
}
.switch-knob {
display: block;
width: 20px;
height: 20px;
margin: 2px;
border-radius: 50%;
background: var(--parchment);
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
transition: transform 160ms cubic-bezier(0.34, 1.4, 0.4, 1);
}
.switch input:checked ~ .switch-track {
background: var(--ember);
border-color: var(--ember);
}
.switch input:checked ~ .switch-track .switch-knob {
transform: translateX(20px);
background: var(--wood-dark);
}
.switch input:focus-visible ~ .switch-track {
box-shadow: 0 0 0 2px var(--ember-dim);
}
/* ---- Color field ------------------------------------------------------------ */
.color-field {
display: flex;
gap: 8px;
align-items: center;
}
input[type="color"] {
width: 44px;
height: 44px;
padding: 2px;
border: 1px solid rgba(201, 154, 74, 0.3);
border-radius: 6px;
background: rgba(0,0,0,0.3);
cursor: pointer;
}
.color-hex-text {
flex: 1;
background: rgba(0, 0, 0, 0.3);
border: 1px solid rgba(201, 154, 74, 0.3);
border-radius: 5px;
padding: 10px 12px;
font-size: 14px;
font-family: var(--font-mono);
color: var(--parchment);
min-height: 44px;
}
/* ---- Radio cards -------------------------------------------------------- */
.radio-group {
display: flex;
flex-direction: column;
gap: 10px;
}
.radio-option {
display: block;
cursor: pointer;
margin: 0;
}
.radio-option input {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
.radio-card {
display: block;
padding: 12px 14px;
border: 1px solid rgba(201, 154, 74, 0.25);
border-radius: 6px;
background: rgba(0,0,0,0.15);
transition: border-color 120ms ease, background 120ms ease;
}
.radio-card strong {
display: block;
font-size: 14px;
color: var(--parchment);
margin-bottom: 3px;
}
.radio-option input:checked ~ .radio-card {
border-color: var(--ember);
background: rgba(232, 163, 67, 0.08);
}
.radio-option input:checked ~ .radio-card strong {
color: var(--ember);
}
.radio-option input:focus-visible ~ .radio-card {
box-shadow: 0 0 0 2px var(--ember-dim);
}
/* ---- Build button --------------------------------------------------------- */
.build-btn {
width: 100%;
min-height: 48px;
margin-top: 22px;
border: 1px solid #8a5a1f;
border-radius: 6px;
background: linear-gradient(180deg, var(--ember), #c9832f);
color: #2a1a08;
font-size: 15px;
font-weight: 700;
cursor: pointer;
box-shadow: 0 3px 10px rgba(0,0,0,0.35);
transition: transform 100ms ease, filter 100ms ease;
}
.build-btn:hover {
filter: brightness(1.06);
}
.build-btn:active {
transform: scale(0.98);
}
.build-btn:disabled {
opacity: 0.55;
cursor: not-allowed;
filter: none;
}
.footnote {
margin: 18px 0 0;
font-size: 11px;
color: var(--parchment-dim);
line-height: 1.5;
}
/* ---- Log panel ------------------------------------------------------------ */
.log-panel {
display: flex;
flex-direction: column;
min-height: 420px;
}
.log-panel-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14px;
}
.log-panel-header h2 {
margin: 0;
}
.log-panel-actions {
display: flex;
align-items: center;
gap: 8px;
}
.copy-log-btn {
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
min-width: 30px;
border-radius: 6px;
background: rgba(0,0,0,0.3);
border: 1px solid rgba(201, 154, 74, 0.3);
color: var(--parchment-dim);
font-size: 14px;
cursor: pointer;
transition: border-color 120ms ease, background 120ms ease, color 120ms ease;
}
.copy-log-btn:hover {
border-color: var(--ember);
color: var(--ember);
}
.copy-log-btn:active {
transform: scale(0.94);
}
.copy-log-btn.copied {
border-color: var(--success);
color: var(--success-bright);
background: rgba(111, 174, 111, 0.12);
}
.status-pill {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
padding: 4px 10px;
border-radius: 12px;
background: rgba(0,0,0,0.3);
border: 1px solid rgba(201, 154, 74, 0.3);
color: var(--parchment-dim);
}
.status-pill[data-state="running"] {
color: var(--ember);
border-color: var(--ember);
background: rgba(232, 163, 67, 0.1);
}
.status-pill[data-state="success"] {
color: var(--success-bright);
border-color: var(--success);
background: rgba(111, 174, 111, 0.12);
}
.status-pill[data-state="failed"] {
color: var(--danger-bright);
border-color: var(--danger);
background: rgba(161, 61, 46, 0.12);
}
.log-output {
flex: 1;
margin: 0;
background: var(--wood-dark);
border: 1px solid rgba(0,0,0,0.4);
border-radius: 6px;
padding: 14px;
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.6;
color: var(--parchment);
overflow-y: auto;
white-space: pre-wrap;
word-break: break-word;
min-height: 300px;
max-height: 520px;
}
.log-empty {
color: var(--parchment-dim);
font-family: var(--font-body);
font-size: 13px;
}
.log-line-error {
color: var(--danger-bright);
}
.log-line-success {
color: var(--success-bright);
}
/* ---- Download area --------------------------------------------------------- */
.download-area {
margin-top: 16px;
}
.download-area.hidden {
display: none;
}
.download-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 48px;
border-radius: 6px;
background: linear-gradient(180deg, var(--success-bright), var(--success));
color: var(--wood-dark);
font-weight: 700;
font-size: 15px;
text-decoration: none;
box-shadow: 0 3px 10px rgba(0,0,0,0.35);
}
.download-btn:hover {
filter: brightness(1.05);
}
/* ---- Footer --------------------------------------------------------------- */
.site-footer {
max-width: 1080px;
margin: 0 auto;
padding: 0 20px 30px;
text-align: center;
}
.site-footer p {
font-size: 11px;
color: var(--parchment-dim);
line-height: 1.6;
}
.site-footer a {
color: var(--ember);
}
/* ---- Scrollbar (webkit) ---------------------------------------------------- */
.log-output::-webkit-scrollbar {
width: 8px;
}
.log-output::-webkit-scrollbar-track {
background: rgba(0,0,0,0.2);
}
.log-output::-webkit-scrollbar-thumb {
background: var(--wood-light);
border-radius: 4px;
}