First commit, done on M6 from the PLAN.MD
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
@@ -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; }
|
||||
Reference in New Issue
Block a user