First commit, done on M6 from the PLAN.MD

This commit is contained in:
gauvainboiche
2026-10-25 17:34:44 +01:00
parent d5dc2a3901
commit 04193e2013
86 changed files with 8396 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
/* Decision cards: documents in the manila folder, answered with rubber stamps */
.inbox__body.is-card {
padding: 0;
background: none;
box-shadow: none;
min-height: 0;
}
.card {
position: relative;
padding: 16px 20px 12px;
background-color: var(--paper);
background-image: var(--paper-grain);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
overflow: hidden;
}
.card__head {
display: flex;
justify-content: space-between;
align-items: baseline;
padding-bottom: 4px;
border-bottom: 2px solid var(--ink);
font-size: 11px;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.card__kind { font-weight: 700; color: var(--ink); }
.card__date { font-family: var(--font-num); letter-spacing: 0.04em; text-transform: none; }
.card__from { display: flex; align-items: center; gap: 10px; margin: 10px 0 6px; }
.card__from b { display: block; font-size: 13px; font-weight: 400; }
.card__from small { display: block; font-size: 11px; opacity: 0.75; }
.seal {
display: grid;
place-items: center;
width: 36px;
height: 36px;
border-radius: 50%;
border: 2px solid var(--ink);
color: var(--ink);
font-family: var(--font-head);
font-size: 15px;
letter-spacing: 0.04em;
flex: none;
box-shadow: inset 0 0 0 2px var(--paper), inset 0 0 0 3px var(--ink);
}
.card__title { margin: 4px 0 6px; font-family: var(--font-head); font-weight: 400; font-size: 24px; line-height: 1.1; }
.card__body p { margin: 0 0 8px; font-size: 14px; line-height: 1.45; }
.card__choices { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 14px; }
.card__keys { margin: 8px 0 0; text-align: center; font-size: 10px; opacity: 0.6; }
/* Document types */
.card--telegram {
background-color: #efe0a2;
font-family: var(--font-num);
border-top: 6px solid #c9a93a;
border-bottom: 6px solid #c9a93a;
}
.card--telegram .card__head { border-bottom: 2px dashed var(--ink); }
.card--telegram .card__body p { text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; }
.card--telegram .card__title { font-family: var(--font-num); font-weight: 700; font-size: 20px; text-transform: uppercase; }
.card--petition {
background-image:
var(--paper-grain),
repeating-linear-gradient(transparent 0 21px, rgba(60, 105, 140, 0.28) 21px 22px);
background-position: 0 0, 0 4px;
}
.card--petition .card__kind::after { content: " ✎"; }
.card--report { background-color: #e4e6df; border-top: 8px solid var(--ink); }
.card--report .card__head { border-bottom: 1px solid var(--ink); }
.card--letter { background-color: #f3e8cb; font-family: var(--font-head); }
.card--letter .card__body p { font-size: 15px; }
.card--letter .seal { background: #8d2b1f; color: #f6e7c8; border-color: #5e1a12; box-shadow: inset 0 0 0 2px #8d2b1f, inset 0 0 0 3px #f6e7c8; }
/* Stamp buttons */
.stamp-btn {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
gap: 8px;
min-height: 84px;
padding: 10px 10px 8px;
font-family: var(--font-type);
font-size: 13px;
line-height: 1.25;
color: var(--text);
background: rgba(255, 255, 255, 0.35);
border: 2px solid rgba(43, 36, 24, 0.55);
border-radius: 3px;
cursor: pointer;
}
.stamp-btn__ink {
padding: 1px 8px;
border: 2px solid currentColor;
font-size: 13px;
letter-spacing: 0.12em;
text-transform: uppercase;
transform: rotate(-4deg);
opacity: 0.55;
transition: opacity 0.15s, transform 0.15s;
}
.stamp-btn--yes .stamp-btn__ink { color: var(--ink-green); }
.stamp-btn--no .stamp-btn__ink { color: var(--ink-red); }
.stamp-btn:hover:not(:disabled) { background: rgba(255, 255, 255, 0.6); }
.stamp-btn:hover:not(:disabled) .stamp-btn__ink { opacity: 1; transform: rotate(-4deg) scale(1.08); }
.stamp-btn:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.stamp-btn:disabled { cursor: default; opacity: 0.5; }
/* The big stamp that lands on the document */
.card__stamp {
position: absolute;
top: 46%;
left: 50%;
padding: 4px 22px;
border: 6px solid currentColor;
border-radius: 6px;
font-family: var(--font-type);
font-size: 44px;
letter-spacing: 0.08em;
text-transform: uppercase;
white-space: nowrap;
pointer-events: none;
mix-blend-mode: multiply;
transform: translate(-50%, -50%) rotate(-12deg);
animation: stamp-in 0.3s cubic-bezier(0.2, 0.9, 0.3, 1.2) both;
}
.card__stamp--yes { color: var(--ink-green); }
.card__stamp--no { color: var(--ink-red); }
@keyframes stamp-in {
from { opacity: 0; transform: translate(-50%, -50%) rotate(-12deg) scale(2.6); }
to { opacity: 0.9; transform: translate(-50%, -50%) rotate(-12deg) scale(1); }
}
@media (prefers-reduced-motion: reduce) {
.card__stamp { animation: none; opacity: 0.9; }
}
+112
View File
@@ -0,0 +1,112 @@
@font-face {
font-family: "Special Elite";
src: url("../fonts/SpecialElite-Regular.ttf") format("truetype");
font-display: swap;
}
@font-face {
font-family: "IM Fell English";
src: url("../fonts/IMFeENrm28P.ttf") format("truetype");
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "IM Fell English";
src: url("../fonts/IMFeENit28P.ttf") format("truetype");
font-style: italic;
font-display: swap;
}
@font-face {
font-family: "Courier Prime";
src: url("../fonts/CourierPrime-Regular.ttf") format("truetype");
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "Courier Prime";
src: url("../fonts/CourierPrime-Bold.ttf") format("truetype");
font-weight: 700;
font-display: swap;
}
:root {
--font-type: "Special Elite", "Courier New", monospace;
--font-head: "IM Fell English", Georgia, serif;
--font-num: "Courier Prime", "Courier New", monospace;
--ink: #1c2a44;
--ink-red: #8d2b1f;
--ink-green: #2c5a3a;
--text: #2b2418;
--paper: #efe4c8;
--news-paper: #e2dccb;
--paper-grain: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .38 0 0 0 0 .30 0 0 0 0 .18 .5 0 0 0 -.08'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
--leather-grain: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='l'><feTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .9 0 0 0 -.25'/></filter><rect width='100%' height='100%' filter='url(%23l)'/></svg>");
--wood-grain: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='700' height='260'><filter id='w'><feTurbulence type='fractalNoise' baseFrequency='0.004 0.45' numOctaves='4' seed='4'/><feColorMatrix values='0 0 0 0 .10 0 0 0 0 .05 0 0 0 0 .02 1.3 0 0 0 -.45'/></filter><rect width='100%' height='100%' filter='url(%23w)'/></svg>");
}
* { box-sizing: border-box; }
html, body {
margin: 0;
height: 100%;
}
body {
background-color: #4b2f1b;
background-image:
var(--wood-grain),
repeating-linear-gradient(0deg, transparent 0 258px, rgba(0, 0, 0, 0.5) 258px 261px, rgba(255, 215, 160, 0.07) 261px 263px),
linear-gradient(90deg, #3d2615, #5d3b22 35%, #47301b 70%, #603d22);
color: var(--text);
font-family: var(--font-type);
font-size: 14px;
line-height: 1.35;
}
#desk {
min-height: 100vh;
padding: 20px;
display: grid;
place-items: center;
box-shadow: inset 0 0 180px rgba(0, 0, 0, 0.7);
}
/* Leather desk pad with a stitched border */
#pad {
position: relative;
width: min(1320px, 100%);
height: calc(100vh - 40px);
min-height: 640px;
padding: 30px;
display: grid;
grid-template-columns: minmax(360px, 1.1fr) minmax(300px, 1fr) minmax(300px, 0.9fr);
gap: 24px;
background-color: #26322c;
background-image:
var(--leather-grain),
radial-gradient(ellipse at 30% 15%, rgba(255, 255, 255, 0.08), transparent 60%);
border-radius: 16px;
box-shadow:
inset 0 0 0 2px rgba(0, 0, 0, 0.45),
inset 0 0 80px rgba(0, 0, 0, 0.6),
0 20px 44px rgba(0, 0, 0, 0.65);
}
#pad::before {
content: "";
position: absolute;
inset: 12px;
border: 2px dashed rgba(224, 196, 140, 0.4);
border-radius: 10px;
pointer-events: none;
}
#side {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
gap: 22px;
min-height: 0;
}
#pad > * { min-height: 0; }
+161
View File
@@ -0,0 +1,161 @@
/* Urgent telegrams and the end-of-game front page */
/* ---- Urgent telegram: slides in over the desk ---- */
.alerts {
position: absolute;
top: 18px;
left: 50%;
z-index: 30;
width: min(560px, 90%);
transform: translateX(-50%);
}
.alerts[hidden] { display: none; }
.telegram {
padding: 12px 18px 14px;
background: #efe0a2 var(--paper-grain);
border-top: 7px solid #c9a93a;
border-bottom: 7px solid #c9a93a;
font-family: var(--font-num);
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.7);
transform: rotate(-0.6deg);
animation: telegram-in 0.45s cubic-bezier(0.2, 0.9, 0.3, 1.1) both;
}
.telegram__head {
display: flex;
justify-content: space-between;
padding-bottom: 3px;
border-bottom: 2px dashed var(--ink);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--ink-red);
}
.telegram h3 { margin: 8px 0 4px; font-family: var(--font-num); font-weight: 700; font-size: 19px; text-transform: uppercase; }
.telegram p { margin: 0 0 6px; font-size: 13px; line-height: 1.5; letter-spacing: 0.04em; }
.telegram .brass { margin-top: 6px; }
@keyframes telegram-in {
from { opacity: 0; transform: translateY(-60px) rotate(-3deg); }
to { opacity: 1; transform: translateY(0) rotate(-0.6deg); }
}
@media (prefers-reduced-motion: reduce) { .telegram { animation: none; } }
/* ---- Profile question (first thing in the folder) ---- */
.profile__ask { font-weight: 700; margin-top: 14px; }
.profile__choices { display: grid; gap: 8px; margin: 10px 0 6px; }
.profile__choices .brass--wide { margin-top: 0; }
.profile__note { margin: 8px 0 0; font-size: 11px; opacity: 0.7; }
/* ---- End of game ---- */
#endgame {
grid-column: 1 / -1;
grid-row: 1;
min-height: 0;
}
#endgame[hidden] { display: none; }
#pad.is-endgame #dashboard,
#pad.is-endgame #folder,
#pad.is-endgame #side,
#pad.is-endgame #ledger { display: none; }
.end {
height: 100%;
display: flex;
flex-direction: column;
padding: 14px 22px 12px;
overflow-y: auto;
transform: none;
}
.end__banner { text-align: center; padding: 4px 0 10px; }
.end__banner h1 {
margin: 0;
font-family: var(--font-head);
font-weight: 400;
font-size: 40px;
line-height: 1.05;
letter-spacing: 0.02em;
}
.end--lost .end__banner h1 { color: var(--ink-red); }
.end__banner p { margin: 4px 0 0; font-size: 16px; font-style: italic; }
.end__grid {
flex: 1;
min-height: 0;
display: grid;
grid-template-columns: minmax(250px, 1fr) minmax(300px, 1.3fr) minmax(250px, 1fr);
gap: 22px;
padding-top: 10px;
border-top: 1px solid var(--text);
}
.end__grid h3 {
margin: 0 0 6px;
padding-bottom: 2px;
font-size: 14px;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid rgba(43, 36, 24, 0.5);
}
.end__verdict { display: flex; flex-direction: column; min-height: 0; }
.end__grade {
align-self: flex-start;
display: flex;
align-items: center;
gap: 12px;
margin: 4px 0 6px;
font-size: 12px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.end__letter {
display: grid;
place-items: center;
width: 74px;
height: 74px;
border: 5px double var(--ink);
border-radius: 50%;
font-family: var(--font-head);
font-size: 50px;
line-height: 1;
color: var(--ink);
transform: rotate(-6deg);
}
.end__grade[data-grade="S"] .end__letter,
.end__grade[data-grade="A"] .end__letter { color: var(--ink-green); border-color: var(--ink-green); }
.end__grade[data-grade="D"] .end__letter,
.end__grade[data-grade="F"] .end__letter { color: var(--ink-red); border-color: var(--ink-red); }
.end__title { margin: 4px 0; font-size: 24px; line-height: 1.1; font-style: italic; }
.end__title::before { content: "« "; }
.end__title::after { content: " »"; }
.end__text { margin: 0 0 8px; font-size: 15px; line-height: 1.4; }
.end__score { margin: auto 0 0; font-family: var(--font-num); font-size: 12px; opacity: 0.85; }
.end__charts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; align-content: start; }
.end__chart { margin: 0; }
.end__chart figcaption { display: flex; align-items: baseline; gap: 6px; font-size: 13px; white-space: nowrap; }
.end__chart figcaption span { overflow: hidden; text-overflow: ellipsis; }
.end__chart figcaption b { font-family: var(--font-num); }
.end__chart figcaption small { margin-left: auto; font-size: 10px; opacity: 0.7; }
.chart { display: block; height: 96px; background: rgba(255, 255, 255, 0.3); border: 1px solid rgba(60, 105, 140, 0.4); }
.end__decisions ol { margin: 0; padding: 0; list-style: none; counter-reset: d; }
.end__decisions li { counter-increment: d; position: relative; padding: 0 0 8px 26px; font-size: 14px; line-height: 1.25; }
.end__decisions li::before {
content: counter(d);
position: absolute;
left: 0;
top: -1px;
font-family: var(--font-head);
font-size: 22px;
color: var(--ink-red);
}
.end__decisions li b { display: block; font-weight: 400; font-size: 15px; }
.end__when { display: block; font-size: 11px; opacity: 0.7; }
.end__chose { display: block; font-size: 12px; font-style: italic; }
.end__foot { padding-top: 8px; text-align: center; }
.end__foot .brass--wide { margin-top: 0; }
+145
View File
@@ -0,0 +1,145 @@
/* Quarterly ledger: a two-page accounting book over the centre and right columns */
.ledger {
grid-column: 2 / 4;
grid-row: 1;
min-height: 0;
}
.ledger[hidden] { display: none; }
#pad.is-ledger #folder,
#pad.is-ledger #side { display: none; }
.ledger__book {
height: 100%;
display: grid;
grid-template-columns: 1fr 1fr;
padding: 10px;
background: #1d3a2b;
border-radius: 8px;
box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.4), 0 12px 24px rgba(0, 0, 0, 0.55);
}
.ledger__page {
position: relative;
min-height: 0;
padding: 14px 18px 12px 26px;
overflow-y: auto;
color: var(--text);
background-color: #f1e9cf;
background-image:
var(--paper-grain),
linear-gradient(90deg, transparent 18px, rgba(160, 50, 40, 0.5) 18px 19px, transparent 19px);
}
.ledger__page--left { border-radius: 4px 0 0 4px; box-shadow: inset -14px 0 18px -10px rgba(60, 40, 10, 0.5); }
.ledger__page--right { border-radius: 0 4px 4px 0; box-shadow: inset 14px 0 18px -10px rgba(60, 40, 10, 0.5); }
.ledger__page h2 { margin: 0; font-family: var(--font-head); font-weight: 400; font-size: 21px; letter-spacing: 0.03em; }
.ledger__page h3 {
margin: 10px 0 4px;
font-family: var(--font-head);
font-weight: 400;
font-size: 13px;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid rgba(43, 36, 24, 0.5);
}
.ledger__sub { margin: 2px 0 6px; font-size: 11px; line-height: 1.3; opacity: 0.8; }
/* Rows sit on the green ruled lines of the book (28px pitch) */
.ledger__rows {
background: repeating-linear-gradient(transparent 0 27px, rgba(50, 120, 80, 0.38) 27px 28px);
}
.lrow {
display: grid;
grid-template-columns: 124px minmax(60px, 1fr) 54px 18px;
align-items: center;
gap: 8px;
height: 28px;
}
.lrow--tax { grid-template-columns: 112px minmax(50px, 1fr) 54px 74px; }
.lrow__name {
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.lrow__ctl { position: relative; display: block; height: 20px; }
.lrow__ctl input { position: absolute; inset: 0; width: 100%; margin: 0; }
.lrow__tick {
position: absolute;
top: 1px;
width: 2px;
height: 18px;
background: var(--ink-red);
opacity: 0.7;
pointer-events: none;
}
.lrow__val { white-space: nowrap; font-family: var(--font-num); font-weight: 700; font-size: 13px; text-align: right; color: var(--ink); }
.lrow.is-changed .lrow__val { color: var(--ink-red); }
.lrow__q { text-align: center; font-size: 11px; cursor: help; }
.lrow__q.up { color: var(--ink-green); }
.lrow__q.down { color: var(--ink-red); }
.lrow__q.flat { opacity: 0.5; }
.lrow__yield { font-size: 11px; text-align: right; opacity: 0.8; }
.ledger__total {
margin-top: 6px;
display: flex;
justify-content: space-between;
font-size: 13px;
border-top: 2px solid var(--ink);
padding-top: 3px;
}
.ledger__total b { font-family: var(--font-num); }
.sum { display: grid; grid-template-columns: 1fr auto; gap: 1px 10px; margin: 0; font-size: 13px; }
.sum dd { margin: 0; text-align: right; font-family: var(--font-num); font-weight: 700; }
.sum small { display: block; font-weight: 400; font-size: 11px; }
.sum dt:nth-of-type(4), .sum dd:nth-of-type(4) { border-top: 1px solid var(--ink); }
.sum__balance { font-weight: 700; }
.sum__balance.good { color: var(--ink-green); }
.sum__balance.bad { color: var(--ink-red); }
.proj { width: 100%; border-collapse: collapse; font-size: 12px; }
.proj th { font-weight: 400; text-align: left; padding: 1px 0; }
.proj thead th { text-align: right; font-size: 11px; opacity: 0.8; }
.proj td { white-space: nowrap; text-align: right; font-family: var(--font-num); padding: 1px 0 1px 6px; }
.proj tbody tr:nth-child(odd) { background: rgba(50, 120, 80, 0.08); }
.ledger__actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 10px; }
.ledger__actions .brass { white-space: nowrap; padding: 5px 12px; font-size: 13px; }
.ledger__actions .brass--wide { margin-top: 0; }
.ledger__error { color: var(--ink-red); margin: 6px 0 0; font-size: 12px; }
.ledger__error[hidden] { display: none; }
/* Range sliders: an ink rule with a brass knob */
.ledger input[type="range"] {
-webkit-appearance: none;
appearance: none;
background: transparent;
cursor: pointer;
}
.ledger input[type="range"]::-webkit-slider-runnable-track { height: 4px; background: var(--ink); border-radius: 2px; }
.ledger input[type="range"]::-moz-range-track { height: 4px; background: var(--ink); border-radius: 2px; }
.ledger input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 14px;
height: 14px;
margin-top: -5px;
border-radius: 50%;
border: 1px solid #6e5316;
background: radial-gradient(circle at 35% 30%, #f1d98c, #b98e32);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.ledger input[type="range"]::-moz-range-thumb {
width: 12px;
height: 12px;
border-radius: 50%;
border: 1px solid #6e5316;
background: radial-gradient(circle at 35% 30%, #f1d98c, #b98e32);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.ledger input[type="range"]:focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }
+126
View File
@@ -0,0 +1,126 @@
/* Main menu and pause menu: a "Top secret" folder in the middle of the desk */
#menu {
grid-column: 1 / -1;
grid-row: 1;
z-index: 40;
display: grid;
place-items: center;
min-height: 0;
}
#menu[hidden] { display: none; }
/* While the menu is open it replaces everything else on the pad. */
#pad.is-menu > :not(#menu) { display: none !important; }
.cal__menu { display: block; width: 100%; margin-top: 8px; }
.menu__folder {
position: relative;
width: min(580px, 94%);
max-height: 100%;
padding: 42px 22px 22px;
overflow-y: auto;
background: #d4b77a var(--paper-grain);
box-shadow:
inset 0 0 40px rgba(110, 75, 25, 0.35),
0 2px 2px rgba(0, 0, 0, 0.35),
0 18px 34px rgba(0, 0, 0, 0.6);
transform: rotate(-0.4deg);
}
.menu__stamp {
position: absolute;
top: 12px;
right: 22px;
font-size: 15px;
padding: 3px 12px;
transform: rotate(7deg);
}
.menu__sheet {
padding: 20px 24px 18px;
background: var(--paper) var(--paper-grain);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
.menu__sheet h1,
.menu__sheet h3 { margin: 0 0 6px; font-family: var(--font-head); font-weight: 400; }
.menu__title { font-size: 46px; line-height: 1; letter-spacing: 0.02em; }
.menu__sheet h3 { font-size: 24px; }
.menu__sheet p { margin: 0 0 10px; font-size: 14px; line-height: 1.4; }
.menu__sub { opacity: 0.85; }
.menu__list { display: grid; gap: 8px; margin: 14px 0 4px; }
.menu__list .brass--wide,
.menu__row .brass--wide { margin-top: 0; width: 100%; }
.brass small { display: block; font-size: 11px; font-weight: 400; opacity: 0.8; }
.menu__row { display: flex; gap: 10px; margin: 10px 0 4px; }
.menu__row .brass { flex: 1; }
.menu__foot { margin-top: 14px; display: grid; }
.menu__foot .brass--wide { margin-top: 0; }
.menu__field { display: block; margin: 12px 0 0; padding: 0; border: 0; font-size: 13px; }
.menu__field input[type="text"],
.menu__field select {
display: block;
width: 100%;
margin-top: 4px;
padding: 7px 8px;
font: inherit;
color: var(--text);
background: rgba(255, 255, 255, 0.55);
border: 1px solid rgba(43, 36, 24, 0.55);
}
.menu__field legend { padding: 0; margin-bottom: 4px; }
.menu__radios label { display: block; padding: 4px 0; cursor: pointer; }
.menu__radios input { margin-right: 8px; accent-color: var(--ink); }
.menu__check { display: flex; gap: 10px; align-items: flex-start; cursor: pointer; }
.menu__check input { margin-top: 4px; accent-color: var(--ink); }
.menu__check small { display: block; font-size: 11px; opacity: 0.75; }
.menu__text {
display: block;
width: 100%;
padding: 8px;
font-family: var(--font-num);
font-size: 11px;
line-height: 1.3;
color: var(--text);
background: rgba(255, 255, 255, 0.55);
border: 1px solid rgba(43, 36, 24, 0.55);
resize: vertical;
word-break: break-all;
}
.menu__msg { margin: 8px 0 0; padding: 4px 8px; font-size: 13px; border-left: 4px solid var(--ink-green); background: rgba(44, 90, 58, 0.1); }
.menu__msg--error { border-left-color: var(--ink-red); background: rgba(141, 43, 31, 0.1); color: var(--ink-red); }
/* Save slots */
.menu__slots { margin: 10px 0 0; padding: 0; list-style: none; }
.menu__slot {
display: grid;
grid-template-columns: 112px 1fr auto;
gap: 10px;
align-items: center;
padding: 7px 0;
border-bottom: 1px dotted rgba(43, 36, 24, 0.45);
font-size: 13px;
}
.menu__slotname { font-family: var(--font-head); font-size: 17px; }
.menu__slotinfo small { display: block; font-size: 11px; opacity: 0.7; }
.menu__slotinfo em { opacity: 0.6; }
.menu__slotbtns { display: flex; gap: 6px; }
.menu__slotbtns .brass { padding: 4px 10px; font-size: 12px; white-space: nowrap; }
.brass--armed { background: linear-gradient(#d9826f, #a8422f); color: #fff; border-color: #5e1a12; }
.menu__file { display: grid; place-items: center; margin: 0; cursor: pointer; }
@media (prefers-reduced-motion: no-preference) {
.menu__folder { animation: folder-in 0.3s ease-out both; }
}
@keyframes folder-in {
from { opacity: 0; transform: translateY(14px) rotate(-1.5deg); }
to { opacity: 1; transform: translateY(0) rotate(-0.4deg); }
}
.menu__stamp { max-width: none; white-space: nowrap; }
+257
View File
@@ -0,0 +1,257 @@
/* Paper sheets on the desk */
.paper {
position: relative;
padding: 16px 18px;
background-color: var(--paper);
background-image: var(--paper-grain);
color: var(--text);
transform: rotate(var(--rot, 0deg));
box-shadow:
inset 0 0 28px rgba(120, 90, 40, 0.22),
0 1px 1px rgba(0, 0, 0, 0.35),
0 10px 20px rgba(0, 0, 0, 0.5);
overflow: hidden;
}
.paper h2,
.paper h3,
.paper h4 {
margin: 0;
font-family: var(--font-head);
font-weight: 400;
}
/* Graph paper (dashboard) */
.paper--graph {
background-image:
var(--paper-grain),
linear-gradient(rgba(60, 105, 140, 0.16) 1px, transparent 1px),
linear-gradient(90deg, rgba(60, 105, 140, 0.16) 1px, transparent 1px);
background-size: auto, 16px 16px, 16px 16px;
overflow-y: auto;
}
.dash__head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
margin-bottom: 8px;
}
.dash__head h2 {
font-size: 22px;
letter-spacing: 0.04em;
text-transform: uppercase;
border-bottom: 2px solid var(--ink);
padding-bottom: 2px;
}
.dash__sub {
margin: 10px 0 4px;
font-size: 13px;
letter-spacing: 0.08em;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 8px;
}
.stamp {
display: inline-block;
padding: 1px 6px;
border: 2px solid var(--ink-red);
color: var(--ink-red);
font-family: var(--font-type);
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
transform: rotate(4deg);
opacity: 0.8;
max-width: 118px;
font-size: 10px;
line-height: 1.15;
text-align: center;
}
.stamp--small { font-size: 10px; transform: rotate(-3deg); }
/* Gauges */
.gauge {
display: grid;
grid-template-columns: 124px minmax(60px, 1fr) 28px 76px;
align-items: center;
gap: 8px;
min-height: 33px;
padding: 2px 0;
}
.gauge__label { font-size: 13px; line-height: 1.1; }
.gauge__band {
display: block;
font-size: 10px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--ink-red);
}
.gauge__track {
position: relative;
height: 12px;
border: 1px solid var(--ink);
background: rgba(28, 42, 68, 0.07);
}
.gauge__track i {
position: absolute;
top: 0;
bottom: 0;
width: 1px;
background: rgba(28, 42, 68, 0.35);
}
.gauge__track i:nth-of-type(1) { left: 25%; }
.gauge__track i:nth-of-type(2) { left: 50%; }
.gauge__track i:nth-of-type(3) { left: 75%; }
.gauge__fill {
position: absolute;
inset: 0 auto 0 0;
background:
repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0 2px, transparent 2px 5px),
var(--ink);
transition: width 0.6s ease, background-color 0.6s;
}
.gauge.is-low .gauge__fill { background-color: var(--ink-red); }
.gauge.is-high .gauge__fill { background-color: var(--ink-green); }
.gauge__value {
font-family: var(--font-num);
font-weight: 700;
font-size: 15px;
text-align: right;
}
.gauge__spark { height: 24px; width: 76px; }
.spark { display: block; background: rgba(255, 255, 255, 0.25); border: 1px solid rgba(60, 105, 140, 0.4); }
.spark__grid line { stroke: rgba(60, 105, 140, 0.25); stroke-width: 0.6; }
.spark__line { fill: none; stroke: var(--ink); stroke-width: 1.4; stroke-linejoin: round; }
.spark__dot { fill: var(--ink-red); }
/* Economic table */
.econ { width: 100%; border-collapse: collapse; font-size: 13px; }
.econ th { text-align: left; font-weight: 400; padding: 1px 0; }
.econ__val { font-family: var(--font-num); font-weight: 700; text-align: right; padding-right: 8px; }
.econ__trend { width: 18px; text-align: center; font-size: 11px; }
.econ__trend.good { color: var(--ink-green); }
.econ__trend.bad { color: var(--ink-red); }
.econ__trend.flat { color: rgba(43, 36, 24, 0.5); }
/* Intelligence summary */
.intel { list-style: none; margin: 0; padding: 0; font-size: 13px; }
.intel li { display: flex; justify-content: space-between; padding: 1px 0; border-bottom: 1px dotted rgba(43, 36, 24, 0.4); }
.intel b { font-family: var(--font-num); text-transform: uppercase; letter-spacing: 0.05em; }
.intel li[data-level="0"] b { color: var(--ink-green); }
.intel li[data-level="1"] b { color: var(--ink); }
.intel li[data-level="2"] b { color: #a4631b; }
.intel li[data-level="3"] b,
.intel li[data-level="4"] b { color: var(--ink-red); }
/* Manila folder (centre) */
.paper--folder {
background-color: #d4b77a;
padding-top: 38px;
box-shadow:
inset 0 0 40px rgba(110, 75, 25, 0.35),
0 1px 1px rgba(0, 0, 0, 0.35),
0 10px 20px rgba(0, 0, 0, 0.5);
}
.inbox__tab {
position: absolute;
top: 0;
left: 22px;
padding: 6px 16px 4px;
background: #c6a566;
border-radius: 0 0 8px 8px;
font-size: 15px;
letter-spacing: 0.06em;
text-transform: uppercase;
box-shadow: inset 0 -2px 4px rgba(90, 60, 20, 0.3);
}
.inbox__body {
background: var(--paper);
background-image: var(--paper-grain);
padding: 18px 20px;
min-height: 160px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
.inbox__body h3 { font-size: 20px; margin-bottom: 8px; }
.inbox__idle { font-style: italic; opacity: 0.8; }
/* Desk calendar */
.paper--calendar { padding: 0; text-align: center; }
.cal__head {
padding: 5px 0 4px;
background: var(--ink-red);
color: #f6ead0;
font-family: var(--font-head);
font-size: 15px;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.cal__body { padding: 8px 14px 12px; }
.cal__day { font-family: var(--font-head); font-size: 54px; line-height: 1; }
.cal__month { font-family: var(--font-head); font-size: 18px; text-transform: capitalize; }
.cal__count { margin-top: 4px; font-size: 12px; opacity: 0.8; }
.cal__term {
height: 6px;
margin: 5px 0 8px;
border: 1px solid var(--ink);
background: rgba(28, 42, 68, 0.08);
}
.cal__term span { display: block; height: 100%; background: var(--ink); }
.cal__next {
display: grid;
grid-template-columns: 1fr auto;
gap: 1px 10px;
margin: 0 0 10px;
font-size: 12px;
text-align: left;
}
.cal__next dt { opacity: 0.8; }
.cal__next dd { margin: 0; font-family: var(--font-num); font-weight: 700; text-align: right; }
.cal__controls { display: flex; justify-content: center; gap: 6px; }
/* Newspaper */
.paper--news {
background-color: var(--news-paper);
font-family: var(--font-head);
overflow-y: auto;
}
.news__mast {
text-align: center;
border-bottom: 3px double var(--text);
padding-bottom: 4px;
margin-bottom: 8px;
}
.news__mast h2 { font-size: 26px; letter-spacing: 0.02em; }
.news__edition { font-size: 11px; font-style: italic; }
.news__edition::first-letter { text-transform: uppercase; }
.news__lead h3 { font-size: 22px; line-height: 1.12; margin-bottom: 4px; }
.news__lead p { margin: 0 0 8px; font-size: 14px; }
.news__side { display: grid; gap: 8px; border-top: 1px solid var(--text); padding-top: 8px; }
.news__side article + article { border-top: 1px solid rgba(43, 36, 24, 0.35); padding-top: 6px; }
.news__side h4 { font-size: 16px; line-height: 1.15; }
.news__side p { margin: 2px 0 0; font-size: 13px; }
+32
View File
@@ -0,0 +1,32 @@
/* Brass buttons */
.brass {
min-width: 42px;
padding: 5px 9px;
font-family: var(--font-num);
font-weight: 700;
font-size: 14px;
color: #3a2a0c;
cursor: pointer;
background: linear-gradient(#e7c872, #b98e32 55%, #a37a24);
border: 1px solid #6e5316;
border-radius: 5px;
box-shadow: inset 0 1px 0 rgba(255, 245, 200, 0.7), 0 2px 3px rgba(0, 0, 0, 0.45);
}
.brass:hover { filter: brightness(1.08); }
.brass:active,
.brass[aria-pressed="true"] {
background: linear-gradient(#a37a24, #c79d45);
box-shadow: inset 0 2px 4px rgba(60, 40, 5, 0.6);
transform: translateY(1px);
}
.brass:focus-visible {
outline: 2px solid var(--ink);
outline-offset: 2px;
}
.brass--lang { margin-left: 6px; min-width: 38px; }
.brass--wide { margin-top: 12px; padding: 8px 18px; }