asdfasdfqrqwer commited on
Commit
94bd375
·
1 Parent(s): db121cf

Publish UniversalLabeler semantic packet explorer

Browse files
Files changed (2) hide show
  1. README.md +11 -5
  2. index.html +513 -17
README.md CHANGED
@@ -1,10 +1,16 @@
1
  ---
2
- title: UniversalLabeler Explorer
3
- emoji: 🔥
4
- colorFrom: purple
5
- colorTo: indigo
6
  sdk: static
 
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
1
  ---
2
+ title: UniversalLabeler — Meaning, packed.
3
+ colorFrom: gray
4
+ colorTo: red
 
5
  sdk: static
6
+ app_file: index.html
7
  pinned: false
8
+ license: apache-2.0
9
+ short_description: See grounded meaning move across five languages.
10
  ---
11
 
12
+ # UniversalLabeler explorer
13
+
14
+ Interactive visual companion to the
15
+ [`itspublu/UniversalLabeler`](https://huggingface.co/datasets/itspublu/UniversalLabeler)
16
+ data and schema release.
index.html CHANGED
@@ -1,19 +1,515 @@
1
  <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
  <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="description" content="An interactive view of UniversalLabeler: language surfaces compress into evidence-linked semantic claims, then expand without discarding world information.">
7
+ <title>UniversalLabeler Meaning, packed.</title>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Bodoni+Moda:opsz,wght@6..96,400;6..96,600&amp;family=DM+Mono:wght@300;400;500&amp;display=swap" rel="stylesheet">
11
+ <style>
12
+ :root {
13
+ --paper: #efede5;
14
+ --paper-deep: #dfdcd1;
15
+ --ink: #161613;
16
+ --muted: #727066;
17
+ --signal: #ef4c2f;
18
+ --signal-soft: #ffc4ad;
19
+ --line: rgba(22, 22, 19, .22);
20
+ --line-strong: rgba(22, 22, 19, .72);
21
+ --serif: "Bodoni Moda", "Iowan Old Style", "Times New Roman", serif;
22
+ --mono: "DM Mono", "SFMono-Regular", Consolas, monospace;
23
+ }
24
+
25
+ * { box-sizing: border-box; }
26
+ html { scroll-behavior: smooth; }
27
+ body {
28
+ margin: 0;
29
+ color: var(--ink);
30
+ background:
31
+ linear-gradient(90deg, transparent calc(50% - .5px), rgba(22,22,19,.05) 50%, transparent calc(50% + .5px)),
32
+ var(--paper);
33
+ font-family: var(--mono);
34
+ overflow-x: hidden;
35
+ }
36
+ body::before {
37
+ content: "";
38
+ position: fixed;
39
+ inset: 0;
40
+ opacity: .08;
41
+ pointer-events: none;
42
+ z-index: 20;
43
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.45'/%3E%3C/svg%3E");
44
+ mix-blend-mode: multiply;
45
+ }
46
+ button, a { font: inherit; }
47
+ button { color: inherit; }
48
+ ::selection { background: var(--signal); color: var(--paper); }
49
+
50
+ .shell { width: min(1600px, 100%); margin: 0 auto; padding: 0 28px; }
51
+ .topbar {
52
+ height: 72px;
53
+ border-bottom: 1px solid var(--line-strong);
54
+ display: grid;
55
+ grid-template-columns: 1fr auto 1fr;
56
+ align-items: center;
57
+ position: relative;
58
+ z-index: 5;
59
+ }
60
+ .mark { display: flex; align-items: center; gap: 12px; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; }
61
+ .mark-glyph { width: 28px; height: 28px; border: 1px solid var(--ink); display: grid; place-items: center; font-weight: 500; }
62
+ .top-center { font-size: 10px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
63
+ .top-right { justify-self: end; display: flex; align-items: center; gap: 18px; font-size: 10px; text-transform: uppercase; letter-spacing: .12em; }
64
+ .status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 4px rgba(239,76,47,.14); animation: breathe 2s infinite; }
65
+
66
+ .hero {
67
+ min-height: calc(100vh - 72px);
68
+ display: grid;
69
+ grid-template-rows: auto 1fr auto;
70
+ padding-top: 44px;
71
+ padding-bottom: 24px;
72
+ }
73
+ .hero-heading {
74
+ display: grid;
75
+ grid-template-columns: 1.25fr .75fr;
76
+ align-items: end;
77
+ gap: 40px;
78
+ margin-bottom: 40px;
79
+ }
80
+ h1 { margin: 0; font: 400 clamp(52px, 7vw, 118px)/.82 var(--serif); letter-spacing: -.055em; max-width: 980px; }
81
+ h1 em { color: var(--signal); font-style: italic; }
82
+ .lede { margin: 0 0 6px auto; max-width: 440px; font-size: 12px; line-height: 1.75; color: var(--muted); }
83
+ .lede strong { color: var(--ink); font-weight: 500; }
84
+
85
+ .machine {
86
+ min-height: 470px;
87
+ border-top: 1px solid var(--line-strong);
88
+ border-bottom: 1px solid var(--line-strong);
89
+ display: grid;
90
+ grid-template-columns: minmax(260px, .85fr) minmax(360px, 1.15fr) minmax(320px, 1fr);
91
+ position: relative;
92
+ isolation: isolate;
93
+ }
94
+ .machine::after {
95
+ content: "";
96
+ position: absolute;
97
+ inset: 0;
98
+ background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
99
+ background-size: 44px 44px;
100
+ opacity: .2;
101
+ pointer-events: none;
102
+ z-index: -1;
103
+ }
104
+ .panel { padding: 22px; min-width: 0; position: relative; }
105
+ .panel + .panel { border-left: 1px solid var(--line-strong); }
106
+ .panel-label { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; font-size: 10px; letter-spacing: .16em; text-transform: uppercase; }
107
+ .panel-label span:last-child { color: var(--muted); }
108
+
109
+ .source-panel { display: flex; flex-direction: column; }
110
+ .evidence-window {
111
+ background: var(--ink);
112
+ color: var(--paper);
113
+ min-height: 220px;
114
+ position: relative;
115
+ overflow: hidden;
116
+ padding: 16px;
117
+ display: flex;
118
+ align-items: end;
119
+ }
120
+ .evidence-window::before {
121
+ content: "";
122
+ position: absolute;
123
+ width: 260px;
124
+ height: 260px;
125
+ border: 1px solid rgba(239,237,229,.2);
126
+ border-radius: 50%;
127
+ top: -122px;
128
+ right: -82px;
129
+ box-shadow: 0 0 0 34px rgba(239,237,229,.03), 0 0 0 68px rgba(239,237,229,.03);
130
+ }
131
+ .scene-glyph { position: absolute; inset: 0; }
132
+ .surface-line { position: relative; z-index: 2; font: 400 clamp(23px, 2.3vw, 38px)/1.05 var(--serif); max-width: 90%; }
133
+ .surface-line span { transition: color .35s, background .35s; }
134
+ .surface-line .hot { color: var(--signal-soft); }
135
+ .framecode { position: absolute; top: 14px; left: 16px; color: rgba(239,237,229,.48); font-size: 9px; letter-spacing: .12em; }
136
+ .scope-line { position: absolute; bottom: 0; left: 0; height: 3px; width: 100%; background: rgba(239,237,229,.16); }
137
+ .scope-line::after { content: ""; display: block; height: 100%; width: var(--progress, 0%); background: var(--signal); transition: width .8s ease; }
138
+ .evidence-meta { margin-top: auto; padding-top: 20px; display: grid; gap: 9px; font-size: 10px; }
139
+ .meta-row { display: flex; justify-content: space-between; border-bottom: 1px solid var(--line); padding-bottom: 8px; }
140
+ .meta-row span:last-child { color: var(--muted); text-align: right; }
141
+
142
+ .core-panel { overflow: hidden; }
143
+ .core-stage { height: 355px; position: relative; display: grid; place-items: center; }
144
+ .orbit { position: absolute; border: 1px solid var(--line); border-radius: 50%; animation: turn 22s linear infinite; }
145
+ .orbit.one { width: 326px; height: 326px; }
146
+ .orbit.two { width: 250px; height: 250px; animation-duration: 15s; animation-direction: reverse; border-style: dashed; }
147
+ .orbit::before, .orbit::after { content: ""; position: absolute; width: 8px; height: 8px; background: var(--signal); border-radius: 50%; }
148
+ .orbit::before { left: 50%; top: -4px; }
149
+ .orbit::after { left: 50%; bottom: -4px; background: var(--ink); }
150
+ .core {
151
+ width: 178px;
152
+ height: 178px;
153
+ border-radius: 50%;
154
+ background: var(--ink);
155
+ color: var(--paper);
156
+ position: relative;
157
+ display: grid;
158
+ place-items: center;
159
+ text-align: center;
160
+ box-shadow: 0 0 0 12px var(--paper), 0 0 0 13px var(--ink);
161
+ z-index: 3;
162
+ }
163
+ .core::before { content: ""; position: absolute; inset: 16px; border: 1px dashed rgba(239,237,229,.34); border-radius: 50%; animation: turn 12s linear infinite; }
164
+ .core-copy { position: relative; }
165
+ .core-kicker { font-size: 9px; letter-spacing: .18em; color: var(--signal-soft); }
166
+ .core-name { display: block; margin: 9px 0 5px; font: 400 25px/1 var(--serif); }
167
+ .core-count { font-size: 9px; letter-spacing: .08em; color: rgba(239,237,229,.6); }
168
+ .claim-node { position: absolute; font-size: 8px; letter-spacing: .08em; text-transform: uppercase; background: var(--paper); border: 1px solid var(--ink); padding: 5px 7px; z-index: 4; transition: transform .3s, background .3s, color .3s; }
169
+ .claim-node.active { background: var(--signal); color: var(--paper); transform: scale(1.08); }
170
+ .n1{top:14px;left:19%}.n2{top:49px;right:6%}.n3{top:139px;right:0}.n4{bottom:58px;right:8%}.n5{bottom:8px;right:29%}.n6{bottom:18px;left:14%}.n7{bottom:92px;left:0}.n8{top:117px;left:0}.n9{top:45px;left:5%}
171
+ .compression-meter { position: absolute; inset: auto 0 0; display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid var(--line); }
172
+ .metric { padding: 11px; border-right: 1px solid var(--line); }
173
+ .metric:last-child { border: 0; }
174
+ .metric b { display: block; font: 400 22px/1 var(--serif); }
175
+ .metric span { font-size: 8px; color: var(--muted); letter-spacing: .1em; text-transform: uppercase; }
176
+
177
+ .outputs { display: flex; flex-direction: column; gap: 0; }
178
+ .output {
179
+ appearance: none;
180
+ border: 0;
181
+ border-top: 1px solid var(--line);
182
+ background: transparent;
183
+ padding: 14px 0;
184
+ display: grid;
185
+ grid-template-columns: 58px 1fr 20px;
186
+ align-items: baseline;
187
+ gap: 10px;
188
+ text-align: left;
189
+ cursor: pointer;
190
+ transition: padding .25s, color .25s;
191
+ }
192
+ .output:first-child { border-top: 0; }
193
+ .output:hover, .output.active { padding-left: 10px; color: var(--signal); }
194
+ .output-code { font-size: 9px; color: var(--muted); text-transform: uppercase; }
195
+ .output-text { font: 400 clamp(17px, 1.45vw, 24px)/1.15 var(--serif); }
196
+ .output-check { font-size: 11px; opacity: .3; }
197
+ .output.active .output-check { opacity: 1; }
198
+ .ledger { margin-top: auto; background: var(--paper-deep); padding: 13px; font-size: 9px; line-height: 1.8; }
199
+ .ledger-line { display: flex; justify-content: space-between; }
200
+ .ledger-line b { font-weight: 400; color: var(--signal); }
201
+
202
+ .scenario-strip { display: grid; grid-template-columns: auto repeat(4, 1fr) auto; align-items: stretch; min-height: 66px; }
203
+ .strip-label { padding: 0 18px 0 0; display: flex; align-items: center; font-size: 9px; text-transform: uppercase; letter-spacing: .15em; }
204
+ .scenario {
205
+ appearance: none; background: transparent; border: 0; border-left: 1px solid var(--line); padding: 12px 16px; text-align: left; cursor: pointer; position: relative;
206
+ }
207
+ .scenario::after { content: ""; position: absolute; left: 0; right: 100%; bottom: 0; height: 3px; background: var(--signal); transition: right .35s; }
208
+ .scenario.active::after { right: 0; }
209
+ .scenario-num { display: block; color: var(--muted); font-size: 8px; margin-bottom: 5px; }
210
+ .scenario-name { font: 400 15px/1 var(--serif); }
211
+ .pause { appearance: none; border: 0; border-left: 1px solid var(--line); background: transparent; width: 58px; cursor: pointer; font-size: 15px; }
212
+
213
+ .particle { position: fixed; z-index: 30; pointer-events: none; background: var(--signal); color: var(--paper); font-size: 8px; padding: 4px 7px; border-radius: 12px; white-space: nowrap; transition: transform .72s cubic-bezier(.7,0,.25,1), opacity .2s .55s; }
214
+
215
+ .thesis { padding: 108px 0 90px; display: grid; grid-template-columns: .8fr 1.2fr; gap: 8vw; border-bottom: 1px solid var(--line-strong); }
216
+ .thesis-index { font-size: 10px; letter-spacing: .15em; text-transform: uppercase; color: var(--muted); }
217
+ .thesis h2 { font: 400 clamp(42px, 5vw, 82px)/.94 var(--serif); letter-spacing: -.04em; margin: 0; }
218
+ .thesis h2 em { color: var(--signal); }
219
+ .thesis-copy { display: grid; grid-template-columns: 1fr 1fr; gap: 34px; margin-top: 54px; font-size: 11px; line-height: 1.8; color: var(--muted); }
220
+ .thesis-copy strong { color: var(--ink); font-weight: 500; }
221
+
222
+ .packet-section { padding: 72px 0 100px; }
223
+ .section-head { display: flex; justify-content: space-between; align-items: end; border-bottom: 1px solid var(--line-strong); padding-bottom: 18px; }
224
+ .section-head h2 { margin: 0; font: 400 clamp(38px,4vw,64px)/1 var(--serif); letter-spacing: -.035em; }
225
+ .section-head p { max-width: 440px; font-size: 10px; line-height: 1.7; color: var(--muted); margin: 0; }
226
+ .packet-table { display: grid; }
227
+ .packet-row { display: grid; grid-template-columns: 42px 180px 1fr 95px; gap: 18px; align-items: center; min-height: 64px; border-bottom: 1px solid var(--line); transition: background .2s; }
228
+ .packet-row:hover { background: rgba(255,255,255,.22); }
229
+ .packet-row .idx { color: var(--muted); font-size: 9px; }
230
+ .packet-row .field { text-transform: uppercase; font-size: 9px; letter-spacing: .12em; }
231
+ .packet-row .value { font: 400 19px/1.2 var(--serif); }
232
+ .packet-row .state { justify-self: end; font-size: 8px; text-transform: uppercase; letter-spacing: .1em; color: var(--signal); }
233
+
234
+ footer { background: var(--ink); color: var(--paper); padding: 28px; }
235
+ .footer-inner { width: min(1544px,100%); margin: auto; display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 30px; }
236
+ .footer-title { font: 400 clamp(38px,6vw,92px)/.86 var(--serif); letter-spacing: -.045em; }
237
+ .footer-meta { text-align: right; font-size: 9px; line-height: 1.9; color: rgba(239,237,229,.56); }
238
+ .footer-meta a { color: var(--paper); text-decoration-color: var(--signal); text-underline-offset: 4px; }
239
+
240
+ @keyframes turn { to { transform: rotate(360deg); } }
241
+ @keyframes breathe { 50% { opacity: .35; transform: scale(.8); } }
242
+ @keyframes scan { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
243
+
244
+ @media (max-width: 1050px) {
245
+ .hero-heading { grid-template-columns: 1fr; }
246
+ .lede { margin-left: 0; }
247
+ .machine { grid-template-columns: 1fr 1.25fr; }
248
+ .source-panel { display: none; }
249
+ .core-panel { border-left: 0 !important; }
250
+ .scenario-strip { grid-template-columns: repeat(4,1fr) auto; }
251
+ .strip-label { display: none; }
252
+ }
253
+ @media (max-width: 700px) {
254
+ .shell { padding: 0 16px; }
255
+ .topbar { grid-template-columns: 1fr auto; height: 62px; }
256
+ .top-center { display: none; }
257
+ .top-right span:not(.status-dot) { display: none; }
258
+ .hero { padding-top: 30px; }
259
+ h1 { font-size: clamp(48px,16vw,74px); }
260
+ .machine { display: block; }
261
+ .core-panel { height: 430px; border-bottom: 1px solid var(--line-strong); }
262
+ .outputs-panel { min-height: 420px; border-left: 0 !important; }
263
+ .scenario-strip { grid-template-columns: 1fr 1fr; }
264
+ .scenario { border-bottom: 1px solid var(--line); }
265
+ .pause { position: absolute; top: 14px; right: 16px; border: 1px solid var(--line); width: 36px; height: 30px; z-index: 8; }
266
+ .thesis { grid-template-columns: 1fr; padding: 72px 0; }
267
+ .thesis-copy { grid-template-columns: 1fr; margin-top: 34px; }
268
+ .section-head { display: block; }
269
+ .section-head p { margin-top: 20px; }
270
+ .packet-row { grid-template-columns: 28px 100px 1fr; gap: 8px; }
271
+ .packet-row .state { display: none; }
272
+ .packet-row .value { font-size: 16px; }
273
+ .footer-inner { grid-template-columns: 1fr; }
274
+ .footer-meta { text-align: left; }
275
+ }
276
+ @media (prefers-reduced-motion: reduce) {
277
+ *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; }
278
+ .particle { display: none; }
279
+ }
280
+ </style>
281
+ </head>
282
+ <body>
283
+ <header class="shell topbar">
284
+ <div class="mark"><span class="mark-glyph">U</span><span>UniversalLabeler</span></div>
285
+ <div class="top-center">Loss-resistant annotation translation</div>
286
+ <div class="top-right"><span class="status-dot" aria-hidden="true"></span><span>v1.0.1 / Public spec</span></div>
287
+ </header>
288
+
289
+ <main>
290
+ <section class="shell hero" aria-labelledby="hero-title">
291
+ <div class="hero-heading">
292
+ <h1 id="hero-title">Language changes.<br>The <em>event</em> does not.</h1>
293
+ <p class="lede"><strong>Pack the world, not just the sentence.</strong> UniversalLabeler turns an annotation into addressable claims—action, actors, hands, objects, state, place, time, outcome and evidence—then renders each language from the same packet.</p>
294
+ </div>
295
+
296
+ <div class="machine" id="machine">
297
+ <section class="panel source-panel" aria-label="Source evidence">
298
+ <div class="panel-label"><span>01 / Observe</span><span id="source-locale">EN source</span></div>
299
+ <div class="evidence-window">
300
+ <div class="framecode" id="framecode">FRAME 01:00:01.000—01:00:08.000</div>
301
+ <svg class="scene-glyph" viewBox="0 0 420 260" aria-hidden="true">
302
+ <g fill="none" stroke="rgba(239,237,229,.28)" stroke-width="1.4">
303
+ <path d="M38 190H382M94 190v42M330 190v42"/>
304
+ <path id="object-shape" d="M145 154 Q210 126 275 154 L260 182H157Z"/>
305
+ <path d="M45 94Q93 105 142 151M375 92Q328 106 276 151"/>
306
+ <circle cx="45" cy="94" r="9"/><circle cx="375" cy="92" r="9"/>
307
+ </g>
308
+ <g fill="#ef4c2f"><circle cx="142" cy="151" r="4"/><circle cx="276" cy="151" r="4"/></g>
309
+ <text x="51" y="86" fill="rgba(239,237,229,.58)" font-family="monospace" font-size="8">LEFT / STABILIZE</text>
310
+ <text x="283" y="84" fill="rgba(239,237,229,.58)" font-family="monospace" font-size="8">RIGHT / ACT</text>
311
+ </svg>
312
+ <div class="surface-line" id="source-text">Fold the <span class="hot">towel</span> on the table with both hands.</div>
313
+ <div class="scope-line" id="scope-line"></div>
314
+ </div>
315
+ <div class="evidence-meta">
316
+ <div class="meta-row"><span>EVIDENCE</span><span>head_video · hand_pose</span></div>
317
+ <div class="meta-row"><span>ENVIRONMENT</span><span id="environment">indoor · laundry area</span></div>
318
+ <div class="meta-row"><span>TIME SCOPE</span><span id="time-scope">7.00 s · episode_clock</span></div>
319
+ <div class="meta-row"><span>PROVENANCE</span><span>source-bound · reviewed</span></div>
320
+ </div>
321
+ </section>
322
+
323
+ <section class="panel core-panel" aria-label="Semantic packet">
324
+ <div class="panel-label"><span>02 / Pack</span><span>UAP core v1</span></div>
325
+ <div class="core-stage">
326
+ <div class="orbit one"></div><div class="orbit two"></div>
327
+ <span class="claim-node n1" data-claim="action">action</span>
328
+ <span class="claim-node n2" data-claim="patient">object</span>
329
+ <span class="claim-node n3" data-claim="hands">hands</span>
330
+ <span class="claim-node n4" data-claim="state">state Δ</span>
331
+ <span class="claim-node n5" data-claim="outcome">outcome</span>
332
+ <span class="claim-node n6" data-claim="evidence">evidence</span>
333
+ <span class="claim-node n7" data-claim="time">time</span>
334
+ <span class="claim-node n8" data-claim="place">place</span>
335
+ <span class="claim-node n9" data-claim="roles">roles</span>
336
+ <div class="core" id="core">
337
+ <div class="core-copy"><span class="core-kicker">CONTENT-BOUND</span><span class="core-name">meaning<br>packet</span><span class="core-count">10 / 10 claims</span></div>
338
+ </div>
339
+ <div class="compression-meter">
340
+ <div class="metric"><b id="claim-count">10</b><span>atomic claims</span></div>
341
+ <div class="metric"><b>0</b><span>silent drops</span></div>
342
+ <div class="metric"><b>5</b><span>projections</span></div>
343
+ </div>
344
+ </div>
345
+ </section>
346
+
347
+ <section class="panel outputs-panel" aria-label="Language projections">
348
+ <div class="panel-label"><span>03 / Project</span><span>one packet → many surfaces</span></div>
349
+ <div class="outputs" id="outputs"></div>
350
+ <div class="ledger">
351
+ <div class="ledger-line"><span>CLAIMS REPRESENTED</span><b id="represented">10 / 10</b></div>
352
+ <div class="ledger-line"><span>CLAIMS OMITTED</span><b>0</b></div>
353
+ <div class="ledger-line"><span>REVIEW STATE</span><b>CONFORMANCE</b></div>
354
+ </div>
355
+ </section>
356
+ </div>
357
+
358
+ <nav class="scenario-strip" aria-label="Example events">
359
+ <span class="strip-label">Select event</span>
360
+ <button class="scenario active" data-scene="0"><span class="scenario-num">01</span><span class="scenario-name">Fold textile</span></button>
361
+ <button class="scenario" data-scene="1"><span class="scenario-num">02</span><span class="scenario-name">Open container</span></button>
362
+ <button class="scenario" data-scene="2"><span class="scenario-num">03</span><span class="scenario-name">Place object</span></button>
363
+ <button class="scenario" data-scene="3"><span class="scenario-num">04</span><span class="scenario-name">Cut ingredient</span></button>
364
+ <button class="pause" id="pause" aria-label="Pause automatic examples" title="Pause animation">Ⅱ</button>
365
+ </nav>
366
+ </section>
367
+
368
+ <section class="shell thesis">
369
+ <div class="thesis-index">00 / Design principle</div>
370
+ <div>
371
+ <h2>Compress the <em>description.</em><br>Keep the world.</h2>
372
+ <div class="thesis-copy">
373
+ <p><strong>A universal vocabulary is not an infinite dictionary.</strong> It is a compositional address space. New actions and nouns become concept IDs; roles describe how they participate; evidence says why each claim is believed.</p>
374
+ <p><strong>Fluent text is a view, not the database.</strong> English, Chinese, Tagalog, Spanish and Hindi can choose their own word order and grammar without becoming the authority for hands, state, timing or geometry.</p>
375
+ </div>
376
+ </div>
377
+ </section>
378
+
379
+ <section class="shell packet-section" aria-labelledby="packet-title">
380
+ <div class="section-head">
381
+ <h2 id="packet-title">Inside one event.</h2>
382
+ <p>The visible sentence is short. The packet remains explicit. Click an event above and every value below updates from the same semantic frame.</p>
383
+ </div>
384
+ <div class="packet-table" id="packet-table"></div>
385
+ </section>
386
+ </main>
387
+
388
+ <footer>
389
+ <div class="footer-inner">
390
+ <div class="footer-title">Meaning,<br>packed.</div>
391
+ <div class="footer-meta">UNIVERSAL LABELER / RELEASE 1.0.1<br>5 HUMAN LANGUAGES · 22 WORLD DIMENSIONS<br><a href="https://huggingface.co/datasets/itspublu/UniversalLabeler">VIEW DATA + SCHEMAS ↗</a></div>
392
+ </div>
393
+ </footer>
394
+
395
+ <script>
396
+ const scenes = [
397
+ {
398
+ name: "fold_towel", source: "Fold the towel on the table with both hands.", hot: "towel",
399
+ environment: "indoor · laundry area", duration: "7.00 s · episode_clock", claims: 10,
400
+ values: { action: "fold", agent: "human performer", roles: "left stabilizes · right acts", object: "towel_01 · patient", place: "table · laundry area", before: "unfolded · dry", after: "folded · dry", time: "1.00—8.00 s", outcome: "success", evidence: "RGB · hand pose · narration" },
401
+ text: { en: "Fold the towel on the table with both hands.", zh: "用双手在桌上把毛巾叠好。", tl: "Tiklupin ang tuwalya sa mesa gamit ang dalawang kamay.", es: "Dobla la toalla sobre la mesa con ambas manos.", hi: "दोनों हाथों से मेज़ पर तौलिया मोड़ें।" }
402
+ },
403
+ {
404
+ name: "open_jar", source: "Hold the jar with the left hand and unscrew the lid with the right.", hot: "unscrew",
405
+ environment: "indoor · kitchen counter", duration: "4.20 s · episode_clock", claims: 11,
406
+ values: { action: "unscrew", agent: "human performer", roles: "left stabilizes · right rotates", object: "lid_01 · patient", place: "jar · kitchen counter", before: "jar sealed", after: "jar open", time: "12.30—16.50 s", outcome: "success", evidence: "RGB · hand pose · object track" },
407
+ text: { en: "Hold the jar with the left hand and unscrew the lid with the right.", zh: "左手扶稳罐子,右手拧开盖子。", tl: "Hawakan ang garapon sa kaliwang kamay at pihitin ang takip gamit ang kanan.", es: "Sujeta el frasco con la izquierda y desenrosca la tapa con la derecha.", hi: "बाएँ हाथ से जार को थामें और दाएँ हाथ से ढक्कन खोलें।" }
408
+ },
409
+ {
410
+ name: "place_mug", source: "Place the blue mug upright on the upper shelf using the right hand.", hot: "upper shelf",
411
+ environment: "indoor · storage cabinet", duration: "2.80 s · episode_clock", claims: 10,
412
+ values: { action: "place", agent: "human performer", roles: "right acts · left idle", object: "blue_mug_01 · patient", place: "upper_shelf · destination", before: "held · tilted", after: "supported · upright", time: "21.10—23.90 s", outcome: "stable placement", evidence: "RGB · depth · object pose" },
413
+ text: { en: "Place the blue mug upright on the upper shelf using the right hand.", zh: "用右手把蓝色杯子直立放到上层架子上。", tl: "Ilagay nang patayo ang asul na tasa sa itaas na estante gamit ang kanang kamay.", es: "Coloca la taza azul en posición vertical sobre el estante superior con la mano derecha.", hi: "दाएँ हाथ से नीले मग को ऊपरी शेल्फ़ पर सीधा रखें।" }
414
+ },
415
+ {
416
+ name: "slice_tomato", source: "Stabilize the tomato with the left hand and slice it with the knife.", hot: "knife",
417
+ environment: "indoor · food prep station", duration: "5.60 s · episode_clock", claims: 12,
418
+ values: { action: "slice", agent: "human performer", roles: "left stabilizes · right cuts", object: "tomato_01 · patient", place: "cutting_board · support", before: "whole tomato", after: "separated slices", time: "31.00—36.60 s", outcome: "cut completed", evidence: "RGB · contact · temporal span" },
419
+ text: { en: "Stabilize the tomato with the left hand and slice it with the knife.", zh: "左手扶稳番茄,用刀将它切片。", tl: "Hawakan nang matatag ang kamatis sa kaliwang kamay at hiwain ito gamit ang kutsilyo.", es: "Sujeta el tomate con la mano izquierda y córtalo en rodajas con el cuchillo.", hi: "बाएँ हाथ से टमाटर को स्थिर रखें और चाकू से उसके टुकड़े काटें।" }
420
+ }
421
+ ];
422
+
423
+ const languageNames = { en: "English", zh: "简体中文", tl: "Tagalog", es: "Español", hi: "हिन्दी" };
424
+ const output = document.querySelector("#outputs");
425
+ const table = document.querySelector("#packet-table");
426
+ const core = document.querySelector("#core");
427
+ const machine = document.querySelector("#machine");
428
+ let sceneIndex = 0;
429
+ let activeLanguage = "tl";
430
+ let playing = true;
431
+ let timer;
432
+
433
+ function renderOutputs(scene) {
434
+ output.innerHTML = Object.entries(scene.text).map(([code, value]) => `
435
+ <button class="output ${code === activeLanguage ? "active" : ""}" data-language="${code}" aria-label="Highlight ${languageNames[code]}">
436
+ <span class="output-code">${code}</span><span class="output-text" lang="${code}">${value}</span><span class="output-check">✓</span>
437
+ </button>`).join("");
438
+ output.querySelectorAll(".output").forEach(button => button.addEventListener("click", () => {
439
+ activeLanguage = button.dataset.language;
440
+ renderOutputs(scenes[sceneIndex]);
441
+ launchParticles();
442
+ }));
443
+ }
444
+
445
+ function renderTable(scene) {
446
+ const rows = [
447
+ ["action", scene.values.action], ["agent", scene.values.agent], ["effector roles", scene.values.roles],
448
+ ["primary object", scene.values.object], ["environment", scene.values.place], ["state before", scene.values.before],
449
+ ["state after", scene.values.after], ["temporal scope", scene.values.time], ["outcome", scene.values.outcome], ["evidence", scene.values.evidence]
450
+ ];
451
+ table.innerHTML = rows.map((row, i) => `<div class="packet-row"><span class="idx">${String(i+1).padStart(2,"0")}</span><span class="field">${row[0]}</span><span class="value">${row[1]}</span><span class="state">preserved</span></div>`).join("");
452
+ }
453
+
454
+ function launchParticles() {
455
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
456
+ const source = document.querySelector("#source-text");
457
+ const target = output.querySelector(".output.active .output-text") || output.querySelector(".output-text");
458
+ if (!source || !target || window.innerWidth < 720) return;
459
+ const a = source.getBoundingClientRect(), c = core.getBoundingClientRect(), b = target.getBoundingClientRect();
460
+ const labels = ["ACTION", "ROLE", "OBJECT", "STATE", "TIME", "EVIDENCE"];
461
+ labels.forEach((label, i) => {
462
+ const p = document.createElement("span");
463
+ p.className = "particle"; p.textContent = label;
464
+ p.style.left = `${a.right - 30}px`; p.style.top = `${a.top + 22 + (i%3)*24}px`; p.style.opacity = "1";
465
+ document.body.appendChild(p);
466
+ requestAnimationFrame(() => {
467
+ p.style.transform = `translate(${c.left + c.width/2 - a.right - 8}px, ${c.top + c.height/2 - a.top - 28 - (i%3)*24}px) scale(.55)`;
468
+ });
469
+ setTimeout(() => {
470
+ p.style.transition = "transform .68s cubic-bezier(.7,0,.25,1), opacity .2s .5s";
471
+ p.style.transform = `translate(${b.left - a.right + 5}px, ${b.top - a.top - (i%3)*24}px) scale(.35)`;
472
+ p.style.opacity = "0";
473
+ }, 760 + i*35);
474
+ setTimeout(() => p.remove(), 1550 + i*35);
475
+ });
476
+ const nodes = [...document.querySelectorAll(".claim-node")];
477
+ nodes.forEach((node, i) => setTimeout(() => { node.classList.add("active"); setTimeout(() => node.classList.remove("active"), 300); }, i*80));
478
+ }
479
+
480
+ function setScene(index, animate = true) {
481
+ sceneIndex = index;
482
+ const scene = scenes[index];
483
+ document.querySelectorAll(".scenario").forEach((b, i) => b.classList.toggle("active", i === index));
484
+ const source = scene.source.replace(scene.hot, `<span class="hot">${scene.hot}</span>`);
485
+ document.querySelector("#source-text").innerHTML = source;
486
+ document.querySelector("#environment").textContent = scene.environment;
487
+ document.querySelector("#time-scope").textContent = scene.duration;
488
+ document.querySelector("#framecode").textContent = `EVENT / ${scene.name.toUpperCase()}`;
489
+ document.querySelector("#claim-count").textContent = scene.claims;
490
+ document.querySelector(".core-count").textContent = `${scene.claims} / ${scene.claims} claims`;
491
+ document.querySelector("#represented").textContent = `${scene.claims} / ${scene.claims}`;
492
+ document.querySelector("#scope-line").style.setProperty("--progress", "0%");
493
+ requestAnimationFrame(() => document.querySelector("#scope-line").style.setProperty("--progress", "100%"));
494
+ renderOutputs(scene); renderTable(scene);
495
+ if (animate) setTimeout(launchParticles, 120);
496
+ }
497
+
498
+ function schedule() {
499
+ clearInterval(timer);
500
+ if (playing) timer = setInterval(() => setScene((sceneIndex + 1) % scenes.length), 6200);
501
+ }
502
+
503
+ document.querySelectorAll(".scenario").forEach(button => button.addEventListener("click", () => {
504
+ setScene(Number(button.dataset.scene)); schedule();
505
+ }));
506
+ document.querySelector("#pause").addEventListener("click", (event) => {
507
+ playing = !playing; event.currentTarget.textContent = playing ? "Ⅱ" : "▶";
508
+ event.currentTarget.setAttribute("aria-label", playing ? "Pause automatic examples" : "Play automatic examples"); schedule();
509
+ });
510
+
511
+ setScene(0, false); schedule();
512
+ window.addEventListener("load", () => setTimeout(launchParticles, 900), { once: true });
513
+ </script>
514
+ </body>
515
  </html>