@supersuit/session-player 0.0.0-stage → 0.5.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/CHANGELOG.md +76 -0
- package/LICENSE +21 -0
- package/README.md +94 -2
- package/bin/simulator.mjs +117 -0
- package/package.json +55 -4
- package/src/bundle.mjs +56 -0
- package/src/convert.mjs +311 -0
- package/src/device.mjs +105 -0
- package/src/embed.mjs +39 -0
- package/src/index.mjs +7 -0
- package/src/playback.mjs +114 -0
- package/src/player-css.mjs +276 -0
- package/src/player.mjs +461 -0
- package/src/recast.mjs +87 -0
- package/src/scenario.mjs +80 -0
- package/src/serve.mjs +57 -0
- package/src/tidy.mjs +105 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// Scoped styles for the player, in the getfreedom palette. Every class is ss- prefixed so the
|
|
2
|
+
// player can be dropped into any page (the wiki, a book reader) without colliding.
|
|
3
|
+
export const PLAYER_CSS = `
|
|
4
|
+
.ss-sim{--ss-ink:#1E1B19;--ss-cream:#F6E7C5;--ss-paper:#FBF5E7;--ss-tomato:#DB371F;--ss-petrol:#265E72;--ss-mustard:#E9A23B;--ss-sand:#EED79E;--ss-aqua:#69B1B5;
|
|
5
|
+
position:relative;container:ss-sim/inline-size;font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;color:var(--ss-ink);width:100%;max-width:1040px;margin:0 auto;-webkit-text-size-adjust:100%}
|
|
6
|
+
.ss-sim *{box-sizing:border-box}
|
|
7
|
+
.ss-sim button{font:inherit;color:inherit;cursor:pointer}
|
|
8
|
+
.ss-stage{display:grid;grid-template-columns:1fr;gap:16px}
|
|
9
|
+
.ss-phone{position:relative;display:flex;flex-direction:column;height:var(--ss-height,min(760px,calc(100svh - 120px)));min-height:480px;background:var(--ss-paper);border:1px solid #e6d7b4;border-radius:28px;overflow:hidden;box-shadow:0 10px 40px rgba(30,27,25,.12)}
|
|
10
|
+
.ss-head{display:flex;align-items:center;gap:10px;padding:14px 14px 10px;border-bottom:1px solid #eadcbc;background:#fffaf0}
|
|
11
|
+
.ss-back{border:0;background:none;font-size:28px;line-height:1;padding:0 4px}
|
|
12
|
+
.ss-avatar{flex:none;width:34px;height:34px;border-radius:50%;background:var(--ss-petrol);color:var(--ss-cream);display:grid;place-items:center;font-weight:700}
|
|
13
|
+
.ss-titles{flex:1;min-width:0;display:flex;flex-direction:column}
|
|
14
|
+
.ss-titles b{font-family:Fraunces,Georgia,serif;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
15
|
+
.ss-titles small{color:#7a6d5a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
16
|
+
.ss-auto{display:flex;align-items:center;gap:4px;font-size:12px;color:#7a6d5a}
|
|
17
|
+
.ss-counter{display:flex;justify-content:space-between;gap:8px;padding:8px 14px;background:var(--ss-ink);color:var(--ss-cream);font-size:13px;font-variant-numeric:tabular-nums}
|
|
18
|
+
.ss-counter b{color:var(--ss-mustard)}
|
|
19
|
+
.ss-log-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}
|
|
20
|
+
.ss-log{flex:1;min-height:0;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:8px;-webkit-overflow-scrolling:touch}
|
|
21
|
+
.ss-intro{color:#7a6d5a;text-align:center;margin:auto 12px}
|
|
22
|
+
.ss-cmd-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:3px;margin-top:6px}
|
|
23
|
+
.ss-cmd{max-width:84%;background:var(--ss-petrol);color:#fff;padding:9px 13px;border-radius:18px 18px 4px 18px;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
24
|
+
.ss-redirect{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ss-tomato)}
|
|
25
|
+
.ss-reply{max-width:92%;overflow-wrap:anywhere}
|
|
26
|
+
.ss-reply p{margin:2px 0 0;white-space:pre-wrap}
|
|
27
|
+
.ss-who{font-size:11px;font-weight:700;color:var(--ss-tomato);letter-spacing:.04em;text-transform:uppercase}
|
|
28
|
+
.ss-more{border:0;background:none;padding:0;color:var(--ss-petrol);font-size:13px;text-decoration:underline}
|
|
29
|
+
.ss-step{display:flex;align-items:baseline;gap:8px;font-size:13px;color:#4a4238;animation:ss-in .25s ease-out}
|
|
30
|
+
.ss-dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--ss-tomato);transform:translateY(-1px)}
|
|
31
|
+
.ss-group .ss-dot{background:#c9b48c}
|
|
32
|
+
.ss-group .ss-label{color:#8a7d68}
|
|
33
|
+
.ss-label{flex:1;min-width:0;overflow-wrap:anywhere}
|
|
34
|
+
.ss-dur{flex:none;font-size:12px;color:#8a7d68;font-variant-numeric:tabular-nums}
|
|
35
|
+
.ss-sheet{flex:none;max-height:72%;overflow-y:auto;background:#fffaf0;border-top:1px solid #e3cf9f;border-radius:20px 20px 0 0;padding:12px 14px calc(12px + env(safe-area-inset-bottom));box-shadow:0 -8px 24px rgba(30,27,25,.12);font-size:13px;animation:ss-up .28s ease-out}
|
|
36
|
+
.ss-tabs{display:flex;gap:6px;overflow-x:auto;margin-bottom:8px;scrollbar-width:none}
|
|
37
|
+
.ss-tab{flex:none;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;border:1px solid #e3cf9f;color:#8a7d68;border-radius:999px;padding:2px 9px}
|
|
38
|
+
.ss-tab.ss-tab-done{background:#e8f1f3;border-color:#bcd5db;color:var(--ss-petrol)}
|
|
39
|
+
.ss-tab.ss-tab-now{background:var(--ss-petrol);border-color:var(--ss-petrol);color:#fff}
|
|
40
|
+
.ss-sheet .ss-q{margin:4px 0 10px;font-size:15px;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
41
|
+
.ss-sheet .ss-opts{display:flex;flex-direction:column;gap:6px}
|
|
42
|
+
.ss-sim .ss-sheet button.ss-opt:disabled{cursor:default}
|
|
43
|
+
.ss-asking{font-size:13px;color:var(--ss-petrol);font-weight:600;animation:ss-blink 1.4s infinite}
|
|
44
|
+
.ss-asked{border-left:3px solid var(--ss-mustard);background:#fff8e8;border-radius:6px;padding:8px 10px;font-size:13px;animation:ss-in .25s ease-out}
|
|
45
|
+
.ss-aq+.ss-aq{margin-top:6px}
|
|
46
|
+
.ss-asked .ss-q{margin:0;color:#4a4238;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
|
|
47
|
+
.ss-asked .ss-a{margin:2px 0 0;font-weight:700;overflow-wrap:anywhere}
|
|
48
|
+
.ss-mine{margin:1px 0 0;color:#a86a00;font-size:12px}
|
|
49
|
+
@keyframes ss-up{from{transform:translateY(30px);opacity:0}to{transform:none;opacity:1}}
|
|
50
|
+
.ss-board{background:#fff;border:1px solid #e3cf9f;border-radius:14px;padding:10px 12px;font-size:13px;box-shadow:0 2px 10px rgba(30,27,25,.06);animation:ss-in .25s ease-out}
|
|
51
|
+
.ss-board .ss-bq+.ss-bq{margin-top:10px;padding-top:10px;border-top:1px dashed #eadcbc}
|
|
52
|
+
.ss-bhead{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:var(--ss-sand);border-radius:999px;padding:1px 8px}
|
|
53
|
+
.ss-board .ss-q{margin:6px 0 8px;font-size:14px;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
54
|
+
.ss-opts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px}
|
|
55
|
+
.ss-opt{display:flex;gap:8px;align-items:flex-start;border:1px solid #eadcbc;border-radius:10px;padding:6px 8px;color:#6b6052}
|
|
56
|
+
.ss-opt b{display:block;font-weight:600;color:var(--ss-ink);overflow-wrap:anywhere}
|
|
57
|
+
.ss-opt small{display:block;color:#8a7d68;overflow-wrap:anywhere}
|
|
58
|
+
.ss-onum{flex:none;width:20px;height:20px;border-radius:50%;background:#f1e6cc;display:grid;place-items:center;font-size:11px;font-weight:700}
|
|
59
|
+
.ss-sim button.ss-opt{width:100%;text-align:left;background:#fff;cursor:pointer;transition:border-color .15s,background .15s}
|
|
60
|
+
.ss-sim button.ss-opt:hover,.ss-sim button.ss-opt:focus-visible{border-color:var(--ss-petrol);background:#f3f8f9;outline:none}
|
|
61
|
+
.ss-live-board{border-color:var(--ss-petrol);box-shadow:0 0 0 3px rgba(38,94,114,.15)}
|
|
62
|
+
.ss-sim .ss-opt.ss-yours,.ss-sim button.ss-opt.ss-yours{border-color:var(--ss-mustard);background:#fff4dc}
|
|
63
|
+
.ss-verdict{min-height:1.4em;margin:8px 0 0;font-size:13px;color:#a86a00}
|
|
64
|
+
.ss-verdict.ss-same{color:var(--ss-petrol);font-weight:600}
|
|
65
|
+
.ss-sim .ss-opt.ss-chosen,.ss-sim button.ss-opt.ss-chosen{border-color:var(--ss-petrol);background:#e8f1f3}
|
|
66
|
+
.ss-opt.ss-chosen .ss-onum{background:var(--ss-petrol);color:#fff}
|
|
67
|
+
.ss-dismissed .ss-opt{opacity:.55}
|
|
68
|
+
.ss-bfoot{display:flex;justify-content:space-between;align-items:baseline;margin-top:8px}
|
|
69
|
+
.ss-decision{border-left:3px solid var(--ss-mustard);background:#fff4dc;padding:8px 10px;border-radius:6px;font-size:13px;animation:ss-in .25s ease-out}
|
|
70
|
+
.ss-decision p{margin:2px 0}
|
|
71
|
+
.ss-tag{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#a86a00}
|
|
72
|
+
.ss-a{font-weight:700}
|
|
73
|
+
.ss-made{align-self:flex-start;font-size:13px;background:#e3f0f0;border-radius:999px;padding:3px 10px;overflow-wrap:anywhere;animation:ss-in .25s ease-out}
|
|
74
|
+
.ss-made span{font-weight:700;color:var(--ss-petrol)}
|
|
75
|
+
.ss-typing{display:flex;gap:4px;padding:4px 2px}
|
|
76
|
+
.ss-typing i{width:6px;height:6px;border-radius:50%;background:#c9b48c;animation:ss-blink 1s infinite}
|
|
77
|
+
.ss-typing i:nth-child(2){animation-delay:.15s}.ss-typing i:nth-child(3){animation-delay:.3s}
|
|
78
|
+
.ss-composer{display:flex;gap:8px;align-items:stretch;padding:10px 12px calc(10px + env(safe-area-inset-bottom));border-top:1px solid #eadcbc;background:#fffaf0}
|
|
79
|
+
.ss-chip{flex:1;min-width:0;text-align:left;border:1px solid var(--ss-petrol);background:#fff;border-radius:16px;padding:8px 12px;display:flex;flex-direction:column;gap:1px;overflow-wrap:anywhere}
|
|
80
|
+
.ss-chip small{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ss-petrol)}
|
|
81
|
+
.ss-chip:disabled{opacity:.55;cursor:default}
|
|
82
|
+
.ss-sim .ss-mic{flex:none;align-self:center;width:48px;height:48px;padding:0;border:0;border-radius:50%;background:var(--ss-tomato);color:#fff;font-size:20px;touch-action:none;-webkit-user-select:none;user-select:none}
|
|
83
|
+
.ss-mic:disabled{opacity:.4}
|
|
84
|
+
.ss-sim .ss-send{flex:none;align-self:center;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:var(--ss-petrol);color:#fff;font-size:20px;font-weight:700}
|
|
85
|
+
.ss-send:disabled{opacity:.35}
|
|
86
|
+
.ss-term .ss-send{background:#5c5751}
|
|
87
|
+
.ss-mic.ss-live{animation:ss-pulse 1s infinite}
|
|
88
|
+
.ss-end{flex:1;display:flex;flex-direction:column;gap:8px}
|
|
89
|
+
.ss-end p{margin:0;font-size:14px}
|
|
90
|
+
.ss-sim .ss-tray-handle{position:absolute;z-index:2;right:12px;bottom:10px;border:0;border-radius:999px;background:var(--ss-ink);color:var(--ss-cream);padding:6px 12px;font-size:13px;display:flex;gap:6px;box-shadow:0 4px 14px rgba(0,0,0,.2)}
|
|
91
|
+
.ss-tray{position:absolute;left:0;right:0;bottom:0;max-height:85%;overflow-y:auto;background:#fffaf0;border-top:1px solid #eadcbc;border-radius:20px 20px 0 0;padding:16px 14px 56px;box-shadow:0 -8px 30px rgba(0,0,0,.15)}
|
|
92
|
+
.ss-panel{display:none}
|
|
93
|
+
.ss-artifact-list{display:flex;flex-direction:column;gap:8px}
|
|
94
|
+
.ss-artifact{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #eadcbc;border-radius:10px;padding:8px 10px;animation:ss-in .3s ease-out}
|
|
95
|
+
.ss-kind{flex:none;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--ss-sand)}
|
|
96
|
+
.ss-kind.ss-link{background:var(--ss-aqua);color:#fff}
|
|
97
|
+
.ss-kind.ss-other{background:var(--ss-tomato);color:#fff}
|
|
98
|
+
.ss-atitle{min-width:0;overflow-wrap:anywhere;font-size:14px}
|
|
99
|
+
.ss-empty{color:#8a7d68;font-size:14px;margin:0}
|
|
100
|
+
.ss-timeline{grid-column:1/-1;padding:4px 2px}
|
|
101
|
+
.ss-track{display:flex;align-items:center;gap:1px;height:12px}
|
|
102
|
+
.ss-seg{height:100%;border-radius:2px;min-width:2px}
|
|
103
|
+
.ss-seg.ss-human{background:var(--ss-petrol)}
|
|
104
|
+
.ss-seg.ss-ask{background:var(--ss-mustard)}
|
|
105
|
+
.ss-seg.ss-agent{background:#efc2b8}
|
|
106
|
+
.ss-seg.ss-agent.ss-past{background:var(--ss-tomato)}
|
|
107
|
+
.ss-seg.ss-now{outline:2px solid var(--ss-ink);outline-offset:1px}
|
|
108
|
+
.ss-legend{display:flex;gap:14px;font-size:12px;color:#7a6d5a;margin-top:6px;flex-wrap:wrap}
|
|
109
|
+
.ss-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
|
|
110
|
+
.ss-legend i.ss-human{background:var(--ss-petrol)}.ss-legend i.ss-ask{background:var(--ss-mustard)}.ss-legend i.ss-agent{background:var(--ss-tomato)}
|
|
111
|
+
.ss-picker{display:flex;flex-direction:column;gap:10px;padding:8px}
|
|
112
|
+
.ss-picker h2{font-family:Fraunces,Georgia,serif;margin:0 0 6px}
|
|
113
|
+
.ss-persona{display:flex;gap:12px;align-items:center;text-align:left;border:1px solid #eadcbc;background:var(--ss-paper);border-radius:14px;padding:12px}
|
|
114
|
+
@container ss-sim (min-width:760px){
|
|
115
|
+
.ss-stage.ss-has-panel{grid-template-columns:minmax(360px,420px) 1fr}
|
|
116
|
+
.ss-has-panel .ss-tray-handle,.ss-has-panel .ss-tray{display:none}
|
|
117
|
+
.ss-panel{display:flex;flex-direction:column;gap:10px;align-self:start;max-height:760px;overflow-y:auto;padding:16px;background:#fffaf0;border:1px solid #eadcbc;border-radius:20px}
|
|
118
|
+
.ss-panel h3{display:flex;justify-content:space-between;margin:0;font-family:Fraunces,Georgia,serif}
|
|
119
|
+
.ss-panel h3 span{font-family:inherit;color:var(--ss-tomato)}
|
|
120
|
+
}
|
|
121
|
+
.ss-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;animation:ss-in .3s ease-out}
|
|
122
|
+
.ss-strip{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;margin:0 0 8px}
|
|
123
|
+
.ss-cmd-wrap .ss-strip{justify-content:flex-end;margin:0}
|
|
124
|
+
.ss-sim .ss-thumb{position:relative;border:0;padding:0;background:#e9dcc0;border-radius:8px;overflow:hidden;aspect-ratio:1;display:block}
|
|
125
|
+
.ss-strip .ss-thumb{flex:none;width:72px}
|
|
126
|
+
.ss-thumb img{width:100%;height:100%;object-fit:cover;display:block}
|
|
127
|
+
.ss-thumb span{position:absolute;left:0;right:0;bottom:0;font-size:10px;line-height:1.2;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.65));padding:10px 5px 4px;text-align:left}
|
|
128
|
+
.ss-sim .ss-lightbox{position:absolute;inset:0;z-index:50;border:0;padding:16px;background:rgba(20,18,16,.92);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}
|
|
129
|
+
.ss-lightbox img{max-width:100%;max-height:80%;border-radius:10px;box-shadow:0 10px 40px rgba(0,0,0,.5)}
|
|
130
|
+
.ss-lightbox span{color:#f6e7c5;font-size:14px}
|
|
131
|
+
.ss-oimg{flex:none;width:52px;height:52px;border-radius:8px;object-fit:cover}
|
|
132
|
+
.ss-aimg{width:28px;height:28px;border-radius:5px;object-fit:cover;vertical-align:middle;margin-right:6px}
|
|
133
|
+
.ss-close-wrap{position:absolute;inset:0;z-index:40;display:flex;align-items:flex-end;justify-content:center;background:rgba(30,27,25,.45);padding:12px;animation:ss-fade .3s ease-out}
|
|
134
|
+
.ss-close{position:relative;overflow:hidden;width:100%;max-width:440px;max-height:100%;overflow-y:auto;background:#fffaf0;border-radius:24px;padding:22px 20px 18px;box-shadow:0 20px 60px rgba(0,0,0,.35);animation:ss-up .4s cubic-bezier(.2,.9,.3,1.2)}
|
|
135
|
+
.ss-burst{position:absolute;left:50%;top:26px;width:0;height:0;pointer-events:none}
|
|
136
|
+
.ss-burst i{position:absolute;width:7px;height:7px;border-radius:2px;background:var(--ss-mustard);transform:rotate(calc(var(--i) * 25.7deg)) translateY(0);animation:ss-pop 1.1s ease-out forwards;opacity:0}
|
|
137
|
+
.ss-burst i:nth-child(3n){background:var(--ss-tomato)}.ss-burst i:nth-child(3n+1){background:var(--ss-aqua)}
|
|
138
|
+
.ss-kicker{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ss-tomato);text-align:center}
|
|
139
|
+
.ss-close h3{font-family:Fraunces,Georgia,serif;font-size:24px;margin:4px 0 14px;text-align:center}
|
|
140
|
+
.ss-split{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
|
|
141
|
+
.ss-split>div{background:#fff;border:1px solid #eadcbc;border-radius:14px;padding:10px;display:flex;flex-direction:column;gap:1px}
|
|
142
|
+
.ss-split>div:first-child{background:var(--ss-ink);border-color:var(--ss-ink);color:var(--ss-cream)}
|
|
143
|
+
.ss-split b{font-size:22px;font-family:Fraunces,Georgia,serif}
|
|
144
|
+
.ss-split>div:first-child b{color:var(--ss-mustard)}
|
|
145
|
+
.ss-split small{font-size:12px;opacity:.8}
|
|
146
|
+
.ss-freed{margin:0 0 10px;padding:10px 12px;border-radius:12px;background:#e8f1f3;color:var(--ss-petrol);font-weight:600;font-size:14px}
|
|
147
|
+
.ss-edge{margin:0 0 10px;padding:10px 12px;border-radius:12px;background:#fff4dc;border:1px solid #f0d89a;font-size:14px}
|
|
148
|
+
.ss-edge b{font-size:18px;color:#a86a00}
|
|
149
|
+
.ss-layers{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
|
|
150
|
+
.ss-layers span{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:#fff;border:1px solid #f0d89a;border-radius:999px;padding:1px 8px}
|
|
151
|
+
.ss-close-made small{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#8a7d68}
|
|
152
|
+
.ss-close-made ul{margin:4px 0 10px;padding-left:18px;font-size:14px}
|
|
153
|
+
.ss-idle{font-size:12px;color:#8a7d68;margin:0 0 12px}
|
|
154
|
+
.ss-close-actions{display:flex;gap:8px}
|
|
155
|
+
.ss-close-actions .ss-chip{text-align:center;font-weight:700;align-items:center}
|
|
156
|
+
.ss-sim .ss-ghost{border-color:#d9c79f;background:transparent}
|
|
157
|
+
@keyframes ss-fade{from{opacity:0}to{opacity:1}}
|
|
158
|
+
@keyframes ss-pop{0%{opacity:1;transform:rotate(calc(var(--i) * 25.7deg)) translateY(0)}100%{opacity:0;transform:rotate(calc(var(--i) * 25.7deg)) translateY(-90px)}}
|
|
159
|
+
@keyframes ss-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
|
|
160
|
+
@keyframes ss-blink{0%,100%{opacity:.3}50%{opacity:1}}
|
|
161
|
+
@keyframes ss-pulse{0%,100%{box-shadow:0 0 0 0 rgba(219,55,31,.5)}50%{box-shadow:0 0 0 10px rgba(219,55,31,0)}}
|
|
162
|
+
/* Device framing (device.mjs). The bar sits outside the device: what is simulated, and the switch. */
|
|
163
|
+
.ss-devicebar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 2px 8px;min-height:26px;font-size:12px;color:#7a6d5a}
|
|
164
|
+
.ss-simlabel{letter-spacing:.02em}
|
|
165
|
+
.ss-simpill{background:var(--ss-ink);color:var(--ss-cream);border-radius:999px;padding:3px 10px;font-weight:600;white-space:nowrap}
|
|
166
|
+
.ss-devswitch{display:inline-flex;border:1px solid #e3cf9f;border-radius:999px;padding:2px;background:#fffaf0}
|
|
167
|
+
.ss-sim .ss-devopt{border:0;background:none;border-radius:999px;padding:2px 9px;font-size:12px;color:#7a6d5a;line-height:18px}
|
|
168
|
+
.ss-sim .ss-devopt[aria-checked="true"]{background:var(--ss-petrol);color:#fff}
|
|
169
|
+
.ss-sim .ss-devopt:focus-visible{outline:2px solid var(--ss-petrol);outline-offset:1px}
|
|
170
|
+
.ss-frame-iphone,.ss-frame-macbook{justify-items:center}
|
|
171
|
+
/* The iPhone: drawn in CSS, sized from the height it is given and never wider than its column. */
|
|
172
|
+
.ss-iphone{--ss-dh:var(--ss-height,min(820px,calc(100svh - 110px)));position:relative;height:min(var(--ss-dh),calc(100cqw * 2.09));aspect-ratio:414/868;max-width:100%;container-type:size;padding:2.9%;background:#121212;border-radius:13.5%/6.45%;box-shadow:0 0 0 1.5px #3b3b3d,0 0 0 4px #1b1b1c,0 24px 60px rgba(30,27,25,.28)}
|
|
173
|
+
.ss-iphone>.ss-phone{height:100%;min-height:0;border:0;border-radius:11cqw;box-shadow:none}
|
|
174
|
+
.ss-btn{position:absolute;width:3px;background:#2b2b2d;border-radius:2px}
|
|
175
|
+
.ss-btn-a{left:-5px;top:16%;height:3.6%}.ss-btn-v1{left:-5px;top:23%;height:7%}.ss-btn-v2{left:-5px;top:31.5%;height:7%}.ss-btn-p{right:-5px;top:26%;height:10.5%}
|
|
176
|
+
.ss-status{flex:none;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;height:12.5cqw;padding:0 6.5cqw;background:#fffaf0;font-weight:600;font-size:4.1cqw;color:var(--ss-ink)}
|
|
177
|
+
.ss-island{width:31cqw;height:9.2cqw;border-radius:999px;background:#000}
|
|
178
|
+
.ss-status-icons{justify-self:end;display:flex;gap:1.6cqw;align-items:center}
|
|
179
|
+
.ss-status-icons svg{height:3.2cqw;width:auto;fill:currentColor}
|
|
180
|
+
.ss-frame-iphone .ss-head{padding-top:4px}
|
|
181
|
+
/* The MacBook: lid, screen with a menu bar and a Claude Code window, base. Fluid: the window
|
|
182
|
+
reflows at the width it gets rather than shrinking text. */
|
|
183
|
+
.ss-mac{--ss-dh:var(--ss-height,min(820px,calc(100svh - 110px)));width:min(92%,calc((var(--ss-dh) - 16px) * 1.54));margin:0 auto}
|
|
184
|
+
.ss-mac-lid{position:relative;aspect-ratio:1.54;padding:1.6% 1.6% 2.4%;background:#0e0e10;border-radius:18px 18px 8px 8px;box-shadow:0 0 0 1.5px #3c3c40,0 24px 60px rgba(30,27,25,.25)}
|
|
185
|
+
.ss-mac-screen{position:relative;height:100%;display:flex;flex-direction:column;overflow:hidden;border-radius:6px;background:linear-gradient(140deg,#265E72 0%,#69B1B5 42%,#EED79E 72%,#E9A23B 88%,#DB371F 100%)}
|
|
186
|
+
.ss-mac-notch{position:absolute;z-index:2;left:50%;top:0;width:11%;height:22px;transform:translateX(-50%);background:#0e0e10;border-radius:0 0 7px 7px}
|
|
187
|
+
.ss-menubar{flex:none;display:flex;align-items:center;gap:14px;height:24px;padding:0 12px;overflow:hidden;white-space:nowrap;font:12px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;color:#1e1b19;background:rgba(251,245,231,.78);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
|
|
188
|
+
.ss-menu-mark{width:11px;height:11px;border-radius:50%;background:var(--ss-ink)}
|
|
189
|
+
.ss-menu-right{margin-left:auto;display:flex;align-items:center;gap:10px;font-variant-numeric:tabular-nums}
|
|
190
|
+
.ss-menu-right svg{fill:currentColor}
|
|
191
|
+
.ss-mac-base{position:relative;width:108%;margin-left:-4%;height:16px;background:linear-gradient(#e4e4e8,#b4b4ba 70%,#8e8e95);border-radius:0 0 50% 50%/0 0 14px 14px}
|
|
192
|
+
.ss-mac-base::before{content:"";position:absolute;left:50%;top:0;width:15%;height:6px;transform:translateX(-50%);background:#a2a2a8;border-radius:0 0 8px 8px}
|
|
193
|
+
.ss-window{container:ss-sim/inline-size;display:flex;flex-direction:column;overflow:hidden;border-radius:10px;background:#1a1918;border:1px solid rgba(0,0,0,.55);box-shadow:0 18px 50px rgba(0,0,0,.4)}
|
|
194
|
+
.ss-mac-screen>.ss-window{flex:1;min-height:0;margin:3% 3.5% 3.5%}
|
|
195
|
+
.ss-titlebar{flex:none;display:flex;align-items:center;gap:10px;height:28px;padding:0 10px;background:#2b2927;border-bottom:1px solid #111;color:#bdb6ab;font:12px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif}
|
|
196
|
+
.ss-traffic{display:flex;gap:7px}
|
|
197
|
+
.ss-traffic i{width:11px;height:11px;border-radius:50%;background:#ff5f57}
|
|
198
|
+
.ss-traffic i:nth-child(2){background:#febc2e}.ss-traffic i:nth-child(3){background:#28c840}
|
|
199
|
+
.ss-wtitle{flex:1;text-align:center;font-weight:600;margin-right:50px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
200
|
+
.ss-in-window{flex:1;min-height:0;gap:0;grid-template-rows:minmax(0,1fr)}
|
|
201
|
+
.ss-in-window>.ss-phone{height:100%;min-height:0;border:0;border-radius:0;box-shadow:none}
|
|
202
|
+
@container ss-sim (min-width:760px){
|
|
203
|
+
.ss-in-window.ss-has-panel{grid-template-columns:minmax(0,1fr) minmax(220px,32%)}
|
|
204
|
+
.ss-in-window .ss-panel{max-height:none;height:100%;border-radius:0;border-width:0 0 0 1px;background:#201e1c;border-color:#33302d;color:#e6e1d9}
|
|
205
|
+
}
|
|
206
|
+
/* Too narrow for a believable laptop (a book column, a sidebar): the MacBook keeps its window
|
|
207
|
+
and its label and drops the lid, menu bar and base, rather than shrinking into a toy. */
|
|
208
|
+
@container ss-sim (max-width:559px){
|
|
209
|
+
.ss-mac{width:100%}
|
|
210
|
+
.ss-mac-lid{aspect-ratio:auto;height:var(--ss-dh);padding:0;background:none;box-shadow:none;border-radius:0}
|
|
211
|
+
.ss-mac-screen{background:none;border-radius:0;overflow:visible}
|
|
212
|
+
.ss-menubar,.ss-mac-notch,.ss-mac-base{display:none}
|
|
213
|
+
.ss-mac-screen>.ss-window{margin:0}
|
|
214
|
+
}
|
|
215
|
+
.ss-window-compact{width:100%}
|
|
216
|
+
.ss-window-compact>.ss-phone{height:calc(var(--ss-height,min(760px,calc(100svh - 120px))) - 28px);border:0;border-radius:0;box-shadow:none}
|
|
217
|
+
/* Claude Code's terminal, inside either MacBook window. */
|
|
218
|
+
.ss-term .ss-phone{background:#1a1918;color:#e6e1d9;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
|
|
219
|
+
.ss-term .ss-head{background:#232120;border-bottom-color:#33302d}
|
|
220
|
+
.ss-term .ss-titles b{font-family:inherit;font-size:13px;color:#e6e1d9}
|
|
221
|
+
.ss-term .ss-titles small,.ss-term .ss-auto,.ss-term .ss-intro,.ss-term .ss-dur,.ss-term .ss-empty,.ss-term .ss-group .ss-label,.ss-term .ss-opt small{color:#8f887d}
|
|
222
|
+
.ss-term .ss-avatar{background:#d97757;color:#1a1918;border-radius:6px}
|
|
223
|
+
.ss-term .ss-counter{background:#0f0e0d;color:#cfc8bd}
|
|
224
|
+
.ss-term .ss-counter b{color:#d97757}
|
|
225
|
+
.ss-term .ss-cmd-wrap{align-items:stretch}
|
|
226
|
+
.ss-term .ss-cmd{max-width:none;background:#2a2826;color:#e6e1d9;border-radius:4px;border-left:2px solid #8f887d;padding:6px 10px}
|
|
227
|
+
.ss-term .ss-cmd::before{content:"> ";color:#8f887d}
|
|
228
|
+
.ss-term .ss-who,.ss-term .ss-more,.ss-term .ss-asking{color:#d97757}
|
|
229
|
+
.ss-term .ss-reply p{color:#e6e1d9}
|
|
230
|
+
.ss-term .ss-step{color:#bdb6ab}
|
|
231
|
+
.ss-term .ss-dot{background:#7fb069}
|
|
232
|
+
.ss-term .ss-group .ss-dot{background:#5c5751}
|
|
233
|
+
.ss-term .ss-asked{background:#2a2622;border-left-color:#d9a441}
|
|
234
|
+
.ss-term .ss-asked .ss-q{color:#bdb6ab}
|
|
235
|
+
.ss-term .ss-mine,.ss-term .ss-tag,.ss-term .ss-verdict{color:#d9a441}
|
|
236
|
+
.ss-term .ss-verdict.ss-same{color:#69b1b5}
|
|
237
|
+
.ss-term .ss-bhead{background:#3a3633;color:#e6e1d9}
|
|
238
|
+
.ss-term .ss-made{background:#22302c;color:#cfe3dc}
|
|
239
|
+
.ss-term .ss-made span{color:#7fc4b0}
|
|
240
|
+
.ss-term .ss-typing i{background:#5c5751}
|
|
241
|
+
.ss-term .ss-composer{background:#1a1918;border-top-color:#33302d}
|
|
242
|
+
.ss-term .ss-chip{background:#1a1918;border-color:#5c5751;border-radius:8px;color:#e6e1d9}
|
|
243
|
+
.ss-term .ss-chip small{color:#d97757}
|
|
244
|
+
.ss-term .ss-mic{background:#d97757}
|
|
245
|
+
.ss-term .ss-sheet{background:#232120;border-top-color:#3a3633;color:#e6e1d9}
|
|
246
|
+
.ss-term .ss-tab{border-color:#3a3633;color:#8f887d}
|
|
247
|
+
.ss-term .ss-tab.ss-tab-done{background:#24343a;border-color:#3e5a63;color:#9cc7d3}
|
|
248
|
+
.ss-term .ss-tab.ss-tab-now{background:#d97757;border-color:#d97757;color:#1a1918}
|
|
249
|
+
.ss-sim .ss-term button.ss-opt{background:#1a1918;border-color:#3a3633;color:#bdb6ab}
|
|
250
|
+
.ss-term .ss-opt b{color:#e6e1d9}
|
|
251
|
+
.ss-term .ss-onum{background:#33302d;color:#e6e1d9}
|
|
252
|
+
.ss-sim .ss-term button.ss-opt:hover,.ss-sim .ss-term button.ss-opt:focus-visible{background:#2a2826;border-color:#d97757}
|
|
253
|
+
.ss-sim .ss-term button.ss-opt.ss-chosen{background:#24343a;border-color:#69b1b5}
|
|
254
|
+
.ss-sim .ss-term button.ss-opt.ss-yours{background:#3a2f1e;border-color:#d9a441}
|
|
255
|
+
.ss-sim .ss-term .ss-tray-handle{background:#e6e1d9;color:#1a1918}
|
|
256
|
+
.ss-term .ss-tray{background:#232120;border-top-color:#3a3633}
|
|
257
|
+
.ss-term .ss-artifact{background:#232120;border-color:#3a3633;color:#e6e1d9}
|
|
258
|
+
.ss-term .ss-panel h3{font-family:inherit;font-size:14px}
|
|
259
|
+
.ss-start{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:18px;background:rgba(251,245,231,.82);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
|
|
260
|
+
.ss-startcard{display:flex;flex-direction:column;align-items:center;gap:8px;max-width:300px;text-align:center}
|
|
261
|
+
.ss-starttitle{font-family:Fraunces,Georgia,serif;font-size:20px;line-height:1.25}
|
|
262
|
+
.ss-startcard p{margin:0;color:#4a4238;font-size:14px}
|
|
263
|
+
.ss-startcard small{color:#7a6d5a;font-size:12px}
|
|
264
|
+
.ss-sim .ss-startbtn{margin-top:6px;border:0;border-radius:999px;background:var(--ss-tomato);color:#fff;font-weight:700;font-size:16px;padding:12px 26px;box-shadow:0 6px 18px rgba(219,55,31,.3)}
|
|
265
|
+
.ss-sim .ss-startbtn:focus-visible{outline:3px solid var(--ss-petrol);outline-offset:2px}
|
|
266
|
+
.ss-startauto{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600}
|
|
267
|
+
.ss-term .ss-start{background:rgba(26,25,24,.86)}
|
|
268
|
+
.ss-term .ss-startcard p{color:#cfc8bd}.ss-term .ss-startcard small{color:#8f887d}.ss-term .ss-starttitle,.ss-term .ss-startauto{color:#e6e1d9}
|
|
269
|
+
.ss-term .ss-startbtn{background:#d97757}
|
|
270
|
+
.ss-devhint{font-size:inherit;opacity:.85}
|
|
271
|
+
/* Toasts float over the top of the demo: no layout shift, gone after a few seconds. */
|
|
272
|
+
.ss-toast{position:absolute;z-index:60;left:50%;top:40px;transform:translateX(-50%);width:max-content;max-width:min(92%,420px);pointer-events:none}
|
|
273
|
+
.ss-toast span{display:block;background:var(--ss-ink);color:var(--ss-cream);font-size:13px;line-height:1.35;border-radius:12px;padding:8px 12px;box-shadow:0 8px 24px rgba(0,0,0,.25);text-align:center;animation:ss-toast 3.2s ease forwards}
|
|
274
|
+
@keyframes ss-toast{0%{opacity:0;transform:translateY(-4px)}8%,85%{opacity:1;transform:none}100%{opacity:0}}
|
|
275
|
+
@media (prefers-reduced-motion:reduce){.ss-sim *{animation:none!important;transition:none!important}}
|
|
276
|
+
`;
|