X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/829781346b75bdd66e4c964e8bce3b84cf8ed3fc..HEAD:/base.css diff --git a/base.css b/base.css index 7b8586e..e4ed58d 100644 --- a/base.css +++ b/base.css @@ -28,6 +28,14 @@ h2, caption { caption { margin: 1ex; } +caption aside { + position: absolute; + margin-left: 1ex; + font-weight: normal; + display: inline; + font-size: 91%; /* 100% */ + margin-top: .3ex; /* align with 110% baseline */ +} hr { clear: both; @@ -79,6 +87,12 @@ p.footer { margin: 2ex auto; clear: both; } +.error > * { + margin-bottom: 1ex; +} +.error > *:last-child { + margin-bottom: 0; +} ul { margin: 0; @@ -86,33 +100,72 @@ ul { list-style: none; } -#source pre { - display: inline-block; +pre { text-align: left; + margin: 2ex auto; + white-space: pre-wrap; + overflow-wrap: break-word; +} +body > pre { + width: 78ch; + tab-size: 4; + -moz-tab-size: 4; + padding: 0 1em; + border-width: 0 1px; + border-style: solid; + white-space: pre; + font-size: 1.9vmin; /* cover full width at most */ +} +code { + white-space: nowrap; } +h1 small, h2 small { position: absolute; /* side note; do not influence alignment */ margin-left: 1em; + font-weight: normal; + font-size: 50%; /* 1rem */ + padding-top: 1.75ex; /* align baseline with container */ +} +h2 small { + font-size: 90.9%; + padding-top: .17ex; } -dl > dt { - float: left; - width: 50%; +.section dl { + display: grid; + grid: auto-flow / 1fr 1fr; + clear: both; +} +.section dl > dt { + grid-column: 1; text-align: right; } +dt code { + white-space: normal; +} dl > dd { + grid-column: 2; text-align: left; padding-left: 1em; - overflow: hidden; + margin: 0 0 .5ex; +} +@media (max-width: 42em) { + .section dl { + grid: auto-flow / minmax(8em, 1fr) minmax(20em, 1fr); + } + dl > dd { + margin-bottom: 1ex; /* distinguish rows more as dts can wrap */ + } } /* "keyboard" (list of keys) */ -#rows {margin-top: -5ex} /* top (esc) row fits besides header */ +.row0 {margin-top: -5ex} /* top (esc) row fits besides header */ .row2 {margin-left: 7em} /* row offsets relative to ~6em key width */ .row3 {margin-left: 8em} -.row4 {margin-left: 10em} /* should actually align to next key on row0 */ +.row4 {margin-left: 10em} /* should actually align to next key on row1 */ /* ...however rows>=1 are shifted a bit, to make space */ table.keys tr { @@ -132,20 +185,18 @@ h3 {display: none} /* semantic details (non-css/js) */ table.keys { display: block; - width: 82.5em; /* 12 * (2px + 1px + 6.2em + 1px + 2px) + 8em*/ -// padding-right: 72px; border-spacing: 0; border-collapse: collapse; -} -table.keys > * { - margin-right: -72px; + white-space: nowrap; + text-align: left; } /* individual keys */ dl.legend dt, .keys td { - float: left; + display: inline-block; + white-space: normal; width: 6.2em; line-height: 2.25ex; /* a little terser (seems to be gecko's default anyway) */ height: 4.5ex; /* 2 lines */ @@ -156,6 +207,7 @@ dl.legend dt, border: 1px solid #000; border-radius: 4px; -moz-border-radius: 4px; + text-transform-variation: text; } .keys td b { float: left; @@ -194,6 +246,49 @@ dl.legend dt, font-weight: normal; /* nice and subtle */ } +/* enlarged keys */ + +.keys.big td { + width: 1em; + min-width: auto; + height: 2.25ex; + font-size: 200%; + font-size: calc(7vmin - 4px); /* fit 12 keys to page */ + overflow: visible; + position: relative; + padding: 0; + margin: 0 .2vw -1px; +} + +/* override row alignments */ +.keys.big tbody { + font-size: calc(1.4vmin); /* enlarged td conversion */ +} +.keys.big .row2 {margin-left: 7em} +.keys.big .row3 {margin-left: 8em} +.keys.big .row4 {margin-left: 10em} +.keys.big .row0 { + display: none; /* headerless */ +} + +.keys.big td b { + position: absolute; /* overlay */ + z-index: 1; + top: -1.2ex; /* halfway over shift */ + left: 0; + right: 0; + font-size: 50%; + opacity: .5; + color: #FFF; + line-height: 2.25ex; +} +.keys.big.cmp td b, +.keys.big .ctrl td b, +.keys.big .meta td b, +.keys.big .shift td b { + display: none; +} + /* tables */ table { @@ -208,6 +303,26 @@ thead th, td { text-align: center; } +td.joind { + border-bottom: none; +} +td.joinu { + /* first cell determines border width for entire row */ + border-top-color: transparent; +} +td.joinr { + border-right: none; +} +td.joinl { + border-left: none; +} + +thead { + position: sticky; + top: 0; + background: #DDD8; +} + /* character table */ .glyphs thead th, .glyphs td { @@ -220,23 +335,31 @@ thead th, td { font-size: 200%; } .glyphs .glyphs { - margin: 0.5ex 0; + margin: 0.5ex 0; /* nested in legend */ } .glyphs .glyphs td { font-size: 100%; } +.cover td { + min-width: 2.5ex; /* square cells */ +} + /* table headers */ th, tfoot td, thead td { - border: 0; - background: transparent !important; + border-width: 0; + background: transparent; } .glyphs thead td { width: auto; /* no glyph cells in header */ } +.glyphs caption { + margin-left: 2.2em; /* 1ex + offset head column (1.6em + 0.4em) / 110% */ + /* adjusted insignificant -.2em to fit wide contents on /charset/mac */ +} th { padding: 0 0.2em; } @@ -256,6 +379,25 @@ tfoot .cat th { border-top: 1px solid #888; } +/* colour map */ + +table.color td { + border: 1px solid #555; + font-weight: normal; + padding: 0 8px; +} +table.color td samp { + margin: 0 -8px 0 8px; + font-family: inherit; + float: right; +} +table.color td samp ~ samp { +} +table.color td samp small { + font: 100% monospace; + padding: 0 .5ex; +} + /* digraphs map */ table.dimap { @@ -304,18 +446,18 @@ table.dimap { padding-bottom: 1.1ex; /* reserve space for label */ vertical-align: bottom; } -.glyphs small { +.glyphs.dilabel small { font-size: 50%; display: block; margin-top: 0.2ex; margin-bottom: -2.2ex; /* take cell padding */ } -.glyphs small.digraph { +.glyphs.dilabel small.digraph { background: #000; color: #FFF; opacity: 0.3; } -.glyphs small.value { +.glyphs.dilabel small.value { background: #600; color: #FFF; opacity: 0.3; @@ -324,12 +466,7 @@ table.dimap { /* character properties */ .X {background: #FFF} /* unidentified */ -#digraphs .Xa {color: #0A0} /* ascii */ -#digraphs .Xl {color: #070} /* latin1 */ -#digraphs .u-prop {color: #D00} /* proposed */ -#digraphs .u-prop.ex {color: #D88; color: rgba(221, 0, 0, .5)} /* unofficial proposal */ - -.Lm, .Mc, .Me, .Zl, .Zp {background: #F00} /* unstyled */ +.Mc, .Me, .Zl, .Zp {background: #F00} /* unstyled */ .X > span {background: #898; background: rgba(0, 0, 0, .25)} /* invisible contents */ /* letter scripts */ @@ -382,6 +519,13 @@ table.dimap { .ex { color: #888; color: rgba(0, 0, 0, .5)} /* experimental, disfavoured */ .u-invalid {background: #BBB} /* invalid, impossible */ +/* foreground representation */ +#digraphs .u-l4 {color: #080} /* partial */ +#digraphs .u-l5 {color: #4C0} /* experimental */ +#digraphs .u-l2 {color: #A44; color: rgba(128, 0, 0, .6)} /* unofficial */ +#digraphs .u-l1 {color: #D00; color: rgba(255, 0, 0, .8)} /* missing */ + +/* support percentage (browser cells) */ .p0 {opacity: .6} .p0.p {opacity: 1} .p::after {content: '!'; color: #F00} @@ -404,16 +548,18 @@ table.dimap { /* code syntax */ .sy-comment { color: #888 } .sy-constant { color: #008 } -.sy-type, .sy-identifier { color: #804 } .sy-statement { } .sy-preProc { } +.sy-type, .sy-special { color: #408 } .sy-error { font-weight: bold; background-color: #F00; color: #FFF } .sy-todo { background-color: #FF0 } +/* boolean alternate */ +.glyphs b { font-weight: normal; color: #800 } + /* hover effects */ -.u-di, .X:hover {cursor: help} .X:hover > span {background: #FFF} /* whitespace marker */ .Greek:hover, .Armenian:hover {background: #FA8} @@ -443,15 +589,16 @@ table.dimap { .Co:hover {background: #A77} /* private */ .Xr:hover {background: #FFF} /* reserved */ .Xi:hover {background: #DDD} /* invalid */ -.Xa:hover {outline: 1px solid #0F0} /* ascii */ -.Xl:hover {outline: 1px solid #0C0} /* latin1 */ -.u-prop:hover {outline: 1px solid #F00} /* proposed */ .l0:hover {background: #888} .l1:hover {background: #F88} .l2:hover {background: #FC8} .l3:hover {background: #FF8} .l4:hover {background: #CF8} .l5:hover {background: #8F8} +.u-l4:hover {outline: 1px solid #080} +.u-l5:hover {outline: 1px solid #8F0} +.u-l2:hover {outline: 1px solid #800} +.u-l1:hover {outline: 1px solid #F00} /* key type colorization */ @@ -506,12 +653,13 @@ dl.legend dt.more:hover, .keys td.more:hover b { text-shadow: #F20 0 0 0.5em, #FC0 0 0 0.2em; } -dl.legend dt.ext, -.keys td.ext { - border-style: dashed; -} dl.legend dt.new, .keys td.new { + border-style: dashed; +} +.ext, +dl.legend dt.ext, +.keys td.ext { opacity: .6; } @@ -587,6 +735,128 @@ ul.legend-set li { padding: 0 0.2em; } +/* images */ + +figure { + margin: 0; + position: relative; +} +figure img { + vertical-align: bottom; + width: 100%; +} + +@media (min-width: 60em) { + figcaption { + padding: 0 1em; + color: #000; + background: rgba(255, 255, 255, .66); + position: absolute; + right: 0; + bottom: 0; + max-width: 100%; + box-sizing: border-box; + } + .gallery li.parent:hover > figure > figcaption, + .gallery figure:hover > figcaption { + /* highlight title of current and parents */ + font-size: 175%; + right: 50%; + bottom: 50%; + transform: translate(50%, 50%); + margin-left: -60%; /* keep width */ + } +} + +/* image gallery */ + +.gallery { + display: grid; + grid: auto-flow dense / repeat(auto-fit, minmax(200px, 1fr)); + grid-gap: 1px; +} +.gallery li, .gallery ul { + display: contents; +} +.gallery figure { + overflow: hidden; + box-sizing: border-box; + hyphens: auto; + max-width: 900px; +} +.gallery figcaption > small { + display: inline-block; +} + +@media (min-width: 403px) and (min-height: 266px) { + /* able to fit 2 cells of 200x133 */ + .gallery li.large > figure { + grid-row: span 2; + grid-column: span 2; + } +} +@media (min-width: 603px) and (min-height: 400px) { + /* fit 3 cells of 200x133 */ + .gallery > li:first-child > figure, + .gallery li.huge > figure { + grid-row: span 3; + grid-column: span 3; + } +} + +.gallery figure, .gallery figcaption { + transition: all .5s ease-in; +} +.gallery figure:hover ~ ul figcaption { + /* mark all children */ + color: #FFF; + background: rgba(0, 0, 0, .5); +} + +.gallery figure[data-sup]:after { + position: absolute; + right: 0; + content: attr(data-sup); + color: #FFF; + background: #0006; + border-radius: 1em; + padding: .1ex .4em; + margin: .4em; +} +.gallery .expand > figure[data-sup]:after { + content: '+' attr(data-sup); + background: #0008; + font-size: 150%; + border: 2px solid #FFF8; +} + +/* specialised galleries */ + +body#word { + margin: 8px 1px; +} + +table.gallery { + grid-auto-flow: row; + grid-template-columns: repeat(auto-fit, minmax(2em, max-content)); /* 1fr */ +} +table.gallery tbody, +table.gallery tr { + display: contents; +} +table.gallery tr > :first-child { + grid-column: 1; + -grid-row: span 6; + margin: auto; /* vertical-align: middle */ +} +table.gallery tr > :nth-child(2) { + grid-column: 2; /* in case 1st is missing */ +} +table.gallery td { + border: 0; /* does not collapse */ + outline: 1px solid #888; /* over grid-gap */ +} + /* page-specific */ #browser td > a { @@ -630,6 +900,89 @@ form.aside { right: 1em; } +.family-name { + font-variant: small-caps; +} + +#index nav { + columns: 3; + -moz-columns: 3; + -webkit-columns: 3; +} +nav > .section { + break-inside: avoid; + -webkit-column-break-inside: avoid; /* webkit */ + page-break-inside: avoid; /* moz */ + overflow: hidden; /* webkit workaround */ +} +#index nav a { + display: inline-block; + margin-top: 1em; +} + +.units tbody tr:hover:not(.race) { + background: #EEE; +} +.unit-gas { + color: #040; +} +.unit-min, .unit-min a:not(:hover) { + color: #004; +} +.unit-supply { + color: #080; +} +.unit-o {color: #C08} /* organic */ +.unit-u {color: #44C} /* mechanic */ +.unit-p {color: #0A8} /* psionic */ +.unit-composed { + color: #C88; +} +.unit-air { + color: #08C; +} +.unit-x {color: #888} +.unit-s {color: #890} +.unit-m {color: #C70} +.unit-l {color: #D22} +.unit-h {color: #804} +.magic-opt:before, +.magic-opt:after { + color: #000; +} +.hurtrel, .units .hurtrel { + color: #778; +} +tbody .unit-shield { + color: #64A; +} +.unit-pdd { + color: #A8C; +} +.unit-splash { + color: #4A0; +} +.hurt-a { + color: #036; +} +.hurt-g { + color: #063; +} +.unit-massive { + color: #D88; +} +.unit-detect::before { + color: #0A8; +} +.unit-jump { + color: #8A4; +} +body .magic-perma { + text-decoration-color: #8C0; + -moz-text-decoration-color: #8C0; + -webkit-text-decoration-color: #8C0; +} + /* printing hints */ @page { @@ -641,3 +994,107 @@ form.aside { ul.legend-set {display: none} /* current options only relevant on dynamic media */ } +/* terse optimisation */ + +@media (min-height: 112ex) and (min-width: 90em) { + .keys td { + padding: 1ex 0 1ex .1em; + width: 7em; + } +} + +@media (max-width: 79em) { + .keys td { + position: relative; /* hides overflow */ + width: 4.5em; + min-width: 6.5vw; + min-width: calc(7.7vw - 8px); + } + .keys td b, + .keys .meta td b, + .keys .ctrl td b, + .keys .lead td b { /* leading chars always fit */ + position: absolute; /* background */ + right: 0; /* least overlap in corner */ + font-size: 250%; + line-height: 2.5ex; + opacity: .5; + color: #FFF; + } + + .row2 {margin-left: 5.3em} /* 7em / Δtd(6em : 4.5em) */ + .row3 {margin-left: 6em} /* 8em / Δtd */ + .row4 {margin-left: 7.5em} /* 10em / Δtd */ + + /* letter scripts columns to rows */ + .legend .glyphs:first-child td { + display: table-row; + vertical-align: baseline; + } + .legend .glyphs td > table { + width: auto; + display: inline; + margin-left: 1ex; + } + .legend .glyphs:first-child td td { + margin: 2px; + display: inline-block; + width: auto; + } + + @media (max-width: 61em) { + .keys td { + width: 3em; + height: 6.75ex; /* 3 lines */ + font-size: 80%; + } + .keys td b, + .keys .meta td b, + .keys .ctrl td b, + .keys .lead td b { + line-height: 4ex; + } + + .row2 {margin-left: 3.5em} /* 7em / Δtd(6em : 3em) */ + .row3 {margin-left: 4em} /* 8em / Δtd */ + .row4 {margin-left: 5em} /* 10em / Δtd */ + } + + @media (max-width: 42em) { + /* flatten right legend column on mobile */ + .help > * { + display: table-row; + width: auto; + } + ul.legend-set { + clear: left; + } + .right dl.legend { + margin-right: 0; + margin-left: 6.4em; + } + .right dl.legend dt { + margin-right: 0; + margin-left: -6.4em; + float: left; + clear: left; + } + .right dl.legend dd { + float: left; + } + } +} + +/* +@media screen and (orientation: portrait) and (max-width: 62em) { + body table.keys, + #rows { + margin-top: 1ex; + transform: rotate(90deg); + transform-origin: top left; + margin-left: 40em; + margin-bottom: 30em; + font-size: 80%; + } +} +*/