dream-museum / static /style.css
AitorConS's picture
Initial Gradio Space β€” Dream Museum
b1deecb verified
Raw
History Blame Contribute Delete
19.7 kB
/* ── Reset ──────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--gold: #c9a030;
--gold-light: #f0cc6e;
--gold-dark: #806018;
--bg: #07070c;
--panel-bg: rgba(8, 7, 14, 0.97);
--card-bg: #100f1c;
--border: #2a2545;
--accent: #7c6af7;
--text: #e8e0f0;
--text-dim: #8880aa;
--danger: #c0392b;
--radius: 10px;
--font: 'Cormorant Garamond', Georgia, 'Times New Roman', serif;
}
html, body {
height: 100%;
overflow: hidden;
font-family: var(--font);
background: var(--bg);
color: var(--text);
}
/* ── 3D Canvas ───────────────────────────────────────────────────────────── */
#museum-canvas {
position: fixed;
inset: 0;
width: 100%;
height: 100%;
display: block;
transition: filter 0.5s ease;
}
#museum-canvas.dimmed {
filter: blur(6px) brightness(0.3);
}
/* ── Top gradient veil (contrast for corner HUD elements) ────────────────── */
body::before {
content: '';
position: fixed;
top: 0; left: 0; right: 0;
height: 110px;
background: linear-gradient(to bottom, rgba(4,3,10,.72) 0%, transparent 100%);
z-index: 45;
pointer-events: none;
}
/* ── Floating logo ───────────────────────────────────────────────────────── */
#museum-logo {
position: fixed;
top: 24px; left: 28px;
z-index: 50;
display: flex;
align-items: center;
gap: 10px;
pointer-events: none;
user-select: none;
}
.logo-glyph {
font-size: 1.3rem;
color: var(--gold-light);
text-shadow: 0 1px 6px rgba(0,0,0,.8);
}
.logo-text {
font-size: 1.05rem;
letter-spacing: .14em;
color: #f5e8c0;
font-style: italic;
font-weight: 300;
text-shadow: 0 1px 6px rgba(0,0,0,.9);
}
/* ── Top-right HUD ───────────────────────────────────────────────────────── */
#hud-topright {
position: fixed;
top: 18px; right: 22px;
z-index: 50;
display: flex;
align-items: center;
gap: 10px;
}
.auth-area {
display: flex;
align-items: center;
gap: 7px;
}
.auth-name {
color: #f5e8c0;
font-style: italic;
font-size: 1rem;
letter-spacing: .04em;
text-shadow: 0 1px 5px rgba(0,0,0,.9);
}
.auth-input {
background: rgba(4,3,10,.7);
border: 1px solid rgba(201,160,48,.35);
color: #f0e8d8;
padding: 7px 14px;
border-radius: 6px;
font-size: .88rem;
width: 160px;
font-family: inherit;
outline: none;
transition: border-color .2s, background .2s;
backdrop-filter: blur(10px);
}
.auth-input:focus { border-color: var(--gold); background: rgba(4,3,10,.88); }
.auth-input::placeholder { color: rgba(200,180,140,.5); font-style: italic; }
.hud-pill {
background: rgba(4,3,10,.78);
border: 1px solid rgba(201,160,48,.45);
color: #f0d98a;
padding: 7px 18px;
border-radius: 20px;
font-family: inherit;
font-size: .88rem;
font-style: italic;
letter-spacing: .06em;
cursor: pointer;
backdrop-filter: blur(12px);
transition: background .2s, border-color .2s, color .2s;
text-shadow: 0 1px 4px rgba(0,0,0,.7);
}
.hud-pill:hover {
background: rgba(201,160,48,.15);
border-color: rgba(201,160,48,.7);
color: var(--gold-light);
}
/* ── FAB buttons (bottom corners) ───────────────────────────────────────── */
.fab {
position: fixed;
bottom: 32px;
z-index: 50;
display: flex;
align-items: center;
gap: 10px;
padding: 12px 22px;
background: rgba(8,7,14,.82);
border: 1px solid rgba(201,160,48,.35);
border-radius: 40px;
color: rgba(240,204,110,.9);
font-family: inherit;
font-size: 1rem;
font-style: italic;
letter-spacing: .08em;
cursor: pointer;
text-decoration: none;
backdrop-filter: blur(12px);
transition: background .25s, border-color .25s, color .25s, transform .2s, box-shadow .25s;
box-shadow: 0 4px 20px rgba(0,0,0,.4);
}
.fab:hover {
background: rgba(201,160,48,.14);
border-color: rgba(201,160,48,.7);
color: var(--gold-light);
transform: translateY(-2px);
box-shadow: 0 6px 28px rgba(201,160,48,.15);
}
.fab--left { left: 32px; }
.fab--right { right: 32px; }
.fab-icon {
display: flex;
align-items: center;
justify-content: center;
width: 20px; height: 20px;
flex-shrink: 0;
font-size: 1rem;
}
.fab-label {
font-size: .95rem;
}
/* ── Room hint ───────────────────────────────────────────────────────────── */
#room-hint {
position: fixed;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
z-index: 40;
background: rgba(7,7,12,.6);
border: 1px solid rgba(201,160,48,.22);
border-radius: 20px;
padding: 7px 22px;
font-size: .78rem;
font-style: italic;
color: rgba(201,160,48,.65);
letter-spacing: .1em;
backdrop-filter: blur(6px);
pointer-events: all;
cursor: default;
transition:
opacity .5s,
color .25s,
border-color .25s,
background .25s,
box-shadow .25s,
transform .25s;
white-space: nowrap;
user-select: none;
}
#room-hint:hover {
color: #f0cc6e;
border-color: rgba(201,160,48,.65);
background: rgba(201,160,48,.1);
box-shadow: 0 0 18px rgba(201,160,48,.18), 0 0 6px rgba(201,160,48,.12);
transform: translateX(-50%) translateY(-2px);
}
#room-hint.hidden { opacity: 0; pointer-events: none; }
/* ── Side panels ─────────────────────────────────────────────────────────── */
.side-panel {
position: fixed;
top: 0; right: 0; bottom: 0;
width: min(960px, 100vw);
z-index: 60;
background: var(--panel-bg);
border-left: 1px solid var(--border);
transform: translateX(100%);
transition: transform .45s cubic-bezier(.22,.68,0,1.1);
overflow: hidden;
}
.side-panel.open { transform: translateX(0); }
.panel-scroll {
height: 100%;
overflow-y: auto;
padding: 64px 44px 60px;
scrollbar-width: thin;
scrollbar-color: var(--border) transparent;
}
.panel-close {
position: absolute;
top: 20px; right: 22px;
background: none;
border: 1px solid var(--border);
color: var(--text-dim);
width: 34px; height: 34px;
border-radius: 6px;
cursor: pointer;
font-size: .9rem;
font-family: inherit;
transition: color .2s, border-color .2s;
z-index: 2;
}
.panel-close:hover { color: var(--text); border-color: var(--text-dim); }
.panel-head {
margin-bottom: 36px;
}
.panel-head h2 {
font-size: 2.2rem;
font-weight: 300;
font-style: italic;
letter-spacing: .1em;
color: var(--gold-light);
margin-bottom: 8px;
line-height: 1.1;
}
.panel-head p {
color: var(--text-dim);
font-style: italic;
font-size: 1rem;
letter-spacing: .04em;
}
/* ── Create layout ───────────────────────────────────────────────────────── */
.create-layout {
display: grid;
grid-template-columns: 460px 1fr;
gap: 40px;
align-items: start;
}
@media (max-width: 860px) {
.create-layout { grid-template-columns: 1fr; }
}
/* ── Drawing toolbar ─────────────────────────────────────────────────────── */
.canvas-col {
display: flex;
flex-direction: column;
gap: 12px;
}
.draw-toolbar {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
padding: 8px 12px;
background: rgba(255,255,255,.04);
border: 1px solid var(--border);
border-radius: 8px;
}
.tool {
background: transparent;
border: 1px solid transparent;
color: var(--text-dim);
width: 32px; height: 32px;
border-radius: 6px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: color .15s, border-color .15s, background .15s;
flex-shrink: 0;
}
.tool:hover { color: var(--text); border-color: var(--border); background: rgba(255,255,255,.05); }
.tool.active { color: var(--gold); border-color: rgba(201,160,48,.5); background: rgba(201,160,48,.1); }
.tool-sep {
width: 1px; height: 20px;
background: var(--border);
flex-shrink: 0;
}
.color-picker {
width: 32px; height: 32px;
border: 1px solid var(--border);
border-radius: 6px;
padding: 2px;
background: rgba(255,255,255,.06);
cursor: pointer;
flex-shrink: 0;
}
.color-swatches {
display: flex;
gap: 4px;
flex-wrap: wrap;
}
.swatch {
width: 18px; height: 18px;
border-radius: 50%;
border: 1px solid rgba(255,255,255,.15);
background: var(--c);
cursor: pointer;
transition: transform .15s, box-shadow .15s;
flex-shrink: 0;
}
.swatch:hover { transform: scale(1.25); box-shadow: 0 0 6px rgba(255,255,255,.3); }
.brush-row {
display: flex;
align-items: center;
gap: 10px;
flex: 1;
min-width: 100px;
}
.brush-row input[type=range] {
flex: 1;
accent-color: var(--gold);
}
.brush-preview {
width: 8px; height: 8px;
border-radius: 50%;
background: #ffffff;
flex-shrink: 0;
transition: width .1s, height .1s;
box-shadow: 0 0 4px rgba(255,255,255,.4);
}
/* ── Canvas frame ────────────────────────────────────────────────────────── */
.canvas-frame {
position: relative;
border-radius: 4px;
overflow: hidden;
box-shadow:
0 0 0 1px var(--border),
0 0 0 3px rgba(201,160,48,.08),
0 0 0 4px rgba(42,37,69,.6),
0 8px 32px rgba(0,0,0,.5);
}
#draw-canvas {
width: 100%;
aspect-ratio: 1;
display: block;
background: #0f0d1e;
cursor: crosshair;
touch-action: none;
}
/* ── Controls column ─────────────────────────────────────────────────────── */
.ctrl-col {
display: flex;
flex-direction: column;
gap: 18px;
}
.field-group {
display: flex;
flex-direction: column;
gap: 8px;
}
.field-label {
font-size: .72rem;
letter-spacing: .14em;
text-transform: uppercase;
color: var(--text-dim);
font-style: normal;
font-family: inherit;
}
textarea {
background: rgba(255,255,255,.05);
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
font-family: inherit;
font-size: 1rem;
font-style: italic;
line-height: 1.7;
padding: 14px 16px;
resize: vertical;
outline: none;
width: 100%;
transition: border-color .2s;
}
textarea:focus { border-color: rgba(201,160,48,.5); }
textarea::placeholder { color: var(--text-dim); font-style: italic; }
.slider-label {
display: flex;
justify-content: space-between;
font-size: .88rem;
color: var(--text-dim);
font-style: italic;
}
.slider-num { color: var(--gold); font-style: normal; }
.field-group input[type=range] { width: 100%; accent-color: var(--gold); }
.slider-hints {
display: flex;
justify-content: space-between;
font-size: .72rem;
color: var(--text-dim);
font-style: italic;
}
/* ── Materialize button ──────────────────────────────────────────────────── */
.btn-materialize {
background: linear-gradient(135deg, rgba(201,160,48,.9), rgba(140,100,20,.9));
color: #0a0808;
border: none;
padding: 14px 24px;
border-radius: 8px;
font-family: inherit;
font-size: 1.05rem;
font-style: italic;
font-weight: 600;
letter-spacing: .06em;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
width: 100%;
transition: opacity .2s, transform .15s, box-shadow .2s;
box-shadow: 0 4px 20px rgba(201,160,48,.25);
}
.btn-materialize:hover {
opacity: .9;
transform: translateY(-1px);
box-shadow: 0 6px 28px rgba(201,160,48,.35);
}
.btn-materialize:disabled { opacity: .45; cursor: not-allowed; transform: none; }
/* ── Common buttons ──────────────────────────────────────────────────────── */
.btn-gold {
background: var(--gold);
color: #0a0808;
border: none;
padding: 11px 20px;
border-radius: 8px;
font-family: inherit;
font-size: .92rem;
font-weight: 600;
letter-spacing: .04em;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
transition: background .2s, opacity .2s;
}
.btn-gold:hover { background: var(--gold-light); }
.btn-gold:disabled { opacity: .5; cursor: not-allowed; }
.btn-outline {
background: transparent;
color: var(--text);
border: 1px solid var(--border);
padding: 10px 20px;
border-radius: 8px;
font-family: inherit;
font-size: .9rem;
cursor: pointer;
transition: border-color .2s, color .2s;
}
.btn-outline:hover { border-color: var(--gold); color: var(--gold); }
.btn-outline-sm {
background: transparent;
color: var(--text-dim);
border: 1px solid var(--border);
padding: 6px 12px;
border-radius: 6px;
font-family: inherit;
font-size: .82rem;
cursor: pointer;
transition: border-color .2s, color .2s;
}
.btn-outline-sm:hover { border-color: var(--gold); color: var(--gold); }
.btn-ghost {
background: transparent;
color: var(--text-dim);
border: none;
padding: 8px 16px;
border-radius: 8px;
font-family: inherit;
font-size: .88rem;
font-style: italic;
cursor: pointer;
transition: color .2s;
width: 100%;
}
.btn-ghost:hover { color: var(--text); }
.btn-danger {
background: transparent;
color: var(--danger);
border: 1px solid var(--danger);
padding: 10px 20px;
border-radius: 8px;
font-family: inherit;
font-size: .9rem;
cursor: pointer;
}
.btn-danger:hover { background: rgba(192,57,43,.1); }
/* ── Spinner ─────────────────────────────────────────────────────────────── */
.spinner {
width: 16px; height: 16px;
border: 2px solid rgba(0,0,0,.3);
border-top-color: #0a0808;
border-radius: 50%;
animation: spin .7s linear infinite;
display: inline-block;
flex-shrink: 0;
}
@keyframes spin { to { transform: rotate(360deg); } }
/* ── Result diptych ──────────────────────────────────────────────────────── */
.result-area { display: flex; flex-direction: column; gap: 14px; }
.result-diptych {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 10px;
align-items: center;
}
.res-side { display: flex; flex-direction: column; gap: 5px; }
.res-label {
font-size: .68rem;
letter-spacing: .14em;
text-transform: uppercase;
color: var(--text-dim);
text-align: center;
font-style: normal;
}
.result-diptych img {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
border-radius: 4px;
border: 1px solid var(--border);
display: block;
}
.res-arrow { color: var(--gold); font-size: 1.4rem; flex-shrink: 0; }
.save-area { display: flex; flex-direction: column; gap: 8px; }
.save-btns {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.save-btns .btn-gold { font-size: .85rem; padding: 10px 12px; }
.auth-notice {
text-align: center;
color: var(--text-dim);
font-style: italic;
font-size: .9rem;
padding: 8px;
}
/* ── My Gallery grid ─────────────────────────────────────────────────────── */
.dream-grid {
columns: 2;
column-gap: 18px;
}
@media (max-width: 600px) { .dream-grid { columns: 1; } }
.dream-card {
break-inside: avoid;
margin-bottom: 18px;
background: var(--card-bg);
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
cursor: pointer;
transition: transform .2s, border-color .2s;
}
.dream-card:hover { transform: translateY(-2px); border-color: rgba(201,160,48,.4); }
.card-diptych {
display: grid;
grid-template-columns: 1fr 1fr;
}
.card-diptych img {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
display: block;
}
.card-info { padding: 10px 12px; }
.card-desc {
font-size: .9rem;
color: var(--text-dim);
font-style: italic;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.card-vis {
font-size: .72rem;
color: var(--gold-dark);
margin-top: 5px;
letter-spacing: .05em;
text-transform: uppercase;
}
.empty-state {
color: var(--text-dim);
font-style: italic;
text-align: center;
padding: 50px 20px;
font-size: 1rem;
}
/* ── Modal ───────────────────────────────────────────────────────────────── */
.modal {
position: fixed;
inset: 0;
z-index: 80;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
}
.modal.hidden { display: none; }
.modal-backdrop {
position: absolute;
inset: 0;
background: rgba(0,0,0,.85);
backdrop-filter: blur(10px);
}
.modal-box {
position: relative;
background: rgba(10,9,18,.97);
border: 1px solid var(--border);
border-radius: 12px;
padding: 40px;
max-width: 860px;
width: 100%;
display: flex;
flex-direction: column;
gap: 18px;
max-height: 90vh;
overflow-y: auto;
box-shadow: 0 0 60px rgba(0,0,0,.6);
}
.modal-close {
position: absolute;
top: 16px; right: 16px;
background: none;
border: 1px solid var(--border);
color: var(--text-dim);
width: 32px; height: 32px;
border-radius: 6px;
cursor: pointer;
font-size: .9rem;
font-family: inherit;
transition: color .2s;
}
.modal-close:hover { color: var(--text); }
.modal-diptych {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 14px;
align-items: center;
}
.modal-side { display: flex; flex-direction: column; gap: 6px; }
.modal-lbl {
font-size: .68rem;
letter-spacing: .14em;
text-transform: uppercase;
color: var(--text-dim);
text-align: center;
}
.modal-diptych img {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
border-radius: 6px;
border: 1px solid var(--border);
display: block;
}
.modal-arrow { color: var(--gold); font-size: 2rem; flex-shrink: 0; }
.modal-desc {
text-align: center;
font-style: italic;
font-size: 1.15rem;
color: var(--text-dim);
line-height: 1.7;
padding: 0 20px;
}
.modal-meta {
text-align: center;
font-size: .82rem;
color: rgba(201,160,48,.5);
letter-spacing: .06em;
}
.modal-owner {
display: flex;
gap: 10px;
justify-content: center;
}
/* ── Utility ─────────────────────────────────────────────────────────────── */
.hidden { display: none !important; }