Code/Demo/DayNightHintCard.razor.scss
// ================================================================================================
// FIELD KIT UI SYSTEM · Day / Night Kit · demo key-hint card
//
// SOURCE OF TRUTH: docs/design/ui-system/tokens.dc.html
// (+ components.dc.html for the parts, daynight-kit.dc.html for this screen)
//
// DRIFT NOTE. s&box cannot express a library-to-library dependency, so a kit must never @import
// another kit's stylesheet. Every kit carries its OWN copy of the token values below, and this
// kit's two panels each carry a copy. Nothing syncs them: if a value moves on the tokens page,
// hand-update it here, in Ui/DayNightPanel.razor.scss, and in every other kit.
//
// ENGINE-LEGAL SUBSET (the mockups are browser HTML and contain CSS this engine cannot parse):
// border-width + border-color only, never `border: 1px solid x` (border-style is a parse error
// that aborts the whole stylesheet); no box-shadow; no letter-spacing; no `inset` shorthand; no
// percent max-height on an absolute card; explicit px line-heights; font sizes only from
// {12, 13, 14, 16}.
//
// FONT DECLARATIONS ARE INLINE AND UNQUOTED, AND THAT IS LOAD-BEARING. `font-family: Poppins,
// sans-serif;` and `font-family: Roboto Mono, monospace;` written out at every site. A SCSS
// variable holding the family, or a quoted family name, does not survive this engine's stylesheet
// parse: the rule is dropped and the card silently falls back to the default face.
//
// CONTRAST LAW (overrides the mockups wherever they are dimmer): nothing a player reads is dimmer
// than #E8EAED, key badges are pure #FFFFFF at weight 700. The 42px close x is the only close
// affordance on this card; there is no ESC badge, here or anywhere.
// ================================================================================================
// ---- base tokens (shared across kits, copied per kit) ----
$fk-panel-bg: rgba( 15, 17, 21, 0.92 );
$fk-border: rgba( 255, 255, 255, 0.08 );
$fk-border-hi: rgba( 255, 255, 255, 0.12 );
$fk-row: rgba( 255, 255, 255, 0.05 );
$fk-hover: rgba( 255, 255, 255, 0.10 );
$fk-text-hi: #F2F4F7;
$fk-text: #E8EAED;
$fk-key-glyph: #FFFFFF;
// No accent token here on purpose: this card is entirely neutral, the way the placement kit's hint
// card is. Tinting the key chips would compete with the time panel, which is where the violet
// (#C9AEF2) does its work.
DayNightHintCard {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
pointer-events: none;
font-family: Poppins, sans-serif;
// Only the card takes clicks, so the scene keeps the cursor everywhere else.
.dh-card {
position: absolute;
top: 40px;
left: 40px;
width: 440px;
flex-direction: column;
gap: 12px;
padding: 20px;
pointer-events: all;
background-color: $fk-panel-bg;
border-width: 1px;
border-color: $fk-border;
border-radius: 16px;
color: $fk-text;
}
.dh-hdr {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.dh-title {
font-size: 16px;
line-height: 22px;
font-weight: 700;
color: $fk-text-hi;
}
// 42px hit target on a 16px glyph, matching the time panel. The negative margins pull it back into
// the card's 20px padding so the header row stays compact.
.dh-x {
font-size: 16px;
line-height: 22px;
color: $fk-text-hi;
width: 42px;
height: 42px;
margin: -8px -12px -8px 0px;
justify-content: center;
align-items: center;
border-radius: 6px;
cursor: pointer;
pointer-events: all;
transition: all 0.12s ease;
&:hover { background-color: $fk-hover; }
}
.dh-lede {
font-size: 13px;
line-height: 20px;
color: $fk-text;
}
.dh-rows {
flex-direction: column;
gap: 8px;
}
.dh-row {
flex-direction: row;
// flex-start, not centre: the longer hints wrap to two lines, and a key chip floating half
// way down its own explanation is the one place this card stops looking like the mockup.
// Same correction the placement kit's hint card carries.
align-items: flex-start;
gap: 12px;
}
// Fixed-width chip so every key column lines up and a chip never splits across a wrapped line.
// Width is the whole box (no horizontal padding), which keeps the column exact.
.dh-key {
font-family: Roboto Mono, monospace;
font-size: 14px;
line-height: 20px;
font-weight: 700;
color: $fk-key-glyph;
width: 110px;
flex-shrink: 0;
padding: 3px 0px;
justify-content: center;
align-items: center;
background-color: $fk-row;
border-width: 1px;
border-color: $fk-border-hi;
border-radius: 5px;
}
.dh-what {
font-size: 13px;
line-height: 20px;
color: $fk-text;
flex-grow: 1;
}
// Live status strip: short atomic mono runs, each unshrinkable and nowrap, so a wrap never splits
// one mid-word.
// Single-value gap on purpose: nothing shipped in these kits uses the two-value `gap: 3px 8px` form
// and this engine's parser is not proven on it. One value is the safe subset.
.dh-live {
flex-direction: row;
flex-wrap: wrap;
gap: 8px;
border-top-width: 1px;
border-top-color: $fk-border;
padding-top: 12px;
}
.dh-lk {
font-family: Roboto Mono, monospace;
font-size: 12px;
line-height: 16px;
font-weight: 500;
color: $fk-text;
white-space: nowrap;
flex-shrink: 0;
}
.dh-foot {
font-size: 13px;
line-height: 20px;
color: $fk-text;
}
}