Files
otivm/src/App.css
2026-04-27 10:51:53 +00:00

424 lines
6.4 KiB
CSS

/* Layout */
.loading {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
font-style: italic;
color: #6b5a3e;
}
.game {
max-width: 680px;
margin: 0 auto;
padding: 2rem 1rem 4rem;
}
/* Header */
.game-header {
border-bottom: 1px solid #c8b89a;
padding-bottom: 1rem;
margin-bottom: 1.5rem;
}
.game-title {
font-size: 2rem;
font-weight: normal;
letter-spacing: 0.15em;
color: #2a1f0e;
}
.game-subtitle {
font-size: 0.8rem;
color: #6b5a3e;
font-style: italic;
margin-top: 2px;
letter-spacing: 0.05em;
}
/* Journey */
.journey {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
margin-bottom: 1.5rem;
}
.journey-node {
font-size: 0.75rem;
padding: 3px 10px;
border-radius: 12px;
border: 1px solid #c8b89a;
background: #ede8df;
color: #6b5a3e;
}
.journey-node.reached {
background: #d4e8d4;
color: #2d5a2d;
border-color: #8fbc8f;
}
.journey-node.current {
background: #2d5a2d;
color: #f0f7f0;
border-color: #2d5a2d;
font-weight: bold;
}
.journey-arrow {
color: #c8b89a;
font-size: 0.75rem;
}
/* Stats */
.stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-bottom: 1.5rem;
}
.stat {
background: #ede8df;
border: 1px solid #c8b89a;
border-radius: 6px;
padding: 0.75rem;
}
.stat-label {
font-size: 0.7rem;
color: #6b5a3e;
text-transform: uppercase;
letter-spacing: 0.08em;
margin-bottom: 4px;
}
.stat-value {
font-size: 1.4rem;
color: #2a1f0e;
}
.stat-sub {
font-size: 0.65rem;
color: #6b5a3e;
margin-top: 2px;
}
/* Progress bar */
.progress-wrap {
margin-bottom: 1rem;
}
.progress-label {
display: flex;
justify-content: space-between;
font-size: 0.75rem;
color: #6b5a3e;
font-style: italic;
margin-bottom: 4px;
}
.progress-track {
height: 4px;
background: #c8b89a;
border-radius: 2px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: #2d5a2d;
border-radius: 2px;
transition: width 0.4s linear;
}
.progress-fill.otium {
background: #534ab7;
}
/* Message */
.message {
min-height: 1.2rem;
font-size: 0.8rem;
color: #2d5a2d;
font-style: italic;
margin-bottom: 0.75rem;
}
/* Section title */
.section-title {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.1em;
color: #6b5a3e;
margin-bottom: 0.75rem;
}
/* Routes */
.route-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 1.5rem;
}
.route-card {
background: #faf7f2;
border: 1px solid #c8b89a;
border-radius: 8px;
padding: 0.875rem 1rem;
cursor: pointer;
transition: border-color 0.15s;
}
.route-card:hover:not(.locked) {
border-color: #8fbc8f;
}
.route-card.locked {
opacity: 0.5;
cursor: not-allowed;
}
.route-card.selected {
border: 2px solid #2d5a2d;
}
.route-name {
font-size: 0.85rem;
font-weight: bold;
color: #2a1f0e;
margin-bottom: 2px;
}
.route-goods {
font-size: 0.75rem;
color: #6b5a3e;
font-style: italic;
margin-bottom: 6px;
}
.route-desc {
font-size: 0.72rem;
color: #6b5a3e;
margin-bottom: 8px;
}
.route-meta {
display: flex;
justify-content: space-between;
font-size: 0.72rem;
}
.route-profit {
color: #2d5a2d;
font-weight: bold;
}
.route-time {
color: #6b5a3e;
}
.route-lock {
font-size: 0.68rem;
color: #6b5a3e;
background: #ede8df;
border-radius: 4px;
padding: 1px 6px;
display: inline-block;
margin-top: 4px;
}
/* Actions */
.actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 1.5rem;
}
.btn {
padding: 0.75rem 1rem;
border-radius: 6px;
border: 1px solid #c8b89a;
background: #faf7f2;
color: #2a1f0e;
font-size: 0.85rem;
transition: background 0.15s;
}
.btn:hover:not(:disabled) {
background: #ede8df;
}
.btn:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.btn-dispatch {
border-color: #2d5a2d;
color: #2d5a2d;
font-weight: bold;
}
.btn-dispatch:hover:not(:disabled) {
background: #d4e8d4;
}
.btn-otium {
border-color: #534ab7;
color: #534ab7;
font-weight: bold;
}
.btn-otium:hover:not(:disabled) {
background: #eeedfe;
}
/* Journal */
.journal {
background: #faf7f2;
border: 1px solid #c8b89a;
border-radius: 8px;
padding: 1rem 1.25rem;
max-height: 260px;
overflow-y: auto;
}
.journal-entry {
border-left: 2px solid #c8b89a;
padding-left: 12px;
margin-bottom: 1rem;
}
.journal-entry:last-child {
margin-bottom: 0;
}
.journal-entry.new {
border-left-color: #534ab7;
}
.journal-date {
font-size: 0.7rem;
color: #6b5a3e;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 4px;
}
.journal-text {
font-size: 0.85rem;
color: #2a1f0e;
line-height: 1.7;
}
/* Token */
.token-bar {
margin-top: 2rem;
padding-top: 1rem;
border-top: 1px solid #c8b89a;
font-size: 0.68rem;
color: #6b5a3e;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.token-code {
font-family: monospace;
letter-spacing: 0.1em;
}
/* Navigation */
.main-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.75rem 1.5rem;
border-bottom: 1px solid #c8b89a;
background: #f5f0e8;
position: sticky;
top: 0;
z-index: 10;
}
.nav-title {
font-size: 0.85rem;
letter-spacing: 0.2em;
color: #6b5a3e;
}
.nav-links {
display: flex;
gap: 8px;
}
.nav-btn {
padding: 4px 14px;
border-radius: 12px;
border: 1px solid #c8b89a;
background: transparent;
color: #6b5a3e;
font-size: 0.78rem;
letter-spacing: 0.05em;
transition: background 0.15s;
}
.nav-btn:hover {
background: #ede8df;
}
.nav-btn.active {
background: #2a1f0e;
color: #f5f0e8;
border-color: #2a1f0e;
}
/* Screen wrapper */
.screen-wrap {
min-height: calc(100vh - 49px);
}
/* Placeholder screens */
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: calc(100vh - 49px);
font-style: italic;
color: #6b5a3e;
font-size: 0.85rem;
}
/* Map screen */
.map-screen {
padding: 1.5rem 1rem;
background: #0f1a24;
min-height: calc(100vh - 49px);
display: flex;
align-items: flex-start;
justify-content: center;
}
/* New game button — inline in token bar */
.btn-new-game {
background: none;
border: none;
color: #9a8a6e;
font-size: 0.68rem;
cursor: pointer;
padding: 0;
text-decoration: underline;
text-underline-offset: 2px;
}
.btn-new-game:hover {
color: #6b5a3e;
}