From d9578ac4057237361f52fd7b147449dc7d6ed498 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 5 Nov 2026 18:58:06 +0100 Subject: [PATCH] Match Requests sheets to locked design frames --- docker/README.md | 17 +++++++----- wolfskin-design/generate_request_marks.py | 6 ++++- wolfskin-design/request-marks.sha256 | 12 ++++----- wolfskin-design/shell-tokens.json | 14 ++++++++-- .../wolfskin/design/ComingInLineBox.kt | 16 +++++++++++ .../wolfskin/design/ComingInRatings.kt | 10 ++++++- .../wolfskin/design/ComingInSheet.kt | 25 ++++++++++-------- .../wolfskin/design/SettingsList.kt | 2 +- .../wolfskin/design/WolfskinTokens.kt | 12 ++++++++- .../drawable-nodpi/coming_in_rating_fresh.png | Bin 804 -> 1129 bytes .../drawable-nodpi/coming_in_rating_imdb.png | Bin 813 -> 1305 bytes .../coming_in_rating_rotten.png | Bin 964 -> 1617 bytes .../coming_in_rating_spilled.png | Bin 1068 -> 1596 bytes .../drawable-nodpi/coming_in_rating_tmdb.png | Bin 1638 -> 2818 bytes .../coming_in_rating_upright.png | Bin 1023 -> 1390 bytes wolfskin-design/tokens.css | 12 ++++++++- wolfskin-design/tokens.sha256 | 6 ++--- 17 files changed, 98 insertions(+), 34 deletions(-) create mode 100644 wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInLineBox.kt diff --git a/docker/README.md b/docker/README.md index 1a110199..cafc24bc 100644 --- a/docker/README.md +++ b/docker/README.md @@ -142,8 +142,8 @@ Foreground refreshes once; an open sheet or unsettled requests refresh every 30 seconds while started. The immutable debug projection is loaded once, not decoded again on every poll. Thumbnails reuse `LibraryImages` with a 96×144-pixel request, RGB565, no crossfade, -the shared 64 MB memory/128 MB disk cache and four-read limit. Actor separators -reuse the shared caption-opacity token rather than defining another convention. +the shared 64 MB memory/128 MB disk cache and four-read limit. Actor separator +dots use the surrounding text colour; the 40% rule applies only to poster captions. Uncached focused ratings wait 350 ms; moving away cancels the read. Read ratings show immediately on return; sign-out clears visibility. This follows the frozen @@ -155,7 +155,8 @@ data replayed through the real shell. Home's hero content is not implemented here: its launch-to-nav shell suffix is the acceptance seam. Sheet dimensions, padding, glyphs, scales, colours and durations are generated -tokens. Single-line sheet text retains CSS-style line-box leading. Platform +tokens. Scoped sheet line boxes retain CSS heights and baselines independently +of native leading rounding; shared shell/library typography is unchanged. Platform Roboto remains required: the host browser used DejaVu Sans, so its width, wrapping, ellipsis and text-block positions are not a wrapping-parity target. For example, the 44-pixel “Coming in” ink is 239 pixels wide in the reference @@ -164,10 +165,12 @@ used. Native comparisons must report those structural differences explicitly. The six rating marks retain the exact locked SVG source in `wolfskin-design/request-marks/`; native-size PNGs and their hashes are generated -from the JSON dimensions, avoiding differences in older upstream conversions: +from the JSON dimensions with the locked cover crop. Inside Coming-in rows they +retain the prototype's dark `surface3` chips with 12-pixel rounded corners. +Loaded poster thumbnails have no placeholder fill beneath their clipped edge. ```sh -uv run --with cairosvg==2.9.1 python wolfskin-design/generate_request_marks.py +uv run --with cairosvg==2.9.1 --with pillow==13.0.0 python wolfskin-design/generate_request_marks.py ``` `RequestsCaptureTest` writes `st-081`…`st-086`, `st-088` and `st-111` at 1920×1080, @@ -190,8 +193,8 @@ its unknown item count. Caption separators use 40% of the existing muted colour's alpha. The rail follows the locked prototype CSS: bold 24 px letters, with the focused letter bold 28 px, overriding the spec table's generic caption style for this component. -Library header initials use the muted colour over the person's fill; navigation, -picker and Settings avatars retain their dark initials. +Library and Settings header initials use the muted colour over the person's fill; +navigation and picker avatars retain their dark initials. The debug-only `wolfskin-library.json` and `library/assets/` contain the locked prototype's titles and local poster art. Release libraries read through diff --git a/wolfskin-design/generate_request_marks.py b/wolfskin-design/generate_request_marks.py index bba6a960..c0297cef 100755 --- a/wolfskin-design/generate_request_marks.py +++ b/wolfskin-design/generate_request_marks.py @@ -1,9 +1,11 @@ #!/usr/bin/env python3 """Rasterize locked prototype rating marks at the Coming-in row's native pixel size.""" from pathlib import Path +from io import BytesIO import hashlib import json import cairosvg +from PIL import Image, ImageOps ROOT = Path(__file__).resolve().parent SOURCE = ROOT / "request-marks" @@ -21,7 +23,9 @@ def main() -> None: for source in sorted(SOURCE.glob("*.svg")): target = OUTPUT / f"coming_in_rating_{source.stem}.png" width = round(height * wordmark_ratio) if source.stem in ("imdb", "tmdb") else height - cairosvg.svg2png(url=str(source), write_to=str(target), output_width=width, output_height=height) + source_pixels = cairosvg.svg2png(url=str(source), output_height=height * 4) + with Image.open(BytesIO(source_pixels)) as image: + ImageOps.fit(image, (width, height), method=Image.Resampling.LANCZOS).save(target) for path in (source, target): manifest.append(f"{hashlib.sha256(path.read_bytes()).hexdigest()} {path.relative_to(ROOT)}") (ROOT / "request-marks.sha256").write_text("\n".join(manifest) + "\n") diff --git a/wolfskin-design/request-marks.sha256 b/wolfskin-design/request-marks.sha256 index c29ddefc..f778a68f 100644 --- a/wolfskin-design/request-marks.sha256 +++ b/wolfskin-design/request-marks.sha256 @@ -1,12 +1,12 @@ 01aa8a3c3e9db48f0e1c6af25056940986784315bf66f48a8120a7317bf6d75a request-marks/fresh.svg -743b6139dc12019d0940568869065722593f44ce416a7e9c7b8d9ef92942bb3f src/main/res/drawable-nodpi/coming_in_rating_fresh.png +e61333be2c5a028adcc1052a24add31ed34001af8cfdf1d180358faffafc35f4 src/main/res/drawable-nodpi/coming_in_rating_fresh.png 27f93b15a075b015e2448eca7949f7a3da03c37fbf26cecf6df3bdab45fda993 request-marks/imdb.svg -a738afd57519b1b4a38192927b48bd45755ce75e4673c6b12b9b3e0c2e388372 src/main/res/drawable-nodpi/coming_in_rating_imdb.png +72c167c7d0ed23f998e47010be0bbf180790431bd0add0b525f8a5928f44dfd5 src/main/res/drawable-nodpi/coming_in_rating_imdb.png 510d0f9fb77d72190ebf03208f04215a4e86f71e165488518ac75aa49cf4a79d request-marks/rotten.svg -0aade711ba57b6b201c7395ece97108df928b6076d8120404cdf4155a4242632 src/main/res/drawable-nodpi/coming_in_rating_rotten.png +e3e0a434eaaf5c9390fec821807e34ad6bf656a05520039219dbaaea68d03924 src/main/res/drawable-nodpi/coming_in_rating_rotten.png b8dcf4d27eba2446380980c96d82b1f64aa6859fa2ea1cdab867f849f9fec4fd request-marks/spilled.svg -fa4f50258009cd1d16f0d0f5a3c216dc88a57409b1bccc379512ae914cc9d714 src/main/res/drawable-nodpi/coming_in_rating_spilled.png +3d509c58f80ef773f7d909bf57953d835cfddb0565896c79bf25698146e90099 src/main/res/drawable-nodpi/coming_in_rating_spilled.png d537fb228cf3ded904ef09b136fe3fec72548ebc1fea3fbbd1ad9e36364db38b request-marks/tmdb.svg -8e1cb507f876f324bb5c53bf4e60775712f1fdddbffe94fd249e6e74099e045e src/main/res/drawable-nodpi/coming_in_rating_tmdb.png +a1d49d5dba29e25738e06dd6d97a32f4d357dc0cf66e1acca00f30287883dd32 src/main/res/drawable-nodpi/coming_in_rating_tmdb.png 2ad511c7a101a7f2f8810434911df8c13cc126fa691272242037237172600bc3 request-marks/upright.svg -6ff8a05501bc1c15b96c0130271c41baaa2ddb74f64916f58b9e7f918931d789 src/main/res/drawable-nodpi/coming_in_rating_upright.png +3d9d745d878a5f6976a31f23c58be7d0ea037353e4a2c6d037861469a716a486 src/main/res/drawable-nodpi/coming_in_rating_upright.png diff --git a/wolfskin-design/shell-tokens.json b/wolfskin-design/shell-tokens.json index 8af37422..50a8c5ec 100644 --- a/wolfskin-design/shell-tokens.json +++ b/wolfskin-design/shell-tokens.json @@ -3,14 +3,24 @@ "sheetPaddingY": { "$type": "dimension", "px": 80, "dp": 40, "source": "index.html:227" }, "sheetPaddingX": { "$type": "dimension", "px": 64, "dp": 32, "source": "index.html:227" }, "sheetGap": { "$type": "dimension", "px": 18, "dp": 9, "source": "index.html:227" }, + "sheetTitleLineHeight": { "$type": "dimension", "px": 56, "dp": 28, "source": "index.html:228; locked st-083/st-086: content begins at 154px after 80px padding and 18px gap" }, + "sheetTitleBaseline": { "$type": "dimension", "px": 44, "dp": 22, "source": "locked st-083: modal ink-bottom 123px, native baseline boundary 124px minus 80px padding" }, + "titleLineHeight": { "$type": "dimension", "px": 39, "dp": 19.5, "source": "index.html:250; 30px font with 1.3 line box" }, + "titleBaseline": { "$type": "dimension", "px": 31, "dp": 15.5, "source": "locked st-082/st-086: ink-bottom 45px, 15px text-block inset, baseline boundary 1px below ink" }, + "factsLineHeight": { "$type": "dimension", "px": 31.2, "dp": 15.6, "source": "index.html:251; 24px font with 1.3 line box" }, + "factsBaseline": { "$type": "dimension", "px": 24, "dp": 12, "source": "locked st-082/st-086: ink-bottom 77px, 15px block inset, 39px title box and 1px baseline boundary" }, + "stageLineHeight": { "$type": "dimension", "px": 39.6, "dp": 19.8, "source": "index.html:251-252; inline-flex stage within the 28px/1.3 parent strut" }, + "stageLabelLineHeight": { "$type": "dimension", "px": 33.8, "dp": 16.9, "source": "index.html:220; 26px font with 1.3 leading" }, + "stageBaseline": { "$type": "dimension", "px": 24, "dp": 12, "source": "locked st-082/st-086: ink-bottom 112px, 15px block inset, 39px title, 31.2px facts, 4px margin and 1px baseline boundary" }, "emptyMargin": { "$type": "dimension", "px": 20, "dp": 10, "source": "index.html:1905" }, "rowPaddingY": { "$type": "dimension", "px": 14, "dp": 7, "source": "index.html:247" }, "rowPaddingX": { "$type": "dimension", "px": 18, "dp": 9, "source": "index.html:247" }, "rowGap": { "$type": "dimension", "px": 24, "dp": 12, "source": "index.html:247" }, "listGap": { "$type": "dimension", "px": 6, "dp": 3, "source": "index.html:255" }, "stageMargin": { "$type": "dimension", "px": 4, "dp": 2, "source": "index.html:252" }, - "stageGlyph": { "$type": "dimension", "px": 28, "dp": 14, "source": "index.html:152" }, - "stageGap": { "$type": "dimension", "px": 8, "dp": 4, "source": "index.html:152" }, + "stageGlyph": { "$type": "dimension", "px": 28, "dp": 14, "source": "index.html:221" }, + "stageGap": { "$type": "dimension", "px": 10, "dp": 5, "source": "index.html:220" }, + "readinessItemGap": { "$type": "dimension", "px": 8, "dp": 4, "source": "index.html:313" }, "readinessGapX": { "$type": "dimension", "px": 22, "dp": 11, "source": "index.html:312" }, "readinessGapY": { "$type": "dimension", "px": 10, "dp": 5, "source": "index.html:312" }, "readinessMargin": { "$type": "dimension", "px": 8, "dp": 4, "source": "index.html:312" }, diff --git a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInLineBox.kt b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInLineBox.kt new file mode 100644 index 00000000..e7ae86a9 --- /dev/null +++ b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInLineBox.kt @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0-only +package org.justinvisser.wolfskin.design + +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.FirstBaseline +import androidx.compose.ui.layout.layout +import androidx.compose.ui.unit.Dp + +/** A CSS line box has its own height and baseline, independent of native leading rounding. */ +internal fun Modifier.comingInLineBox(height: Dp, baseline: Dp): Modifier = layout { measurable, constraints -> + val text = measurable.measure(constraints.copy(minHeight = 0)) + val baselineOffset = baseline.roundToPx() - text[FirstBaseline] + layout(text.width, height.roundToPx()) { + text.placeRelative(0, baselineOffset) + } +} diff --git a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInRatings.kt b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInRatings.kt index 1aebb97b..d4a8acd3 100644 --- a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInRatings.kt +++ b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInRatings.kt @@ -11,6 +11,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource +import androidx.compose.foundation.background +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale import androidx.tv.material3.Text import java.util.Locale import org.justinvisser.wolfskin.design.WolfskinTokens.Requests as T @@ -35,9 +39,13 @@ fun ComingInRatings(ratings: List, color: Color) { } val wide = rating.mark == "imdb" || rating.mark == "tmdb" Image(painterResource(mark), contentDescription = rating.mark, - modifier = Modifier.height(T.readinessGlyph).width(T.readinessGlyph * if (wide) T.ratingsWordmarkRatio else 1f)) + modifier = Modifier.height(T.readinessGlyph).width(T.readinessGlyph * if (wide) T.ratingsWordmarkRatio else 1f) + .clip(ratingMarkShape).background(WolfskinTokens.Color.surface3), + contentScale = ContentScale.Crop) Text(formatComingInRating(rating), style = ComingInTypography.rating, color = color) } } } } + +private val ratingMarkShape = RoundedCornerShape(WolfskinTokens.Radius.thumb) diff --git a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInSheet.kt b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInSheet.kt index de14a184..4bb90514 100644 --- a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInSheet.kt +++ b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/ComingInSheet.kt @@ -27,6 +27,8 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.style.TextOverflow import androidx.tv.material3.Text import coil3.compose.AsyncImage +import coil3.compose.AsyncImagePainter +import androidx.compose.runtime.mutableStateOf import org.justinvisser.wolfskin.design.WolfskinTokens.Color as C import org.justinvisser.wolfskin.design.WolfskinTokens.Layout as L import org.justinvisser.wolfskin.design.WolfskinTokens.Requests as T @@ -57,7 +59,7 @@ fun ComingInSheet(shell: ShellState, modifier: Modifier = Modifier) { } .padding(horizontal = T.sheetPaddingX, vertical = T.sheetPaddingY) .testTag("coming-in"), verticalArrangement = Arrangement.spacedBy(T.sheetGap)) { - Text("Coming in", style = ComingInTypography.title, color = C.fg) + Text("Coming in", Modifier.comingInLineBox(T.sheetTitleLineHeight, T.sheetTitleBaseline), style = ComingInTypography.title, color = C.fg) when { data.status == ComingInStatus.Loading && data.items.isEmpty() -> { LazyColumn(verticalArrangement = Arrangement.spacedBy(T.listGap)) { @@ -123,6 +125,7 @@ fun ComingInRow(item: ComingInRequest, viewer: ShellPerson, focused: Boolean, ex val secondary = if (focused) C.onFocus else C.muted val context = LocalContext.current val request = remember(item.poster, context) { LibraryImages.request(context, item.poster, L.thumbWidth, L.thumbHeight) } + val posterReady = remember(request) { mutableStateOf(false) } Row(Modifier.fillMaxWidth().focusScale(focused, WolfskinTokens.Focus.scaleRow) .background(if (focused) C.fg else Color.Transparent, RoundedCornerShape(WolfskinTokens.Radius.panel)) .pointerInput(item.id) { @@ -133,26 +136,26 @@ fun ComingInRow(item: ComingInRequest, viewer: ShellPerson, focused: Boolean, ex .padding(horizontal = T.rowPaddingX, vertical = T.rowPaddingY).testTag("coming-row-${item.id}"), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(T.rowGap)) { AsyncImage(model = request, imageLoader = LibraryImages.loader(context), contentDescription = null, - modifier = Modifier.size(L.thumbWidth, L.thumbHeight).clip(RoundedCornerShape(WolfskinTokens.Radius.thumb)).background(C.surface3), + modifier = Modifier.size(L.thumbWidth, L.thumbHeight).clip(RoundedCornerShape(WolfskinTokens.Radius.thumb)) + .background(if (posterReady.value) Color.Transparent else C.surface3), + onState = { posterReady.value = it is AsyncImagePainter.State.Success }, contentScale = androidx.compose.ui.layout.ContentScale.Crop) Column(Modifier.weight(1f)) { - Text(item.title, style = ComingInTypography.listTitle, color = foreground, maxLines = 1, overflow = TextOverflow.Ellipsis) - Row { - Text("for ${item.recipient(viewer)}", style = ComingInTypography.caption, color = secondary) - Text(" · ", style = ComingInTypography.caption, color = secondary.copy(alpha = secondary.alpha * WolfskinTokens.Library.captionSeparatorOpacity)) - Text("by ${item.actor(viewer)}", style = ComingInTypography.caption, color = secondary) - } - FlowRow(Modifier.padding(top = T.stageMargin), horizontalArrangement = Arrangement.spacedBy(T.readinessGlyph)) { + Text(item.title, Modifier.comingInLineBox(T.titleLineHeight, T.titleBaseline), + style = ComingInTypography.listTitle, color = foreground, maxLines = 1, overflow = TextOverflow.Ellipsis) + Text("for ${item.recipient(viewer)} · by ${item.actor(viewer)}", Modifier.comingInLineBox(T.factsLineHeight, T.factsBaseline), + style = ComingInTypography.caption, color = secondary) + FlowRow(Modifier.padding(top = T.stageMargin).heightIn(min = T.stageLineHeight), horizontalArrangement = Arrangement.spacedBy(T.readinessGlyph)) { Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(T.stageGap)) { Glyph(item.stage.glyph, secondary, Modifier.size(T.stageGlyph)) - Text(item.stage.label, style = ComingInTypography.label, color = secondary) + Text(item.stage.label, Modifier.comingInLineBox(T.stageLabelLineHeight, T.stageBaseline), style = ComingInTypography.label, color = secondary) } if (showRatings) ComingInRatings(item.ratings, foreground) } if (expanded) FlowRow(Modifier.padding(top = T.readinessMargin), horizontalArrangement = Arrangement.spacedBy(T.readinessGapX), verticalArrangement = Arrangement.spacedBy(T.readinessGapY)) { item.stage.readiness.forEachIndexed { index, word -> - Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(T.stageGap)) { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(T.readinessItemGap)) { val glyph = when (word) { "Done" -> "check"; "Failed" -> "alert"; "Not yet", "Unknown" -> null; else -> "clock" } if (glyph != null) Glyph(glyph, secondary, Modifier.size(T.readinessGlyph)) Text("${READINESS_NAMES[index]} · $word", style = ComingInTypography.readiness, color = secondary) diff --git a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/SettingsList.kt b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/SettingsList.kt index a7c0c54e..48a8220b 100644 --- a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/SettingsList.kt +++ b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/SettingsList.kt @@ -70,7 +70,7 @@ fun SettingsList(state: ShellState, modifier: Modifier = Modifier, openRequests: item(key = "settings-header") { Row(Modifier.height(L.row_lhead).padding(start = L.safeSide, top = S.settingsHeaderTop), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(S.settingsHeaderGap)) { - Avatar(state.person, S.settingsHeaderAvatar, WolfskinTokens.Type.avatarLetterLibHeader) + Avatar(state.person, S.settingsHeaderAvatar, WolfskinTokens.Type.avatarLetterLibHeader, letterColor = C.muted) Text("Settings", Modifier.alignByBaseline(), style = WolfskinTokens.Type.screenTitle, color = C.fg) Text("Requests and Wholphin settings on this TV · ${state.person.name}", Modifier.alignByBaseline(), style = WolfskinTokens.Type.nav.copy(fontWeight = FontWeight.Normal), color = C.muted) } diff --git a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt index 74ce6aec..bf874972 100644 --- a/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt +++ b/wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt @@ -233,6 +233,15 @@ object WolfskinTokens { val sheetPaddingY = 40.0.dp val sheetPaddingX = 32.0.dp val sheetGap = 9.0.dp + val sheetTitleLineHeight = 28.0.dp + val sheetTitleBaseline = 22.0.dp + val titleLineHeight = 19.5.dp + val titleBaseline = 15.5.dp + val factsLineHeight = 15.6.dp + val factsBaseline = 12.0.dp + val stageLineHeight = 19.8.dp + val stageLabelLineHeight = 16.9.dp + val stageBaseline = 12.0.dp val emptyMargin = 10.0.dp val rowPaddingY = 7.0.dp val rowPaddingX = 9.0.dp @@ -240,7 +249,8 @@ object WolfskinTokens { val listGap = 3.0.dp val stageMargin = 2.0.dp val stageGlyph = 14.0.dp - val stageGap = 4.0.dp + val stageGap = 5.0.dp + val readinessItemGap = 4.0.dp val readinessGapX = 11.0.dp val readinessGapY = 5.0.dp val readinessMargin = 4.0.dp diff --git a/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_fresh.png b/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_fresh.png index ef0a98a62277a71d5d68e73f9bdad141670bf2fa..c5e313dba2e2a17a4f2f4b64b11e4ebed17e9b57 100644 GIT binary patch delta 1109 zcmV-b1giU_2I&ZpBYy-iNklx_wwN|+eNjE3U)GePxG z5*P$QJ;;a;5%?gHCPw(&I7AddKU5f*g%5=fLO(AR2#OIsHO@FTgQSUxC~BED=Dp{f zefH|%-qCT!8B=DxZP;sl>wgK8Ne>E3y_@5nE>bzh$lwWjiGP#+zm53G0Q3%Lysv9* zUiDi!Tia#5yvRqZ9uSI`FcK?tFY`MN1F(Ky1Z*mh+~VC(*u7*Xms`tH%03a3r=rMn zitVA*FT{YWVMlyru=j?8YdpP&iphXCK!zX~@2qNswVPcBqIt1X|74y~E=QtJZlejxNmHl5yf;?P{j)W0z}SM&5mZbIbASm*;T3$- zXS3K+FLdQU87r>kJaqQjPn(AS-dOEVPgplj_EAiTsDE>N=ZwK6x|YD}lw>&p2$9tn z>l~e3CMw*MM&9bX$gx=oYOv~3okuRzto=%E z(TY=752P)A;a`!wEsuWdub1T6)Bmz~-6CqOB_97{gde{-)d+pmPbZ{KC{&PWMItz- zP|t01b$=lJcogOhkY1uKJ8~~h%W27lONsi{Jj%?GjL$mTsLk*^cIGNOe?Cu^D4AEZ zSvJ8?10M~*1tZ1+D|^{l>nfj+ed&Jd#z_z8jxH*xRgRRMw5P#hVy3wYW^i~;g{Z=# z7izd@q+XCICkD(Y5{C-~CresiP9HS^$hxXqOMi|J(%gawjVPN+NiZ-YD=ASxZvzi7V=+oJL0EQr0aYcsjzlRJ%{jSCv$vGydYIidyV|B=Hj~DFx?A6;6f;ycdNq*| z41cj{js}|TFIKC>$`zFuPG&~tL2P=XGHKM}3`ehA)+Eo51HXHn=JXj65sSz#0;V!d z7R|mxMXr3#w9#$dC_}isT7UVf`K=6iHQL8MuqtSfm{ z(bt@lSrkTU#7P=Oyf*F+28Ho`DB||YKsJ2q3p)lz0~l)$mmf^v7*dL>PTIx@K02mLM0J^R}=A$j8H7{3Iqq0(BTo92K#8N}fIf+9lzQ48a+PU$L bj<@+A4DJlD?jz^000000NkvXXu0mjfI4ld> delta 782 zcmV+p1M&Rn2&4v(BYyw}VoOIv0RI600RN!9r;`8x0@+DKK~zYIwUkY0TvZguf9Jk= z@6BXLE5#TB0TYW^m}Hv7Kq(@&E()b?M6xP~C|IG;2wk~qOIPY5GKe+^g$6-%X=!as zTag59E0bW1w&E5QQ z=c*`Had)VDm$8Mjpu-m4;TXo*lG=|EEhJ(WIGD+86l5yy&e@E>O^`QvKlOw>mb#>d zFBLswg4}x>g#gGJiy}_C`!%a_zzB_2`9t6(;1mwQhIi2Y|Po# zuGwh+TkZbSUw15=KmIdXIiqx{Rjj53dAVq63GzCVh{_+{T(62(8_gdWFV0Vrptpq=xW}Y)6-dFUW^=ZlYe<@U;lNUBUATG+rV}J`u_?U zJ-5ogtVFr1#_skr*_%aMslD}+simx+Xvquif+sZO)%XSFN=pL(PcG*8@ao;F5C9dL zQFB4NxAw@7bF-^5iu&T80tf!tOEqV5#<$%!3Flz0m5=@O#v89kp#Ba3j}lk7?N9j%6&yOlIrsC z8nW{ttexaqNrZU-BN-k5)u-@(OQ+!9P8+Qs$XqRf6#cwTltoX1^Cgf!9-RYj)S4oy z!w*YSnj@>CZv(c5oEvT-I$B(meuH=>x+toLsDDid-m=O*nPh1V2*8_&P6Dq2!6QJv z@?vg(Vj{e~(pYv-qi4NtwdP|Hp4)JE;Wt%%*B_5Qk}@S&_eW5WsL$Uka1dlKkSueo zpzy5`M%*wQk)Oz}e~%4FJMnUE@) z_xJmahc}b?{eHWf&DK*M{Fs?HGjG1{&71e$u3A1z9LFf7P=BlwGGMgE=qOrWzyTDf zBu0f=uMM~{vI}DcsN7us0M%qp(ekjo4AlmeQm8P`OmafB5q4pf)zWB}hBg%7`k_V$ixY8;S_J=0 z!sIQ_Pk&NhdY@9#zVaNLJSP2mUHI2-0<|n)W1zPiQ~{=Dp}GV;y>`uN;MYRhUg5L(t0~`_~sWSbf=mB8$7_a zF@I?t(1Cs!?6>ts`>H?I;M~>ZBBTZhf&JC>&0wM{jpZ zrt{Kb-H?BU?pkh)v@fVTA^4vJHCI#B9Nrw~XK51(8YsuYQvuG9?L!y)qnXR%~ wGk%`8>YDpZy{+&VgV8~d`6FOmkO0U02jk1&f>;aK-2eap07*qoM6N<$f_>zENdN!< delta 791 zcmV+y1L*vj3ati^BYyw}VoOIv0RI600RN!9r;`8x0^&(TK~z|U)t5_XQ$ZAlzllkj zG_=;*hkc2O6>6!~Me%_O3W6I&Tq(Hmy-^o};6m%l?p)T5pr{CL1vf6Vl!}z9t)kFP zAJ_+0+iF|W+@wvDaWT2vBsZZqH(=}!!^}Bz&Y3@R&zzaS8h?h+-qS#gP9!abCSw_b zK>^pC#CQT6MiiP+P6$ZJdZG2Q47du-#s;K=wMiU6I5TONqVQ+YkV|}^g<)(e)vmS@ zsyD*OWU4(tlON`T@MBiVE+_cBP~?W13J^(Y+A{#N^J-k`gClz^(${*C>Frqu5{%Y) z6ZxP$RR_qcr+<|F?iTZ0-&5qR3uZkaeO~0*`Z zqmwY4_+mjVv)$k*JbwjqLD;_&P9IG@BRXu6cQ_y(hkunAboVC$tyA)9C~_O)#gKV^ z@+TZT58)*xKY9U?B{+8?1CQLPLq!>Q5+q*tsebdO+~Y)7%(~?$TtAbl>lw)GZ;QOc z0seY5e)n1RfqFZU%&4t`+m}?y)S-U`6A!zKY)z2WBC7Y-*^QJ6{fl}%hAy7vOxYqY zNUa(G{(o9Kk@AD>oo`G_6RSIKu`pSJ{j^Ej`G7_8;fOIV_L}GQvKx=D9?SmDCz1EK zp{8-DV zGjk9)rb?!c`V4lE$Ic63!APu002ovPDHLkV1l}0f64#= diff --git a/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_rotten.png b/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_rotten.png index 678af063aa53629f210f93f8d557cfaac66ec27a..c6630d2261b84ac668e17b8826a9a1a73a952a1a 100644 GIT binary patch delta 1601 zcmV-H2EO^k2hj|WBYy@MNkl|!F*fM2I z1Q9<(q$xE5LVwieFGjH7RKL{TdtDYl%H=?raGQ?VQXpZpbGxDIZDPu05gd>%vPCcy zV|v+|l*5Ygee1L@dKT<{5;?gdgcmLkRO($V<+h@Z4f@Zt?#OK-G>W(xU;Fj*U$X@BM)XZ#B-4wcP!K~|hS_@Kiw z)90_f%kZ(rCq|l|*!!5y#=n(bzt?I>B01+nJ-IY>SuSD-hX|bA99c6ttUZ}EHq~qb zo_dn#>fCT)y7s+lx%@kZ2EDF2QM|8kZse3xPUGZw;cIK(FPzvvgkbYKU%NiN_0@e= zOJ0(k_kXB>%D?%bVvIkPWy3}3Yu&$1d;KPxjZ=gy?RGoj5P)3(Ox|M}lwa%W+;(du ziPh6oynLCQ|8wDV@r#TNdM*?*nFh~=X7XR0BF5(^6Bs_y;K@qraE}r>Th@MS+aTDY zIlKw$ZKfF`qJXoxIF|m*3Y!lvFnnwez$CN^6MqLjCJy(Blg)*R;xEyuRCOyVKP6ZMi1d1_ zmYDQ-v1SThkepv+6Q_h)@|&5RM}N}Ir4;`0-Bq-bKT72G;1q&k%@pF0O5VH94YBzI zY=5CUDT2c+A?v+0(~ANX3zkS$=Sb{Cb$jL9Qb#YOw{T|Un_y26!UmA9OOLtlHW#`^cX@UG}~k;)S3Z!uX(L_*l|iTzz`)=M(jR5buU*B%!0< z&6P?%ayHj`t2%IWH)Bub7T!$O0>w(a)PEpyGjg~3|F-{Ix-$Ew&BooZE-%Ay7)~1@ z2~W;$ue@>Vo}zZvsa{WvUouHqY5gJc9^PQjRfL=Ehm@Scc0j0%J$liN)3PNk5+s?B$pZ|+u%Rm33$BESJAIUiZDk3hH2?5J!4ekfT7 zM(7OwWcHsV0aE0WS*LZ%=fX_ug5;w} zdc8NZ%TkN?&Fma~w`*AkPe{hK)d>X2M?EI-^GG=`T6EHvc{@98DIGXJcnR8k%>d1MKKpaIQvXQJaxAvA%F=Y zLK1@Z`ku7j`U=7o&OQ^>wtu|*F)wZ2RoMK%k1>53W7p{%Av9?J-7N_AFXv)>($BO%G@nM zzBSn;1*HGX{w;-bBbQd59kG??4qD;8k$V3`@fSdQrY(k8+S6d^H#*wSxBstOUIN(N zqs6}F13G}{YS&0FOzj-KaL1oWLpW5Dr7Zskn5zy0{eP2l00000NkvXXu0mjfj-Dg5 delta 943 zcmV;g15o_Y48#YJBYyw}VoOIv0RI600RN!9r;`8x19?eAK~zYIy_H*N9Ay;8f9IP` zbJ5LgF4zk#s9+yVL8wZyn^dqU8f`7bo%G^^S`}Y>Q1C(UML|IjM7*IOD0rc9wiPeL z2hj$_Y&Jxq)@rRSqNG$>CD~1r*mU+gK4g>bPIk6i5dSYT=YRaq`Tpm8-^}@hdN9=A zm~fldOedUEbomQ)<%A%$$arpNhuGL#0(Sxim=o0}r&F01FIC9YByDWJ!1l7Z78QA+ zeeCY8|4hiuc~=3qRH398NZ+Lj#Uh!&7>upXiCMYjhwf`iG|u*0(H3iqpP%jh@N_vH z*-^fC@PxoO)qgl+?2&Rik==cz+cf*V3I_#w*Dm7DSy;}k1Za8>qx|OY>yi>NwF>W3X zE_CDF1aw!a^9r{uzGYb`p4+uiReXf2OTJAgpSI=Fi+@2~{=(((Ffdu-Tgz9oqC28? z#Hwvt7ILgj0S%#;Ro2QI>&CaY08FO*dEkc^RkaUg0ayXVprl2(JNdRP`a8Q)OQv<-dPnDWG-4dqjlifu_jR+BmA{XGUbk zTFy9@kAJ87{68vdE}?yF_l9E8?ghP3At|t~PLW^Z%5|mfjYRcX_kriQ>-9NA9&!$(Ar>rry!K)!MukZ=*TNUoO z!rQ=XL~e&5FS(;Xz7Aj%Rz(D!E@G}PB>lUr+B?Fe<2YLjN&kKky{C3#@=#kYy~Q}H zhkzi&o=0`>+2r8QQRzWYTnjMWlldq#3s=CZ^qQ%Ze^^A*2*0p+s1qV`TRxTfV!3+c z_J0+13ePOPmuBH`l#p8az4G%`1VO`rZZ&xk6;oEiF~trol05mW;`iKcDZ(JfKRqATI+4K%R(OQgrzX(N}pzqYMGtLhh4O zadR{rTS)n1z}S+VFFl=lgwDPB)3?nhyC|kmIuQbauZzOH3!D8v>&gFL@h>hvHs;U_ RZR!93002ovPDHLkV1lNp)tUeR diff --git a/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_spilled.png b/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_spilled.png index 988d65546d214f44e32bf3eb57c39e732e0fbd89..142cd392d89a4a4edd1d2995bd7a0c847873db59 100644 GIT binary patch delta 1580 zcmV+{2GjYh2)qoCBYy@1Nkl?dLI3%f9Dwk3~ zB~KtK9zftAqzZ{8pgt534}B|cB?PHZCGvt)v8WFfLvG#T)_plKqkKW1)y0Z%-&b2n55vqs^C=%I5DGCeIk z@r3Qj`}KjZ;rd_ByQQ6#ps;f|Q>l!VcgS76W9%+e8P5(=^(zedeH5JRro{k$`SvOK z&PzX%o}NC5E-s3Fs}7!t-9sau=KL>3Upae<6H^X{Pk*NFN5=2{?a%Icggx0E?C{Hk z_yFk^`)+lOL^gI-qjlbG)cENe&)@_Z(zP~rW)(sgqQs<^meqWy{0MN0^9MSnYbNb> z==csGiA|**tuo)L%WQLzcN;aXH)_1sT;$sN9Pc$3m}@RE*Ic5Jws3JUzK8wKB6em4 zJO`{Qu78Mg?@-(9$nI->;q(=zG4A(YdCI%6d|7I(I`geM^=J*^CZtiI{-t>{1JifGQY-R+18>0g?SAa0NbN+~@yyPAXxMYIcCh@_q(0 zWd<{S9Sr;E3ySpmIZA$koEzdA7tgr-@Rgr)zJGp!Y}^BlxFhIhnyB80&?GYn{EkE5 zUYYtMju`F~6ve9L&6UgGc<6ErsRh?;@v4a4h#}H_0Q};tx~ZmEwOABXZ)Vtr_qz$O z`IOGO*jfQ&uRx)v@$&>jXsdXFx_v{ysW7U#wpiN2Dl4we*DM|NR zq8+qqS&y6i%t|7O;pTIHHIVQVWR!4S|wNL|D7{;0tX) z+=bRMIX6q_`nWjT+j|?RX8QR%7WG`Brh(XCJf$~dxqqa|J2{`pp;`OvWx|u=#DDI< z@z2rYW+(*(di^}*pg@0EVjwKhAC{;DMJi#5a!{lcqtUvPQ&{uKsG z@Yr8_Ir>1I?|%A*S*+ti_EnaS!k_LYt>nfZ**&3 z8`O5LVH|KmJTHqUhK3bBnpxxZdw>230UUod%j96hu5yB;s09@d9OX&5w014sovT{5 zw1RdTQIFPSp|#9HdzsnhBD2j!=38}Un@e18)R=27a(;P+z_Gl%{~zqjv~WFz6l@AA zn_f_pLuBx|&!>+~9x)TSQHFyu)u5k}lY^TLZri?;*p$z{_%NrhzQ&V#Ykxdiy-G6{ ze9_IIp+l?!sqplN@55<-6$vInzfdiC`RZV{uUIV(`QyD+#_~h#>=|M-9AHOKrs5XK zIT;1)s|y$OQ-As!!oexw z{Jd}os0}DnC#;C*?TVyqR6vz){AF+DH+wIJaZJ?<`BvKCoEYvi9wnc+!}R|L-{` zd6TyJu;;W*)3`KgnyeX}U(?Zb%ABCP5D~Q9g^Cv<>WvqIcaDhzQS?%VUX)=wWezO8 zE8Yy*l!4+t80&1MAZwbMHXlv%bv|;=<3+m6q^Xt_uk;Uxmw)rVywC6XKhOJ~1N^Uh z6x-GAFCMY+Hbl)H5{r-%amo`Hs zNMO(CFJGE#6-N5&OZ%B4K2xeb4MG&4sKUKN!P(wOaKPsXb@&nYhOyVvkBB<}F4z&D zISv4@7S};VBYz<7Q@#e_Au!OkAp7Luv53b%b@IX2`G6~c0apO+lB1=`w7QPZ=cln; zUIk?;u$BrnV50Bfv(Qac$tI&2WPy1vrLLjp z+_4?GX;9VLI!Ay=%-if$5*W)K>fVn}4!qs4V3LV~QEp7uGEl0j_%;7KPF~_E}0vQaKmEwOd7(s4b~iAj=p+i z_RZ?g={d@%>$IITQ>R2JMW?P$Q1@4l(KkQHWX_@avCKKBbPLmT6ZX2JdLPe@3=0+; z2VuY=IV1iyB@*oL-52WcBjoBssKbv?hkqY?JwZrwDk@aj6z>V%h^r`7x9X+3dTU7hUBv#NW}2Q?*6dn z$3$L8Mh>_OkDnWyclO$~m;elepb$dcb{sh=vvk{{z Sdw5j<0000i5?A`nHD>#V=p(!BRnzXbKAPEE$ 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 N002ovPDHLkV1flDL}dT~ delta 1622 zcmV-c2C4ai7Um3)BYyw}VoOIv0RI600RN!9r;`8x1{+C4K~z|U?U-$FlvfqUf9F1% zY?x@6h7MDiMl_L*feN-FHVe{jd67th^#yE^R;oDs6>L(qD-rjh!GU>DiM6MJ6 zQG^YloX{;+^)5s-EAfxcf3OW`t2(hif^g^7`S;cYxXtvGgBX6`(Ab$!PRW%sLZlGnz^ohx*a>WFQ zHokk(Gse7nTYQ( z$@hKW2>_#R3z)?~ZdNqPK`LjQ3^GkDUbG9OBY?3(RNfor*KXka)ZShP;NT)~6T)gm zL9r?ECx4gCZ@#thZ&4gi0=MWeN#++oA5dejU8%}qiXY+wMc|QD-SVrF0poqcIzu>- zQ~hXU%{7478!v6N&P=sP^V4NtIhOMO)?eyoJ1=L6^-T|l+#7-P6R&=L|Ryo7cl<#+s9sZGLyf#s)Mfjz);j^onnid17 zp#^Aq%%;w8cjVn=S9tZ z0DqpkwZQpIzm3Q17AkBT#dCwg3*~in;gB=qR~#?r`gPYBJE*>#bu=(Y1+uu76t| zh)|;-pa(|Vo{LnxCdw0l%NXv$xqEBo%t-+JIU2PpZZCtoc~{MvHGUS_$AfMop*xJ9VmlN}l3wZkA6e{0e{D_+i3Cx7f2lT4`w=}BKYj$$N+%JA(pep@yZ{tzD&CTt3R z(y}j_M4n8lnQ7G{-PU19x^%lnQVsr4E0<7ju${vUST!$S&6TH)MlQGpP!%_$nnTREn^Hp3aAY;>X<j`^vCj` zuQuOR)&$^;Dh_fq{J`vnHqUDRH=UZ9qWW-Vj5zW=D0av!A3&rah);Xmm4EEEZ@;1{ zt3lcr`3B7v-2%^rY;I-1e=a`*-3Ih2vf{#u*}orQ6_z5}psL#h{T*I-XHbIw0W#8` Unp7!anE(I)07*qoM6N<$f_Pvg761SM diff --git a/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_upright.png b/wolfskin-design/src/main/res/drawable-nodpi/coming_in_rating_upright.png index 2a2bfa89a3e128a2eb6fcb056d804eaae1abb01b..efef470421226a180cba57ee8cf064ff6407e3b5 100644 GIT binary patch delta 1372 zcmV-i1*7`^2kr`xBYy=oNkl*>U4L~ne-%`bdQOSf0!9@gh3I! zpr8mMTo;0%uI>dvT)9z1SK>|(1O?qFF8o=jxKwm;7b-4vA@^>^pUX@p$@Je$cTc(} zo&L)?RiBGGNq2Nq@PpzUs_MLNy>Hd`)e!(yLE!t<@tFxW>f1}g(VF7RYv$L!2_2?PKcsvHh0OoHI z1!V@0@(&l=yL8p4{djbDcFp8YB=_1gX3hP_2n7szf^8mf>C+Ro^lHujX08FU2n909 zY40-15pjBF`@o@o%(Q zgLVT3yJ&w0dflKXHwQC$WNsdojv>dc!+-r5%zqb%KKvFIOUf4?pjVO#SRxP@bB^kI z3Xq4TGPE1m=U;>QqY#h5IrRL`B>%bxl7#5p&yibh4+`@~V9>{ZRYsOeaI_e(E}X+8 ztcMgsF+33Rpjd|8J+!_F-h+u?CJzfsVcZxfT?_LIFq;Qew6O)f0W6fj*nm~r zB!3yQaX{o97qnghyakZbDmny4{Q&A6sD@_j;l9L$YB}nogYaz{mPUn0xj?7_N-R|3 zMs-YoR{*870twLFPIE>=vo<`9nY`~;!JTfX?&XzmCPxE_81p|HE5}A-qk7>7sWC^JON`LJ< z8gm|iCK4U^-)Eg#N>o^Y`P@X2n8Vg-dKjh`(P_h+o#aq$6W?e3z;()@9=kDH;fP~7 zQh>$fV8x;WT6E4IYqsR>lf6=A%BPN{|3K*i_nI)blVNKF9nZ_Wwh6Yy)g&LV*fyq zb0HOq%b~A(89L2wHm07!s}WFDFV`bO?RBcO>HsR`RT%6-e}{uG7Wpj^z@QiAhN_^n zYS8P}fh&_e0(e{u81%B+qE!v|=+ZG5?xFo&n5h~HsF*-zCq&xs!Ek^S(^VYmG`((* ztAcU*au7516XLPhPk7@cVW*?qdWX^{TnpZX;wmy#8NyE+-iJB6z^$j1WY6*D%f@>1 eJ^()j-+u*FwSsdloMk2e0000sXPJAeN(=gtVb2u%^A#OpXr zP~seLLyoYp8;$1Tilg^=Nhj#iB$ss*)lo8)^ACED-d1#E2Z-TMKE*NsdvVDvZFKiPVhwcC;NNgkq;=1iEj#-@7{HHW(ZfzcqJ=qlG`K43#E7PV)!~c#>z@bf4`-0Pv;6NOm(Pg3ZQ3N@p znCC3=j71U(9ZiHcL1zU`8SF0xoi3L`(5aAiaGlYMN(N&_zKfE62P*J`6Dz28et! zio_H7Af(O_fOn$(j(aC}1~j)Qa#8C=cfTjnn@$H0CLS% zs#-efNkFY5CsKxm96c;21(2C!%XeFFG|Z|l%;c($wDujj^&nkYLVBvDoAla83iCUH zDvQTZEtjLP4#h&)QLuE@LOuu8(#=gx)okJBAU4*!4{Vq&~_3%iE<-|rdtMCNNHvg_U?nWj&SGIHbd?q7zf#Z zfO5B*y3N`Y6!pAY_VbT7^uavR(;MDP5f^cSj+UW24*4ARv#Z6DZ@z9BB==ah>ExwS z|7lMPYq0cJ2vq0D_bFXE>)Fxaw>w4(nPY~UjV7z%^|^f_az%}KMUJ11$jZw={KsrZwOu)dSV YKQIZNka7`NO8@`>07*qoM6N<$f|FwCPXGV_ diff --git a/wolfskin-design/tokens.css b/wolfskin-design/tokens.css index 694336d8..7aba6641 100644 --- a/wolfskin-design/tokens.css +++ b/wolfskin-design/tokens.css @@ -130,6 +130,15 @@ --requests-sheetPaddingY: 80.0px; --requests-sheetPaddingX: 64.0px; --requests-sheetGap: 18.0px; + --requests-sheetTitleLineHeight: 56.0px; + --requests-sheetTitleBaseline: 44.0px; + --requests-titleLineHeight: 39.0px; + --requests-titleBaseline: 31.0px; + --requests-factsLineHeight: 31.2px; + --requests-factsBaseline: 24.0px; + --requests-stageLineHeight: 39.6px; + --requests-stageLabelLineHeight: 33.8px; + --requests-stageBaseline: 24.0px; --requests-emptyMargin: 20.0px; --requests-rowPaddingY: 14.0px; --requests-rowPaddingX: 18.0px; @@ -137,7 +146,8 @@ --requests-listGap: 6.0px; --requests-stageMargin: 4.0px; --requests-stageGlyph: 28.0px; - --requests-stageGap: 8.0px; + --requests-stageGap: 10.0px; + --requests-readinessItemGap: 8.0px; --requests-readinessGapX: 22.0px; --requests-readinessGapY: 10.0px; --requests-readinessMargin: 8.0px; diff --git a/wolfskin-design/tokens.sha256 b/wolfskin-design/tokens.sha256 index 17919f8b..9143d9ac 100644 --- a/wolfskin-design/tokens.sha256 +++ b/wolfskin-design/tokens.sha256 @@ -1,5 +1,5 @@ 1438f7ca4a2b6f951c9e643ab0afacbf2f7fc98e57905295d518c6225e054de4 generate_tokens.py -dafb97c1d26ce435dc4b28b57cc02475a13901191824568c39e88e0474acf86f shell-tokens.json -673d4ece482b480c88acb085438f1e03d979bfa9c85a960c69a5543987e42c9f src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt -16318b38182d7248402c4c448ead5444644eb59a7fd5b63c4e845ffee0085b4a tokens.css +61568cdb87c1b64984033e6d66b06c4aee1870580fb5640ed4a1a97100451c0a shell-tokens.json +cddf8798e731206e1adf1e66384ffcb1b679b27e2ee9f33fd128a04850fd829f src/main/java/org/justinvisser/wolfskin/design/WolfskinTokens.kt +60ac4a0fff7d7965a9c4fa25d71a10cb304c3e636031ccf036a33459571e04fe tokens.css 5b939f1f3eb90b428008fda75720f6e3a4e844c486668931db3d52bffb987b53 tokens.json