@supportpages.io/wtfm 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +23 -0
- package/README.md +392 -2
- package/dist/actions.d.ts +98 -0
- package/dist/actions.js +86 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent-settings.d.ts +22 -0
- package/dist/agent-settings.js +35 -0
- package/dist/agent-settings.js.map +1 -0
- package/dist/api.d.ts +14 -0
- package/dist/api.js +159 -0
- package/dist/api.js.map +1 -0
- package/dist/article-link.d.ts +16 -0
- package/dist/article-link.js +25 -0
- package/dist/article-link.js.map +1 -0
- package/dist/artifacts.d.ts +45 -0
- package/dist/artifacts.js +144 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/brand.d.ts +4 -0
- package/dist/brand.js +9 -0
- package/dist/brand.js.map +1 -0
- package/dist/bridge.d.ts +2964 -0
- package/dist/bridge.js +1036 -0
- package/dist/bridge.js.map +1 -0
- package/dist/capacity.d.ts +5 -0
- package/dist/capacity.js +11 -0
- package/dist/capacity.js.map +1 -0
- package/dist/credentials.d.ts +13 -0
- package/dist/credentials.js +88 -0
- package/dist/credentials.js.map +1 -0
- package/dist/development-tls.d.ts +8 -0
- package/dist/development-tls.js +38 -0
- package/dist/development-tls.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/export.d.ts +11 -0
- package/dist/export.js +91 -0
- package/dist/export.js.map +1 -0
- package/dist/hosted-operations.d.ts +108 -0
- package/dist/hosted-operations.js +120 -0
- package/dist/hosted-operations.js.map +1 -0
- package/dist/hosting-benefits.d.ts +66 -0
- package/dist/hosting-benefits.js +67 -0
- package/dist/hosting-benefits.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/local-inventory.d.ts +22 -0
- package/dist/local-inventory.js +59 -0
- package/dist/local-inventory.js.map +1 -0
- package/dist/local-setup.d.ts +208 -0
- package/dist/local-setup.js +140 -0
- package/dist/local-setup.js.map +1 -0
- package/dist/pairing.d.ts +71 -0
- package/dist/pairing.js +235 -0
- package/dist/pairing.js.map +1 -0
- package/dist/preferences.d.ts +18 -0
- package/dist/preferences.js +44 -0
- package/dist/preferences.js.map +1 -0
- package/dist/progress.d.ts +205 -0
- package/dist/progress.js +224 -0
- package/dist/progress.js.map +1 -0
- package/dist/reminders.d.ts +31 -0
- package/dist/reminders.js +73 -0
- package/dist/reminders.js.map +1 -0
- package/dist/replace-connection.d.ts +6 -0
- package/dist/replace-connection.js +77 -0
- package/dist/replace-connection.js.map +1 -0
- package/dist/repository-actions.d.ts +18 -0
- package/dist/repository-actions.js +9 -0
- package/dist/repository-actions.js.map +1 -0
- package/dist/repository-benefits.d.ts +96 -0
- package/dist/repository-benefits.js +64 -0
- package/dist/repository-benefits.js.map +1 -0
- package/dist/run-update.d.ts +17 -0
- package/dist/run-update.js +27 -0
- package/dist/run-update.js.map +1 -0
- package/dist/runs.d.ts +541 -0
- package/dist/runs.js +146 -0
- package/dist/runs.js.map +1 -0
- package/dist/runtime.d.ts +12 -0
- package/dist/runtime.js +58 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts +277 -0
- package/dist/schema.js +66 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.js +298 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +1714 -0
- package/dist/session.js +619 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +9 -0
- package/dist/settings.js +21 -0
- package/dist/settings.js.map +1 -0
- package/dist/sync.d.ts +495 -0
- package/dist/sync.js +191 -0
- package/dist/sync.js.map +1 -0
- package/dist/telemetry-scrub.d.ts +13 -0
- package/dist/telemetry-scrub.js +51 -0
- package/dist/telemetry-scrub.js.map +1 -0
- package/dist/telemetry.d.ts +73 -0
- package/dist/telemetry.js +173 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/walkthroughs.d.ts +224 -0
- package/dist/walkthroughs.js +109 -0
- package/dist/walkthroughs.js.map +1 -0
- package/dist/workspace.d.ts +14 -0
- package/dist/workspace.js +127 -0
- package/dist/workspace.js.map +1 -0
- package/dist/writer-agent.d.ts +21 -0
- package/dist/writer-agent.js +27 -0
- package/dist/writer-agent.js.map +1 -0
- package/dist/writer-entry.d.ts +171 -0
- package/dist/writer-entry.js +233 -0
- package/dist/writer-entry.js.map +1 -0
- package/dist/writing-style.d.ts +7 -0
- package/dist/writing-style.js +52 -0
- package/dist/writing-style.js.map +1 -0
- package/engine/SYNC.json +4 -0
- package/engine/VERSION +1 -0
- package/engine/detect-project/README.md +141 -0
- package/engine/detect-project/SKILL.md +1421 -0
- package/engine/detect-project/assets/desktop/desktop-frame.css +428 -0
- package/engine/detect-project/assets/game/game-frame.css +132 -0
- package/engine/detect-project/assets/macosui/LICENSE-puppertino.txt +21 -0
- package/engine/detect-project/assets/macosui/VERSIONS.txt +1 -0
- package/engine/detect-project/assets/macosui/fonts.css +15 -0
- package/engine/detect-project/assets/macosui/macos-frame.css +481 -0
- package/engine/detect-project/assets/macosui/puppertino.css +2153 -0
- package/engine/detect-project/assets/mobileui/LICENSE-fonts.txt +13 -0
- package/engine/detect-project/assets/mobileui/LICENSE-framework7.txt +52 -0
- package/engine/detect-project/assets/mobileui/VERSIONS.txt +6 -0
- package/engine/detect-project/assets/mobileui/device-frame.css +316 -0
- package/engine/detect-project/assets/mobileui/f7-color-theme.mjs +1345 -0
- package/engine/detect-project/assets/mobileui/f7-icons-names.json +1254 -0
- package/engine/detect-project/assets/mobileui/fonts.css +16 -0
- package/engine/detect-project/assets/mobileui/framework7-components.css +39 -0
- package/engine/detect-project/assets/mobileui/framework7-core.css +5245 -0
- package/engine/detect-project/assets/mobileui/icons.css +31 -0
- package/engine/detect-project/assets/mobileui/md3-defaults.css +89 -0
- package/engine/detect-project/assets/mobileui/platforms.json +46 -0
- package/engine/detect-project/assets/tailwind-fallback.css +1729 -0
- package/engine/detect-project/assets/webtui/LICENSE-webtui.txt +28 -0
- package/engine/detect-project/assets/webtui/VERSIONS.txt +7 -0
- package/engine/detect-project/assets/webtui/terminal-frame.css +195 -0
- package/engine/detect-project/assets/webtui/theme-catppuccin.css +1 -0
- package/engine/detect-project/assets/webtui/theme-everforest.css +1 -0
- package/engine/detect-project/assets/webtui/theme-gruvbox.css +1 -0
- package/engine/detect-project/assets/webtui/theme-nord.css +1 -0
- package/engine/detect-project/assets/webtui/theme-vitesse.css +1 -0
- package/engine/detect-project/assets/webtui/themes.json +37 -0
- package/engine/detect-project/assets/webtui/webtui-core.css +1 -0
- package/engine/detect-project/assets/win32ui/7css.css +2 -0
- package/engine/detect-project/assets/win32ui/LICENSE-7css.txt +21 -0
- package/engine/detect-project/assets/win32ui/VERSIONS.txt +1 -0
- package/engine/detect-project/assets/win32ui/win32-frame.css +278 -0
- package/engine/detect-project/package-lock.json +12 -0
- package/engine/detect-project/package.json +10 -0
- package/engine/detect-project/scripts/apply_runtime_profiles.js +313 -0
- package/engine/detect-project/scripts/check_css_health.js +412 -0
- package/engine/detect-project/scripts/check_project_map.js +150 -0
- package/engine/detect-project/scripts/check_runtime_coverage.js +311 -0
- package/engine/detect-project/scripts/check_runtime_recipe_quality.js +184 -0
- package/engine/detect-project/scripts/classify_app_type.sh +246 -0
- package/engine/detect-project/scripts/classify_surface.sh +95 -0
- package/engine/detect-project/scripts/classify_workspace.js +39 -0
- package/engine/detect-project/scripts/compile_css.sh +447 -0
- package/engine/detect-project/scripts/detect_static.js +645 -0
- package/engine/detect-project/scripts/detect_structure.js +187 -0
- package/engine/detect-project/scripts/include_census.js +451 -0
- package/engine/detect-project/scripts/json_get.js +142 -0
- package/engine/detect-project/scripts/merge_json.js +52 -0
- package/engine/detect-project/scripts/recommend_model_tier.js +252 -0
- package/engine/detect-project/scripts/resolve_route_chains.js +135 -0
- package/engine/detect-project/scripts/run_css_build.sh +40 -0
- package/engine/detect-project/scripts/sanitize_css.js +83 -0
- package/engine/detect-project/scripts/test_classify_surface.js +108 -0
- package/engine/detect-project/scripts/test_node_helpers.js +142 -0
- package/engine/detect-project/scripts/test_recommend_model_tier.js +119 -0
- package/engine/detect-project/scripts/test_resolve_route_chains.js +182 -0
- package/engine/detect-project/scripts/test_runtime_coverage.js +323 -0
- package/engine/detect-project/scripts/test_runtime_recipe_quality.js +187 -0
- package/engine/detect-project/scripts/theme_overrides.js +169 -0
- package/engine/detect-project/scripts/write_branding.js +129 -0
- package/engine/generate-illustrated-article/SKILL.md +461 -0
- package/engine/generate-illustrated-article/contracts/desktop.md +90 -0
- package/engine/generate-illustrated-article/contracts/game.md +38 -0
- package/engine/generate-illustrated-article/contracts/label-evidence.md +38 -0
- package/engine/generate-illustrated-article/contracts/macos.md +79 -0
- package/engine/generate-illustrated-article/contracts/mobile.md +40 -0
- package/engine/generate-illustrated-article/contracts/terminal.md +29 -0
- package/engine/generate-illustrated-article/contracts/win32.md +43 -0
- package/engine/generate-illustrated-article/package-lock.json +366 -0
- package/engine/generate-illustrated-article/package.json +15 -0
- package/engine/generate-illustrated-article/scripts/article_blocks.js +34 -0
- package/engine/generate-illustrated-article/scripts/check_article_json.js +105 -0
- package/engine/generate-illustrated-article/scripts/emit_walkthrough_signals.js +100 -0
- package/engine/generate-illustrated-article/scripts/extract_images.js +187 -0
- package/engine/generate-illustrated-article/scripts/generate_content_images.js +376 -0
- package/engine/generate-illustrated-article/scripts/include_census.js +451 -0
- package/engine/generate-illustrated-article/scripts/inject_assets.js +1691 -0
- package/engine/generate-illustrated-article/scripts/jit_mockup_css.js +191 -0
- package/engine/generate-illustrated-article/scripts/label_evidence.js +87 -0
- package/engine/generate-illustrated-article/scripts/lint_article_copy.js +252 -0
- package/engine/generate-illustrated-article/scripts/lint_mockup_fidelity.js +2403 -0
- package/engine/generate-illustrated-article/scripts/polish_tickets.js +1148 -0
- package/engine/generate-illustrated-article/scripts/related_repos.sh +52 -0
- package/engine/generate-illustrated-article/scripts/render_all.js +177 -0
- package/engine/generate-illustrated-article/scripts/render_mockup.js +665 -0
- package/engine/generate-illustrated-article/scripts/render_ready.js +164 -0
- package/engine/generate-illustrated-article/scripts/resolve_workspace.sh +86 -0
- package/engine/generate-illustrated-article/scripts/runtime_region_geometry.js +55 -0
- package/engine/generate-illustrated-article/scripts/source_paths.js +49 -0
- package/engine/generate-illustrated-article/scripts/test_control_visibility.js +30 -0
- package/engine/generate-illustrated-article/scripts/test_emit_walkthrough_signals.js +157 -0
- package/engine/generate-illustrated-article/scripts/test_generate_content_images.js +168 -0
- package/engine/generate-illustrated-article/scripts/test_include_census.js +126 -0
- package/engine/generate-illustrated-article/scripts/test_label_evidence.js +49 -0
- package/engine/generate-illustrated-article/scripts/test_lint_article_copy.js +138 -0
- package/engine/generate-illustrated-article/scripts/test_lint_mockup_fidelity.js +653 -0
- package/engine/generate-illustrated-article/scripts/test_node_ports.js +152 -0
- package/engine/generate-illustrated-article/scripts/test_polish_tickets.js +481 -0
- package/engine/generate-illustrated-article/scripts/test_related_repos.js +64 -0
- package/engine/generate-illustrated-article/scripts/test_render_ready.js +85 -0
- package/engine/generate-illustrated-article/scripts/test_source_paths.js +68 -0
- package/engine/generate-illustrated-article/scripts/trace_hook.js +79 -0
- package/engine/generate-illustrated-article/scripts/trace_hook.sh +4 -0
- package/engine/generate-illustrated-article/scripts/validate_html.js +114 -0
- package/engine/generate-illustrated-article/scripts/watermark.js +69 -0
- package/install.sh +14 -0
- package/package.json +57 -4
- package/scripts/auth.mjs +33 -0
- package/scripts/auto-update.mjs +7 -0
- package/scripts/build-plugin.mjs +58 -0
- package/scripts/build-release.mjs +94 -0
- package/scripts/check-release.mjs +40 -0
- package/scripts/check-runtime.mjs +10 -0
- package/scripts/cli.mjs +8 -0
- package/scripts/install.mjs +64 -0
- package/scripts/lib/agent-runner.mjs +181 -0
- package/scripts/lib/agent-settings.mjs +215 -0
- package/scripts/lib/article-skills.mjs +82 -0
- package/scripts/lib/auto-update.mjs +50 -0
- package/scripts/lib/brand.mjs +9 -0
- package/scripts/lib/browser.mjs +12 -0
- package/scripts/lib/claude-connection.mjs +33 -0
- package/scripts/lib/claude-permissions.mjs +47 -0
- package/scripts/lib/claude-plugin.mjs +15 -0
- package/scripts/lib/claude-writer.mjs +10 -0
- package/scripts/lib/cli-main.mjs +85 -0
- package/scripts/lib/cli.mjs +888 -0
- package/scripts/lib/codex-config.mjs +51 -0
- package/scripts/lib/codex-integration.mjs +61 -0
- package/scripts/lib/codex-skill.mjs +34 -0
- package/scripts/lib/harness-models.mjs +109 -0
- package/scripts/lib/install.mjs +269 -0
- package/scripts/lib/managed-writer.mjs +38 -0
- package/scripts/lib/planning.mjs +263 -0
- package/scripts/lib/prepare-update.mjs +85 -0
- package/scripts/lib/refresh-writers.mjs +12 -0
- package/scripts/lib/remove.mjs +167 -0
- package/scripts/lib/renderer.mjs +34 -0
- package/scripts/lib/terminal.mjs +252 -0
- package/scripts/lib/uninit.mjs +72 -0
- package/scripts/lib/update.mjs +55 -0
- package/scripts/lib/writer-recovery.mjs +35 -0
- package/scripts/lib/yolo.mjs +362 -0
- package/scripts/plugin-session.mjs +65 -0
- package/scripts/prepare-update.mjs +12 -0
- package/scripts/publish-release.mjs +92 -0
- package/scripts/skills/supportpages/SKILL.md +120 -0
- package/scripts/smoke-release.mjs +101 -0
- package/server.json +27 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/* desktop-frame.css — hand-authored OS window chrome for desktop-mode mockups.
|
|
2
|
+
* Appended AFTER the app's own compiled CSS by detect-project's desktop branch
|
|
3
|
+
* (STEP D2), so on any conflict plain source order gives these rules
|
|
4
|
+
* precedence — with !important reserved for the geometry rules that arbitrary
|
|
5
|
+
* app CSS is known to fight (height chains).
|
|
6
|
+
*
|
|
7
|
+
* These classes ship in branding.css on purpose: the fidelity lint hard-fails
|
|
8
|
+
* classes that a mockup defines in its own <style> block, so the frame must be
|
|
9
|
+
* pre-defined here and mockups may only USE these class names. Same trick
|
|
10
|
+
* whitelists the traffic-light hexes for the lint's colour check.
|
|
11
|
+
*
|
|
12
|
+
* The load-bearing bits:
|
|
13
|
+
* - .desktop-stage's 48px padding pairs with the macos/windows viewport
|
|
14
|
+
* presets in render_mockup.js (preset width 1576 = window 1480 + 96) so
|
|
15
|
+
* the content crop yields symmetric 48px margins. The 1480×900 window is
|
|
16
|
+
* the same size as the `web` browser preset, so every PC-class capture
|
|
17
|
+
* (browser, Electron/Tauri, Win32, macOS) comes out the same size.
|
|
18
|
+
* - html/body height:auto !important breaks the app's own height chain
|
|
19
|
+
* (#root { height: 100vh } is near-universal in Electron renderers); the
|
|
20
|
+
* window is the only fixed-height box, so the crop lands at window
|
|
21
|
+
* bottom + 48px instead of viewport bottom.
|
|
22
|
+
* - .desktop-window is a fixed-size, overflow:hidden canvas: it clips app
|
|
23
|
+
* content that is realistically taller than one window, exactly like
|
|
24
|
+
* .device-screen does for phones.
|
|
25
|
+
* - Caption glyphs (minimise/maximise/close) are pure CSS via currentColor —
|
|
26
|
+
* never unicode (dingbat ✕ etc. would fail the emoji lint).
|
|
27
|
+
* - window_chrome fork: "native" uses .desktop-titlebar; "hybrid" uses the
|
|
28
|
+
* app's own header bar plus .desktop-traffic-lights--overlay /
|
|
29
|
+
* .desktop-caption-buttons--overlay; "custom" uses no frame chrome at all.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
html {
|
|
33
|
+
height: auto !important;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.desktop-stage {
|
|
37
|
+
margin: 0;
|
|
38
|
+
/* height:auto + no bottom padding: the render crop adds its own 48px and
|
|
39
|
+
* the body background propagates to the canvas, so the margin paints. */
|
|
40
|
+
height: auto !important;
|
|
41
|
+
box-sizing: border-box;
|
|
42
|
+
padding: 48px 48px 0;
|
|
43
|
+
display: flex;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
align-items: flex-start;
|
|
46
|
+
background: #eef0f3;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.desktop-window {
|
|
50
|
+
position: relative;
|
|
51
|
+
box-sizing: border-box;
|
|
52
|
+
width: 1480px;
|
|
53
|
+
height: 900px;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-direction: column;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
background: var(--desktop-window-bg, #ffffff);
|
|
59
|
+
box-shadow: 0 22px 68px rgba(0, 0, 0, 0.33), 0 0 0 1px rgba(0, 0, 0, 0.08);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.desktop-window--mac {
|
|
63
|
+
border-radius: 12px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.desktop-window--win {
|
|
67
|
+
border-radius: 8px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Headless Chromium on Linux paints space-occupying scrollbars; a real
|
|
71
|
+
* desktop-app screenshot shows none (overlay scrollbars / hidden until
|
|
72
|
+
* scrolled). */
|
|
73
|
+
.desktop-window ::-webkit-scrollbar {
|
|
74
|
+
display: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ── Native titlebar (window_chrome: "native" only) ──────────────────────── */
|
|
78
|
+
|
|
79
|
+
.desktop-titlebar {
|
|
80
|
+
position: relative;
|
|
81
|
+
flex-shrink: 0;
|
|
82
|
+
display: flex;
|
|
83
|
+
align-items: center;
|
|
84
|
+
background: var(--desktop-titlebar-bg, linear-gradient(#f9f9f9, #f0f0f0));
|
|
85
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.09);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.desktop-window--mac .desktop-titlebar {
|
|
89
|
+
height: 38px;
|
|
90
|
+
padding: 0 20px;
|
|
91
|
+
font-family: -apple-system, 'SF Pro Text', system-ui, 'Helvetica Neue', Arial, sans-serif;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.desktop-window--win .desktop-titlebar {
|
|
95
|
+
height: 32px;
|
|
96
|
+
padding: 0 0 0 12px;
|
|
97
|
+
font-family: 'Segoe UI Variable', 'Segoe UI', system-ui, Arial, sans-serif;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.desktop-window-title {
|
|
101
|
+
font-size: 13px;
|
|
102
|
+
font-weight: 500;
|
|
103
|
+
color: rgba(0, 0, 0, 0.82);
|
|
104
|
+
white-space: nowrap;
|
|
105
|
+
overflow: hidden;
|
|
106
|
+
text-overflow: ellipsis;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* macOS centers the title in the WINDOW, not in the space left over after the
|
|
110
|
+
* traffic lights — absolute centering reproduces that statically. */
|
|
111
|
+
.desktop-window--mac .desktop-window-title {
|
|
112
|
+
position: absolute;
|
|
113
|
+
left: 80px;
|
|
114
|
+
right: 80px;
|
|
115
|
+
text-align: center;
|
|
116
|
+
pointer-events: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.desktop-window--win .desktop-window-title {
|
|
120
|
+
font-size: 12px;
|
|
121
|
+
margin-right: auto;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ── macOS traffic lights ─────────────────────────────────────────────────── */
|
|
125
|
+
|
|
126
|
+
.desktop-traffic-lights {
|
|
127
|
+
display: flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: 8px;
|
|
130
|
+
flex-shrink: 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.desktop-traffic-lights span {
|
|
134
|
+
width: 12px;
|
|
135
|
+
height: 12px;
|
|
136
|
+
border-radius: 50%;
|
|
137
|
+
box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.18);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.desktop-traffic-lights span:nth-child(1) {
|
|
141
|
+
background: #ff5f57;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.desktop-traffic-lights span:nth-child(2) {
|
|
145
|
+
background: #febc2e;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.desktop-traffic-lights span:nth-child(3) {
|
|
149
|
+
background: #28c840;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Hybrid chrome (titleBarStyle: hidden/hiddenInset): the app draws its own
|
|
153
|
+
* header bar and the SYSTEM draws the traffic lights over it — float them
|
|
154
|
+
* top-left of the window above the app's bar. */
|
|
155
|
+
.desktop-traffic-lights--overlay {
|
|
156
|
+
position: absolute;
|
|
157
|
+
top: 14px;
|
|
158
|
+
left: 20px;
|
|
159
|
+
z-index: 10000;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* ── Windows caption buttons ──────────────────────────────────────────────── */
|
|
163
|
+
|
|
164
|
+
.desktop-caption-buttons {
|
|
165
|
+
display: flex;
|
|
166
|
+
align-self: stretch;
|
|
167
|
+
margin-left: auto;
|
|
168
|
+
flex-shrink: 0;
|
|
169
|
+
color: #1b1b1b;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.desktop-caption-buttons span {
|
|
173
|
+
position: relative;
|
|
174
|
+
width: 46px;
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
justify-content: center;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Minimise: a single hairline. */
|
|
181
|
+
.desktop-caption-min::before {
|
|
182
|
+
content: '';
|
|
183
|
+
width: 10px;
|
|
184
|
+
height: 1px;
|
|
185
|
+
background: currentColor;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Maximise: a square outline. */
|
|
189
|
+
.desktop-caption-max::before {
|
|
190
|
+
content: '';
|
|
191
|
+
box-sizing: border-box;
|
|
192
|
+
width: 9px;
|
|
193
|
+
height: 9px;
|
|
194
|
+
border: 1px solid currentColor;
|
|
195
|
+
border-radius: 1px;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* Close: two crossed hairlines — never a unicode ✕ (emoji lint). */
|
|
199
|
+
.desktop-caption-close::before,
|
|
200
|
+
.desktop-caption-close::after {
|
|
201
|
+
content: '';
|
|
202
|
+
position: absolute;
|
|
203
|
+
width: 13px;
|
|
204
|
+
height: 1px;
|
|
205
|
+
background: currentColor;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.desktop-caption-close::before {
|
|
209
|
+
transform: rotate(45deg);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.desktop-caption-close::after {
|
|
213
|
+
transform: rotate(-45deg);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* Hybrid chrome on Windows (titleBarOverlay): system caption buttons drawn
|
|
217
|
+
* over the app's own header bar, top-right of the window. */
|
|
218
|
+
.desktop-caption-buttons--overlay {
|
|
219
|
+
position: absolute;
|
|
220
|
+
top: 0;
|
|
221
|
+
right: 0;
|
|
222
|
+
height: 32px;
|
|
223
|
+
z-index: 10000;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* ── App UI container ─────────────────────────────────────────────────────── */
|
|
227
|
+
|
|
228
|
+
.desktop-window-content {
|
|
229
|
+
position: relative;
|
|
230
|
+
flex: 1;
|
|
231
|
+
/* min-height:0 lets the flex item actually clip instead of growing the
|
|
232
|
+
* fixed-height window when app content (100vh roots, long lists) is
|
|
233
|
+
* taller than the window. */
|
|
234
|
+
min-height: 0;
|
|
235
|
+
overflow: hidden;
|
|
236
|
+
/* contain makes this element the containing block for position:fixed
|
|
237
|
+
* DESCENDANTS and clips their paint (the game-frame .game-screen trick).
|
|
238
|
+
* Real desktop-app CSS is written against "the viewport IS my window" —
|
|
239
|
+
* fixed sidebars/headers (`fixed top-0 left-0 h-screen`) are routine and
|
|
240
|
+
* the containing-chain rule makes mockups copy them verbatim. Without
|
|
241
|
+
* containment they anchor to the render viewport and paint OUTSIDE the
|
|
242
|
+
* OS frame (observed: meetily's fixed sidebar escaping to the stage's
|
|
243
|
+
* top-left while `ml-64` main content stayed inside). With it, fixed
|
|
244
|
+
* descendants anchor to the window content area — exactly where the real
|
|
245
|
+
* OS window puts them. Overlays are unaffected: the contract already
|
|
246
|
+
* mandates position:absolute for modals/dropdowns. */
|
|
247
|
+
contain: layout paint;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* A lone app root must fill the window interior. Models sometimes hard-code a
|
|
251
|
+
* guessed pixel height on the root (e.g. height:860px inside the 900px window),
|
|
252
|
+
* leaving an unfilled strip of frame background below the app. min-height wins
|
|
253
|
+
* over an inline height, so a short root stretches to the window bottom while
|
|
254
|
+
* over-tall content still clips via the parent's overflow:hidden. Scoped to
|
|
255
|
+
* :only-child so multi-sibling layouts (app bar + main authored as siblings)
|
|
256
|
+
* keep their own sizing. */
|
|
257
|
+
.desktop-window-content > :only-child {
|
|
258
|
+
min-height: 100%;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* ── App macro-layout bones ───────────────────────────────────────────────────
|
|
262
|
+
* Layer these ONTO the app's real classes when authoring the shell. Real app
|
|
263
|
+
* stylesheets frequently size panes with runtime-dependent flex bases
|
|
264
|
+
* (flex-basis:100% sidebars, wrap rows, JS-measured panels) that collapse in a
|
|
265
|
+
* static mockup — a sidebar swallows the window and the main pane clips off the
|
|
266
|
+
* edge. These pin the macro proportions deterministically; the app's own CSS
|
|
267
|
+
* still paints all the visuals inside each pane. */
|
|
268
|
+
/* !important is load-bearing: these are layered onto real app classes whose own
|
|
269
|
+
* rules (e.g. `body.theme-dark .sidebar { flex: 0 1 100% }`) out-specify a bare
|
|
270
|
+
* frame class — the bones must win the layout properties or they do nothing.
|
|
271
|
+
* Same pattern as the mobile frame reasserting F7's page-content offsets. */
|
|
272
|
+
.desktop-app-rows { /* vertical shell: titlebar/toolbar rows over content */
|
|
273
|
+
display: flex !important;
|
|
274
|
+
flex-direction: column !important;
|
|
275
|
+
height: 100%;
|
|
276
|
+
min-height: 0;
|
|
277
|
+
}
|
|
278
|
+
.desktop-app-columns { /* horizontal shell: sidebar(s) beside main pane */
|
|
279
|
+
display: flex !important;
|
|
280
|
+
flex-direction: row !important;
|
|
281
|
+
flex: 1 1 0 !important;
|
|
282
|
+
min-height: 0;
|
|
283
|
+
flex-wrap: nowrap !important;
|
|
284
|
+
}
|
|
285
|
+
.desktop-pane-fixed { /* sidebar/rail — pair with an inline width from source */
|
|
286
|
+
flex: 0 0 auto !important;
|
|
287
|
+
min-width: 0 !important;
|
|
288
|
+
max-width: none !important;
|
|
289
|
+
min-height: 0;
|
|
290
|
+
overflow: hidden;
|
|
291
|
+
}
|
|
292
|
+
.desktop-pane-fill { /* main content pane — takes the remaining space */
|
|
293
|
+
flex: 1 1 0 !important;
|
|
294
|
+
min-width: 0 !important;
|
|
295
|
+
max-width: none !important;
|
|
296
|
+
min-height: 0;
|
|
297
|
+
overflow: hidden;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* ── Data-widget stand-ins ────────────────────────────────────────────────────
|
|
301
|
+
* Desktop apps routinely render trees, data grids, and code editors through JS
|
|
302
|
+
* widgets (grid libraries, editor components, design-system packages) whose CSS
|
|
303
|
+
* is runtime-generated or lives in an unbuilt package dist — so it is NOT in
|
|
304
|
+
* branding.css and can never be. Mockups must author self-contained stand-ins;
|
|
305
|
+
* these classes give them correct bones. Colours inherit from the app theme. */
|
|
306
|
+
.desktop-tree-row { /* sidebar tree/list row: icon + label per line */
|
|
307
|
+
display: flex !important;
|
|
308
|
+
align-items: center;
|
|
309
|
+
gap: 8px;
|
|
310
|
+
padding: 4px 12px;
|
|
311
|
+
white-space: nowrap;
|
|
312
|
+
overflow: hidden;
|
|
313
|
+
text-overflow: ellipsis;
|
|
314
|
+
font-size: 13px;
|
|
315
|
+
}
|
|
316
|
+
.desktop-tree-row--active {
|
|
317
|
+
background: rgba(128, 128, 128, 0.22);
|
|
318
|
+
}
|
|
319
|
+
table.desktop-table { /* data grid: browser-native column alignment */
|
|
320
|
+
width: 100%;
|
|
321
|
+
border-collapse: collapse;
|
|
322
|
+
font-size: 12.5px;
|
|
323
|
+
line-height: 1.35;
|
|
324
|
+
}
|
|
325
|
+
.desktop-table th {
|
|
326
|
+
text-align: left;
|
|
327
|
+
font-weight: 600;
|
|
328
|
+
padding: 6px 10px;
|
|
329
|
+
border-bottom: 2px solid rgba(128, 128, 128, 0.35);
|
|
330
|
+
white-space: nowrap;
|
|
331
|
+
}
|
|
332
|
+
.desktop-table td {
|
|
333
|
+
padding: 5px 10px;
|
|
334
|
+
border-bottom: 1px solid rgba(128, 128, 128, 0.18);
|
|
335
|
+
white-space: nowrap;
|
|
336
|
+
overflow: hidden;
|
|
337
|
+
text-overflow: ellipsis;
|
|
338
|
+
max-width: 260px;
|
|
339
|
+
}
|
|
340
|
+
.desktop-code-editor { /* code/query editor: gutter + mono content rows */
|
|
341
|
+
display: flex !important;
|
|
342
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
343
|
+
font-size: 13px;
|
|
344
|
+
line-height: 1.5;
|
|
345
|
+
overflow: hidden;
|
|
346
|
+
}
|
|
347
|
+
.desktop-code-gutter { /* line numbers — one number per content line */
|
|
348
|
+
flex: 0 0 auto;
|
|
349
|
+
padding: 8px 10px 8px 14px;
|
|
350
|
+
text-align: right;
|
|
351
|
+
opacity: 0.45;
|
|
352
|
+
user-select: none;
|
|
353
|
+
}
|
|
354
|
+
.desktop-code-lines {
|
|
355
|
+
flex: 1 1 0;
|
|
356
|
+
padding: 8px 12px 8px 6px;
|
|
357
|
+
white-space: pre;
|
|
358
|
+
overflow: hidden;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* Pane hygiene — a deliberate LOW-specificity net, no !important: when an app's
|
|
362
|
+
* own list-row CSS exists it out-specifies these and nothing changes; when the
|
|
363
|
+
* row styles live in an unbuilt package (so the mockup's rows would jam into
|
|
364
|
+
* one inline line), these paint them as sane rows. */
|
|
365
|
+
.desktop-pane-fixed a,
|
|
366
|
+
.desktop-pane-fixed li,
|
|
367
|
+
.desktop-pane-fixed [class*="-item"] {
|
|
368
|
+
display: flex;
|
|
369
|
+
align-items: center;
|
|
370
|
+
gap: 6px;
|
|
371
|
+
padding: 3px 10px;
|
|
372
|
+
white-space: nowrap;
|
|
373
|
+
overflow: hidden;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.desktop-toolbar { /* horizontal control strip: search/filter/actions */
|
|
377
|
+
display: flex !important;
|
|
378
|
+
flex-direction: row !important;
|
|
379
|
+
align-items: center;
|
|
380
|
+
gap: 8px;
|
|
381
|
+
padding: 6px 10px;
|
|
382
|
+
flex: 0 0 auto;
|
|
383
|
+
white-space: nowrap;
|
|
384
|
+
overflow: hidden;
|
|
385
|
+
}
|
|
386
|
+
.desktop-statusbar { /* bottom status strip — pins to the app-root bottom */
|
|
387
|
+
display: flex !important;
|
|
388
|
+
align-items: center;
|
|
389
|
+
gap: 14px;
|
|
390
|
+
margin-top: auto;
|
|
391
|
+
padding: 4px 12px;
|
|
392
|
+
font-size: 11.5px;
|
|
393
|
+
border-top: 1px solid rgba(128, 128, 128, 0.25);
|
|
394
|
+
flex: 0 0 auto;
|
|
395
|
+
white-space: nowrap;
|
|
396
|
+
overflow: hidden;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* Dialogs. An app's own modal-surface CSS is frequently JS-injected or lives in
|
|
400
|
+
* an unbuilt package, so a bare app modal class renders TRANSPARENT with the
|
|
401
|
+
* page bleeding through. .desktop-modal guarantees an opaque, centered surface;
|
|
402
|
+
* the injector's window-bg bridge re-paints it in the app's own canvas colour
|
|
403
|
+
* when the app themes via body classes. */
|
|
404
|
+
.desktop-modal-backdrop {
|
|
405
|
+
position: absolute;
|
|
406
|
+
inset: 0;
|
|
407
|
+
background: rgba(0, 0, 0, 0.45);
|
|
408
|
+
z-index: 900;
|
|
409
|
+
}
|
|
410
|
+
.desktop-modal {
|
|
411
|
+
position: absolute;
|
|
412
|
+
top: 50%;
|
|
413
|
+
left: 50%;
|
|
414
|
+
transform: translate(-50%, -50%);
|
|
415
|
+
border: 1px solid rgba(128, 128, 128, 0.35);
|
|
416
|
+
border-radius: 8px;
|
|
417
|
+
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
|
|
418
|
+
z-index: 1000;
|
|
419
|
+
max-width: 85%;
|
|
420
|
+
max-height: 85%;
|
|
421
|
+
overflow: hidden;
|
|
422
|
+
}
|
|
423
|
+
/* Fallback surface at ZERO specificity (:where) so the app's own dialog/surface
|
|
424
|
+
* class — layered onto .desktop-modal — always wins, regardless of source
|
|
425
|
+
* order. Without :where this stomped dark apps' dialogs white. */
|
|
426
|
+
:where(.desktop-modal) {
|
|
427
|
+
background: var(--desktop-window-bg, #ffffff);
|
|
428
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/* game-frame.css — hand-authored playfield frame for game-mode mockups.
|
|
2
|
+
* Appended AFTER the app's own compiled CSS by detect-project's game branch
|
|
3
|
+
* (STEP G2), so on any conflict plain source order gives these rules
|
|
4
|
+
* precedence — with !important reserved for the geometry rules arbitrary
|
|
5
|
+
* app CSS is known to fight (height chains).
|
|
6
|
+
*
|
|
7
|
+
* These classes ship in branding.css on purpose: the fidelity lint hard-fails
|
|
8
|
+
* classes that a mockup defines in its own <style> block, so the frame must be
|
|
9
|
+
* pre-defined here and mockups may only USE these class names.
|
|
10
|
+
*
|
|
11
|
+
* The load-bearing bits:
|
|
12
|
+
* - .game-stage's 48px padding pairs with the `game` viewport preset in
|
|
13
|
+
* render_mockup.js (preset width 1296 = max screen 1200 + 96). Unlike the
|
|
14
|
+
* desktop stage it is justify-content: flex-start, NOT center: game screens
|
|
15
|
+
* vary in size per project (game_metadata.display_size), and a left-anchored
|
|
16
|
+
* screen at x=48 gives the content crop symmetric 48px margins for ANY
|
|
17
|
+
* screen width — no per-game preset needed.
|
|
18
|
+
* - html/body height:auto !important breaks full-viewport height chains
|
|
19
|
+
* (canvas games routinely style body/#container at 100vh/100%); the screen
|
|
20
|
+
* is the only fixed-height box, so the crop lands at screen bottom + 48px.
|
|
21
|
+
* - .game-screen is a fixed-size, IN-FLOW, overflow:hidden playfield. This is
|
|
22
|
+
* the structural fix for the observed failure mode where a scene authored
|
|
23
|
+
* as position:fixed layers over an auto-height body measures a 0-height
|
|
24
|
+
* content extent and screenshots near-blank. Everything in a game mockup —
|
|
25
|
+
* scene, HUD, overlay menus — anchors inside it; position:fixed is never
|
|
26
|
+
* used.
|
|
27
|
+
* - The scene itself is an inline <svg class="game-scene" viewBox="0 0 W H">
|
|
28
|
+
* where W×H is the game's LOGICAL canvas size: the viewBox does the
|
|
29
|
+
* scaling into the display-sized screen, so scene coordinates stay in
|
|
30
|
+
* logical game units copyable verbatim from the draw code (never a CSS
|
|
31
|
+
* transform: scale).
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
html {
|
|
35
|
+
height: auto !important;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.game-stage {
|
|
39
|
+
margin: 0;
|
|
40
|
+
/* height:auto + no bottom padding: the render crop adds its own 48px and
|
|
41
|
+
* the body background propagates to the canvas, so the margin paints. */
|
|
42
|
+
height: auto !important;
|
|
43
|
+
box-sizing: border-box;
|
|
44
|
+
padding: 48px 48px 0;
|
|
45
|
+
display: flex;
|
|
46
|
+
justify-content: flex-start;
|
|
47
|
+
align-items: flex-start;
|
|
48
|
+
background: #101216;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* The playfield. Default size fits a 16:10 desktop-web game; mockups size it
|
|
52
|
+
* per-game with an inline style copied verbatim from game_metadata.display_size
|
|
53
|
+
* (fit-width 1200 / fit-height 900 / 1:1 when the logical canvas is smaller). */
|
|
54
|
+
.game-screen {
|
|
55
|
+
position: relative;
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
width: 1200px;
|
|
58
|
+
height: 750px;
|
|
59
|
+
flex-shrink: 0;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
/* Layout+paint containment makes .game-screen the containing block for
|
|
62
|
+
* position:fixed DESCENDANTS and clips their paint. Real game CSS regularly
|
|
63
|
+
* positions its UI overlay containers fixed against the viewport; inside a
|
|
64
|
+
* mockup the screen IS the viewport, so faithful copies of that markup
|
|
65
|
+
* anchor and clip correctly here instead of escaping the frame. */
|
|
66
|
+
contain: layout paint;
|
|
67
|
+
background: #000000;
|
|
68
|
+
box-shadow: 0 22px 68px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.07);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Headless Chromium on Linux paints space-occupying scrollbars; a game screen
|
|
72
|
+
* never shows one. */
|
|
73
|
+
.game-screen ::-webkit-scrollbar {
|
|
74
|
+
display: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* The canvas-scene host — a single inline SVG filling the screen. The viewBox
|
|
78
|
+
* carries the game's logical coordinate space; preserveAspectRatio and the
|
|
79
|
+
* display-sized .game-screen do the rest. */
|
|
80
|
+
.game-scene {
|
|
81
|
+
position: absolute;
|
|
82
|
+
inset: 0;
|
|
83
|
+
width: 100%;
|
|
84
|
+
height: 100%;
|
|
85
|
+
display: block;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* HUD stand-in for games whose HUD is CANVAS-DRAWN (game_metadata.hud_kind ==
|
|
89
|
+
* "canvas") — position it with inline top/left/right copied from the draw
|
|
90
|
+
* code. Games with a DOM HUD use their real markup instead (its CSS is already
|
|
91
|
+
* in branding.css). */
|
|
92
|
+
.game-hud {
|
|
93
|
+
position: absolute;
|
|
94
|
+
z-index: 10;
|
|
95
|
+
display: flex;
|
|
96
|
+
gap: 24px;
|
|
97
|
+
white-space: nowrap;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.game-hud--stacked {
|
|
101
|
+
flex-direction: column;
|
|
102
|
+
gap: 4px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.game-hud-item {
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
gap: 2px;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Centered DOM overlay (menu / pause / game-over / name prompt) inside the
|
|
113
|
+
* screen. This replaces the position:fixed habit: real games position these
|
|
114
|
+
* overlays against the viewport, but in a mockup the screen IS the viewport.
|
|
115
|
+
* Dim the scene behind it with an inline neutral rgba background when the real
|
|
116
|
+
* overlay does. */
|
|
117
|
+
.game-overlay-menu {
|
|
118
|
+
position: absolute;
|
|
119
|
+
inset: 0;
|
|
120
|
+
z-index: 20;
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
align-items: center;
|
|
124
|
+
justify-content: center;
|
|
125
|
+
gap: 16px;
|
|
126
|
+
text-align: center;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Pixel-art rendering for sprite/image content. */
|
|
130
|
+
.game-pixelated {
|
|
131
|
+
image-rendering: pixelated;
|
|
132
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Edgar Pérez
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
puppertino 1.5.1 (dist/css/newfull.css composition, flattened; dark_mode class-gated)
|