Burnmydays Devin commited on
Commit
8e38372
·
1 Parent(s): 099d44c

feat: species taxonomy UI + robust ingest + precision hero layout

Browse files

- theme.py: rename rarity-* → species-* CSS classes (cascade/architect/
converter/throughput); add .tabitem padding override to fix column squish
- app.py: classify/rarity_class rewritten to Quadrant Species Designation;
board_html/card_html updated to species-* classes; ghost card updated;
hero replaced with precision hardware telemetry layout (4-column stat
strip, SYSTEM STATUS badge, METRIC VECTOR label)
- ingest.py: add Defense 1 (markdown fence strip) + Defense 2 (embedded
brace seeking) before JSON parse; wrap Strategy 1+2 in try/except so
broken trees fall through cleanly; Strategy 3 raises descriptive error

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>

Files changed (3) hide show
  1. app.py +63 -41
  2. ingest.py +76 -49
  3. theme.py +34 -27
app.py CHANGED
@@ -69,11 +69,11 @@ def board_html(extra=None, sort_key="yield"):
69
  rank_cls = f"mb-rank-{i}" if i <= 3 else ""
70
  rkey = rarity_class(m)[0]
71
  if you:
72
- cls = f"mb-row rarity-{rkey} you"
73
  elif i == 1:
74
- cls = f"mb-row rarity-{rkey} rank1"
75
  else:
76
- cls = f"mb-row rarity-{rkey}"
77
  ne = _html.escape(n)
78
  est_mark = " <span class='mb-est' title='* structural estimation'>*</span>" if m.get("cost_estimated") else ""
79
  out.append(f'<div class="{cls}">'
@@ -95,36 +95,35 @@ def board_html(extra=None, sort_key="yield"):
95
  def classify(m):
96
  if m["non_compounding"]: return "Non-Compounding \u00b7 stateless pipe"
97
  v,l=m["velocity"],m["leverage"]
98
- if v>=1 and l>=100: return "Closed-Loop Kinetic \u00b7 holds both axes"
99
- if l>=10 and v<1: return "Archival Sponge \u00b7 high reuse, low generation"
100
- if v>=0.8 and l<2: return "Volatile Ingestor \u00b7 generates, doesn't retain"
101
- return "Transient \u00b7 low on both axes"
102
 
103
  def rarity_class(m):
104
- """Returns (rarity_key, label, passive, effect).
105
- MYTHIC > EPIC > RARE > COMMON based on velocity/leverage axes.
106
- Mirrors the user's trading-card design: four species of greatness.
107
  """
108
  v, l = m["velocity"], m["leverage"]
109
  if v >= 1 and l >= 100:
110
- return ("mythic", "MYTHIC",
111
- "Compound Interest",
112
- "Multipliers stack. Transmission \u00d7 Commitment \u00d7 Reuse = Leverage. "
113
- "The rare operator the leverage/generation tradeoff says shouldn\u2019t exist.")
114
  if l >= 10 and v < 1:
115
- return ("epic", "EPIC",
116
- "Persistent Memory",
117
- "Builds reusable structures. Each cache write is read many times. "
118
- "Holds context beautifully \u2014 the architecture compounds without the velocity.")
119
  if v >= 0.5:
120
- return ("rare", "RARE",
121
- "Direct Production",
122
- "Strong input-to-output conversion. Fast on single shots. "
123
- "Memory doesn\u2019t persist into a compounding loop.")
124
- return ("common", "COMMON",
125
- "Mass Transit",
126
- "Moves enormous token mass. Volume is the strategy. "
127
- "Amplification is not the goal \u2014 scale is.")
128
 
129
  def comp_bar_html(c):
130
  return (f'<div class="comp-bar">'
@@ -166,9 +165,9 @@ def card_html(name, m, rank, total_ops, narration_text):
166
  cascade = '<div class="sig-card-cascade-box">\u2014<small>non-compounding</small></div>'
167
  quote = _first_sentence(narration_text)
168
  return (
169
- f'<div class="sig-card rarity-{rkey}">'
170
  '<div class="sig-card-watermark">MO\u00a7ES\u2122 SIGRANK</div>'
171
- f'<div class="sig-card-rarity rarity-{rkey}">{rlabel}</div>'
172
  f'<div class="sig-card-name">{name}</div>'
173
  f'<div class="sig-card-archetype">{archetype}</div>'
174
  f'<div class="sig-card-passive">Passive: {passive}</div>'
@@ -330,10 +329,10 @@ _ON_SPACE = bool(_os.environ.get("SPACE_ID"))
330
 
331
  # Ghost/"unminted" card so the right column is never an empty void on first load.
332
  CARD_PLACEHOLDER = (
333
- '<div class="sig-card rarity-common" id="ghost-card">'
334
- '<div class="sig-card-watermark">MO§ES™ SIGRANK</div>'
335
- '<div class="sig-card-rarity rarity-common">UNMINTED</div>'
336
- '<div class="sig-card-name">Awaiting Operator</div>'
337
  '<div class="sig-card-archetype">Signal Offline</div>'
338
  '<div class="sig-card-yield">0,000</div>'
339
  '<div class="sig-card-yield-label">insert token ledger to scan</div>'
@@ -350,15 +349,38 @@ def _build_demo():
350
  _lead = (_ys[0] / _ys[1]) if len(_ys) > 1 and _ys[1] > 0 else 0.0
351
  with _b:
352
  with gr.Column(elem_id="moses-hero"):
353
- gr.HTML("<h1>MO\u00a7ES\u2122 SigRank</h1>"
354
- "<p>The diagnostic x-ray of the token economy // ranked by \u03a5 (Net Volumetric Yield) // volume can't buy rank</p>")
355
- gr.HTML('<div id="moses-stat-strip">'
356
- f'<div>OPERATORS RANKED <span>{len(_ops_now)}</span></div>'
357
- f'<div>MO\u00a7ES LEADS BY <span>{_lead:,.0f}\u00d7</span></div>'
358
- '<div>ARCHITECTURE BEATS BUDGET</div>'
359
- '</div>')
360
- gr.HTML('<div id="moses-footprint">compute footprint \u00b7 0.5B params (MiniCPM4-0.5B) \u00b7 '
361
- 'non-blocking deterministic fallback \u00b7 ZeroGPU \u00b7 \u03a5 = (Cache\u00b7Output)/Input\u00b2</div>')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
 
363
  # ---- TAB 1: Leaderboard (board + sticky profile inspector) ----
364
  with gr.Tab("Leaderboard"):
 
69
  rank_cls = f"mb-rank-{i}" if i <= 3 else ""
70
  rkey = rarity_class(m)[0]
71
  if you:
72
+ cls = f"mb-row species-{rkey} you"
73
  elif i == 1:
74
+ cls = f"mb-row species-{rkey} rank1"
75
  else:
76
+ cls = f"mb-row species-{rkey}"
77
  ne = _html.escape(n)
78
  est_mark = " <span class='mb-est' title='* structural estimation'>*</span>" if m.get("cost_estimated") else ""
79
  out.append(f'<div class="{cls}">'
 
95
  def classify(m):
96
  if m["non_compounding"]: return "Non-Compounding \u00b7 stateless pipe"
97
  v,l=m["velocity"],m["leverage"]
98
+ if v>=1 and l>=100: return "Cascade Matrix \u00b7 recursive processing loop"
99
+ if l>=10 and v<1: return "Cache Architect \u00b7 high structural reuse"
100
+ if v>=0.5 and l<2: return "Converter Loop \u00b7 single-pass processing velocity"
101
+ return "Throughput Pipe \u00b7 raw metric bandwidth"
102
 
103
  def rarity_class(m):
104
+ """Returns (species_key, label, trait, description).
105
+ Quadrant Species Designation based on algorithmic efficiency vectors.
 
106
  """
107
  v, l = m["velocity"], m["leverage"]
108
  if v >= 1 and l >= 100:
109
+ return ("cascade", "CASCADE SPECIES",
110
+ "Compound Cascading Loop",
111
+ "Multipliers stack across all dimensions. Transmission \u00d7 Commitment \u00d7 Reuse = Leverage. "
112
+ "Maintains high production velocity while driving compounding architectural feedback.")
113
  if l >= 10 and v < 1:
114
+ return ("architect", "CACHE ARCHITECT",
115
+ "Persistent Context Layer",
116
+ "Builds high-reuse caching layers. Every token commit is read across sequential loops. "
117
+ "Holds state perfectly without requiring linear transformation velocity.")
118
  if v >= 0.5:
119
+ return ("converter", "CONVERTER SPECIES",
120
+ "Linear Volumetric Output",
121
+ "High immediate input-to-output context conversion ratio. Maximizes localized turn processing. "
122
+ "Token footprint does not compound or recur inside long-term retrieval networks.")
123
+ return ("throughput", "THROUGHPUT SPECIES",
124
+ "Volumetric Mass Transit",
125
+ "Processes massive raw token scale across standard pipelines. Focuses on total platform load. "
126
+ "Optimization vector is execution bandwidth rather than persistent feedback loops.")
127
 
128
  def comp_bar_html(c):
129
  return (f'<div class="comp-bar">'
 
165
  cascade = '<div class="sig-card-cascade-box">\u2014<small>non-compounding</small></div>'
166
  quote = _first_sentence(narration_text)
167
  return (
168
+ f'<div class="sig-card species-{rkey}">'
169
  '<div class="sig-card-watermark">MO\u00a7ES\u2122 SIGRANK</div>'
170
+ f'<div class="sig-card-rarity species-{rkey}">{rlabel}</div>'
171
  f'<div class="sig-card-name">{name}</div>'
172
  f'<div class="sig-card-archetype">{archetype}</div>'
173
  f'<div class="sig-card-passive">Passive: {passive}</div>'
 
329
 
330
  # Ghost/"unminted" card so the right column is never an empty void on first load.
331
  CARD_PLACEHOLDER = (
332
+ '<div class="sig-card species-throughput" id="ghost-card">'
333
+ '<div class="sig-card-watermark">MO\u00a7ES\u2122 SIGRANK</div>'
334
+ '<div class="sig-card-rarity species-throughput">UNMINTED</div>'
335
+ '<div class="sig-card-name">Awaiting Operator\u2026</div>'
336
  '<div class="sig-card-archetype">Signal Offline</div>'
337
  '<div class="sig-card-yield">0,000</div>'
338
  '<div class="sig-card-yield-label">insert token ledger to scan</div>'
 
349
  _lead = (_ys[0] / _ys[1]) if len(_ys) > 1 and _ys[1] > 0 else 0.0
350
  with _b:
351
  with gr.Column(elem_id="moses-hero"):
352
+ gr.HTML(
353
+ "<div style='display: flex; justify-content: space-between; align-items: flex-end; border-bottom: 2px solid #C4923A; padding-bottom: 12px; margin-bottom: 16px;'>"
354
+ " <div>"
355
+ " <h1 style='color: #C4923A !important; font-size: 36px !important; font-weight: 800 !important; letter-spacing: 0.2em !important; margin: 0 !important; line-height: 1.1;'>MO\u00a7ES<span style='font-size: 16px; vertical-align: super; font-weight: 400; letter-spacing: normal;'>\u2122</span> <span style='color: #E8E0CF; font-weight: 300;'>SIGRANK</span></h1>"
356
+ " <p style='color: #8a7f68 !important; font-size: 11px !important; letter-spacing: 0.05em !important; margin: 6px 0 0 0 !important; text-transform: uppercase;'>Diagnostic X-Ray of the Token Economy // Continuous Architectural Profiling</p>"
357
+ " </div>"
358
+ " <div style='text-align: right; font-size: 10px; color: #8a7f68; letter-spacing: 0.1em; line-height: 1.4; font-weight: bold;'>"
359
+ " SYSTEM STATUS: <span style='color: #22c55e;'>ONLINE</span><br>"
360
+ " METRIC VECTOR: <span style='color: #C4923A;'>\u03a5 = (C\u00b7O)/I\u00b2</span>"
361
+ " </div>"
362
+ "</div>"
363
+ )
364
+ gr.HTML(
365
+ f'<div id="moses-stat-strip" style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; background: #1E1B15; border: 1px solid #3A3324; padding: 12px 18px; border-radius: 6px; margin-bottom: 24px;">'
366
+ f' <div style="border-right: 1px solid #3A3324; padding-right: 10px;">'
367
+ f' <div style="font-size: 9px; color: #8a7f68; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 2px;">Operators Profiled</div>'
368
+ f' <div style="font-size: 20px; color: #E8E0CF; font-weight: 700;">{len(_ops_now)} <span style="font-size: 11px; color: #8a7f68; font-weight: normal;">nodes</span></div>'
369
+ f' </div>'
370
+ f' <div style="border-right: 1px solid #3A3324; padding-right: 10px; padding-left: 10px;">'
371
+ f' <div style="font-size: 9px; color: #8a7f68; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 2px;">Empirical Delta</div>'
372
+ f' <div style="font-size: 20px; color: #C4923A; font-weight: 700;">{_lead:,.0f}\u00d7 <span style="font-size: 11px; color: #8a7f68; font-weight: normal;">max \u03a5</span></div>'
373
+ f' </div>'
374
+ f' <div style="border-right: 1px solid #3A3324; padding-right: 10px; padding-left: 10px;">'
375
+ f' <div style="font-size: 9px; color: #8a7f68; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 2px;">Evaluation Strategy</div>'
376
+ f' <div style="font-size: 14px; color: #E8E0CF; font-weight: 700; line-height: 1.5; text-transform: uppercase; letter-spacing: 0.02em;">Compounding Loops</div>'
377
+ f' </div>'
378
+ f' <div style="padding-left: 10px;">'
379
+ f' <div style="font-size: 9px; color: #8a7f68; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 2px;">Core Constraint</div>'
380
+ f' <div style="font-size: 14px; color: #8a7f68; font-weight: 700; line-height: 1.5; text-transform: uppercase; letter-spacing: 0.02em;"><span style="color: #E8E0CF;">Architecture</span> &gt; Budget</div>'
381
+ f' </div>'
382
+ f'</div>'
383
+ )
384
 
385
  # ---- TAB 1: Leaderboard (board + sticky profile inspector) ----
386
  with gr.Tab("Leaderboard"):
ingest.py CHANGED
@@ -251,66 +251,93 @@ def ingest_meta(text, operator_profile=None):
251
  - Text with named fields (extracts by field name, not position)
252
  - Four bare numbers: input output cache_create cache_read
253
 
 
 
 
 
254
  operator_profile: optional dict {"model_type": "claude", "io_ratio": float}
255
  when the submitting user has a verified Claude session profile. This
256
  switches the Codex parser from the Alpha 2:1 baseline to the Beta pathway
257
  that uses the operator's own Claude input/output ratio.
258
  """
259
- text=text.strip()
260
- if not text: raise ValueError("empty")
 
261
 
262
- # --- Strategy 1: Try to parse as valid JSON (or fix partial JSON) ---
 
 
 
 
 
 
263
  fixed = None
264
- if text[0] in '{["':
 
 
 
 
 
265
  fixed = _try_fix_json(text)
 
 
266
  if fixed:
267
- d = json.loads(fixed)
268
- if is_codex_shape(d):
269
- return parse_codex_submission(d, operator_profile=operator_profile)
270
- i,o,cw,cr,cost = parse_ccusage(fixed)
271
- return i,o,cw,cr,{"source":"ccusage","estimated":False,"caveat":None,"cost":cost}
 
 
 
272
 
273
  # --- Strategy 2: Text has named fields — extract by name ---
274
  if _has_named_fields(text):
275
- result = _extract_by_name(text)
276
- if result:
277
- i, o, cw, cr, cost_val = result
278
- has_codex_fields = any(
279
- alias in text
280
- for alias in ("cachedInputTokens", "cached_input_tokens",
281
- "reasoningOutputTokens", "reasoning_output_tokens")
282
- )
283
- if has_codex_fields:
284
- # Re-route through Codex pathway with extracted totals
285
- raw_cache = 0
286
- for alias in _FIELD_ALIASES["cache_read"]:
287
- m = re.search(rf'"{re.escape(alias)}"\s*:\s*([\d,.]+)', text)
288
- if m:
289
- raw_cache = int(float(m.group(1).replace(",", "")))
290
- break
291
- raw_in = 0
292
- for alias in _FIELD_ALIASES["input"]:
293
- m = re.search(rf'"{re.escape(alias)}"\s*:\s*([\d,.]+)', text)
294
- if m:
295
- raw_in = int(float(m.group(1).replace(",", "")))
296
- break
297
- raw_out = o # already includes reasoning from _extract_by_name
298
- est_input, parsing_mode = _codex_input_estimate(raw_out, operator_profile)
299
- context_debt = max(0, raw_in - est_input)
300
- meta = {
301
- "source": "codex", "estimated": True,
302
- "parsing_mode": parsing_mode,
303
- "caveat": f"* {parsing_mode}",
304
- "anchor": parsing_mode, "cost": cost_val,
305
- }
306
- return int(est_input), raw_out, context_debt, raw_cache, meta
307
- else:
308
- cost = cost_val if cost_val and cost_val > 0 else None
309
- return i, o, cw, cr, {
310
- "source": "ccusage", "estimated": False,
311
- "caveat": None, "cost": cost,
312
- }
 
 
 
313
 
314
  # --- Strategy 3: Four bare numbers ---
315
- i,o,cw,cr = parse_four(text)
316
- return i,o,cw,cr,{"source":"manual","estimated":False,"caveat":None,"cost":None}
 
 
 
 
251
  - Text with named fields (extracts by field name, not position)
252
  - Four bare numbers: input output cache_create cache_read
253
 
254
+ Reinforced error handling guarantees that malformed JSON strings, trailing
255
+ spaces, or mixed terminal logs fall back safely through non-breaking pipeline
256
+ routes.
257
+
258
  operator_profile: optional dict {"model_type": "claude", "io_ratio": float}
259
  when the submitting user has a verified Claude session profile. This
260
  switches the Codex parser from the Alpha 2:1 baseline to the Beta pathway
261
  that uses the operator's own Claude input/output ratio.
262
  """
263
+ text = text.strip()
264
+ if not text:
265
+ raise ValueError("The sequence input buffer is empty.")
266
 
267
+ # Defense 1: Pre-process and strip common terminal markdown code block wrappers
268
+ if text.startswith("```"):
269
+ text = re.sub(r"^```[a-z]*\n", "", text, flags=re.IGNORECASE)
270
+ text = re.sub(r"\n```$", "", text)
271
+ text = text.strip()
272
+
273
+ # Defense 2: Seek embedded object markers if raw copy contains surrounding prose
274
  fixed = None
275
+ json_start = re.search(r'[\{\["]', text)
276
+ if json_start:
277
+ candidate_segment = text[json_start.start():]
278
+ fixed = _try_fix_json(candidate_segment)
279
+
280
+ if not fixed and text[0] in '{["':
281
  fixed = _try_fix_json(text)
282
+
283
+ # --- Strategy 1: Try to parse as valid JSON (or fix partial JSON) ---
284
  if fixed:
285
+ try:
286
+ d = json.loads(fixed)
287
+ if is_codex_shape(d):
288
+ return parse_codex_submission(d, operator_profile=operator_profile)
289
+ i, o, cw, cr, cost = parse_ccusage(fixed)
290
+ return i, o, cw, cr, {"source": "ccusage", "estimated": False, "caveat": None, "cost": cost}
291
+ except Exception:
292
+ pass # Fall through to named-field extraction if the tree remains broken
293
 
294
  # --- Strategy 2: Text has named fields — extract by name ---
295
  if _has_named_fields(text):
296
+ try:
297
+ result = _extract_by_name(text)
298
+ if result:
299
+ i, o, cw, cr, cost_val = result
300
+ has_codex_fields = any(
301
+ alias in text
302
+ for alias in ("cachedInputTokens", "cached_input_tokens",
303
+ "reasoningOutputTokens", "reasoning_output_tokens")
304
+ )
305
+ if has_codex_fields:
306
+ # Re-route through Codex pathway with extracted totals
307
+ raw_cache = 0
308
+ for alias in _FIELD_ALIASES["cache_read"]:
309
+ m = re.search(rf'"{re.escape(alias)}"\s*:\s*([\d,.]+)', text)
310
+ if m:
311
+ raw_cache = int(float(m.group(1).replace(",", "")))
312
+ break
313
+ raw_in = 0
314
+ for alias in _FIELD_ALIASES["input"]:
315
+ m = re.search(rf'"{re.escape(alias)}"\s*:\s*([\d,.]+)', text)
316
+ if m:
317
+ raw_in = int(float(m.group(1).replace(",", "")))
318
+ break
319
+ raw_out = o # already includes reasoning from _extract_by_name
320
+ est_input, parsing_mode = _codex_input_estimate(raw_out, operator_profile)
321
+ context_debt = max(0, raw_in - est_input)
322
+ meta = {
323
+ "source": "codex", "estimated": True,
324
+ "parsing_mode": parsing_mode,
325
+ "caveat": f"* {parsing_mode}",
326
+ "anchor": parsing_mode, "cost": cost_val,
327
+ }
328
+ return int(est_input), raw_out, context_debt, raw_cache, meta
329
+ else:
330
+ cost = cost_val if cost_val and cost_val > 0 else None
331
+ return i, o, cw, cr, {
332
+ "source": "ccusage", "estimated": False,
333
+ "caveat": None, "cost": cost,
334
+ }
335
+ except Exception:
336
+ pass
337
 
338
  # --- Strategy 3: Four bare numbers ---
339
+ try:
340
+ i, o, cw, cr = parse_four(text)
341
+ return i, o, cw, cr, {"source": "manual", "estimated": False, "caveat": None, "cost": None}
342
+ except Exception as e:
343
+ raise ValueError(f"Telemetry format unrecognized. Trace error: {str(e)}")
theme.py CHANGED
@@ -8,10 +8,10 @@ CSS = """
8
  --moses-line: #3A3324;
9
  --moses-ink: #E8E0CF;
10
  --moses-dim: #8a7f68;
11
- --rarity-common: #6b7280;
12
- --rarity-rare: #3b82f6;
13
- --rarity-epic: #8b5cf6;
14
- --rarity-mythic: #C4923A;
15
  }
16
  .gradio-container, .gradio-container * { font-family: ui-monospace, "SF Mono", Menlo, monospace !important; }
17
  .gradio-container { background: var(--moses-bg) !important; max-width: 1100px !important; margin: 0 auto !important; }
@@ -31,6 +31,7 @@ CSS = """
31
  margin: 0 !important;
32
  }
33
  #moses-hero p { color: var(--moses-dim) !important; font-size: 12px !important; margin: 6px 0 0 !important; }
 
34
  /* stat strip */
35
  #moses-stat-strip {
36
  display: flex; gap: 24px; margin-top: 10px;
@@ -38,12 +39,19 @@ CSS = """
38
  }
39
  #moses-stat-strip span { color: var(--moses-ink); font-weight: 700; }
40
 
41
- .tabs, .tabitem { background: transparent !important; border: none !important; }
 
 
 
 
 
 
 
42
  button.selected { color: var(--moses-gold) !important; border-bottom: 2px solid var(--moses-gold) !important; }
43
  .tab-nav button { color: var(--moses-dim) !important; font-size: 13px !important; letter-spacing: 0.06em; }
44
 
45
  .dataframe, table { background: var(--moses-card) !important; color: var(--moses-ink) !important;
46
- border: 1px solid var(--moses-line) !important; font-size: 12px !important; }
47
  .dataframe thead th, table thead th { background: var(--moses-bg) !important; color: var(--moses-gold) !important;
48
  border-bottom: 1px solid var(--moses-gold) !important; font-size: 10px !important;
49
  letter-spacing: 0.06em !important; text-transform: uppercase; padding: 8px 6px !important; }
@@ -74,9 +82,10 @@ button.primary:hover, #compute-btn:hover { background: #d8a449 !important; }
74
  .prose, .md, #moses-foot { color: var(--moses-dim) !important; font-size: 11px !important; }
75
  #moses-foot { border-top: 1px solid var(--moses-line); padding-top: 10px; margin-top: 16px; line-height: 1.7; }
76
 
77
- .moses-board { font-family: ui-monospace, monospace; margin-top: 6px; }
78
- .mb-head, .mb-row { display: grid; grid-template-columns: 28px 1.6fr 0.6fr 0.6fr 0.6fr 0.75fr 0.7fr 1.4fr;
79
- align-items: center; gap: 8px; padding: 9px 8px; }
 
80
  .mb-head { color: #C4923A; font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;
81
  border-bottom: 1px solid #C4923A; }
82
  .mb-row { border-bottom: 1px solid #3A3324; color: #8a7f68; font-size: 12px; }
@@ -88,10 +97,12 @@ button.primary:hover, #compute-btn:hover { background: #d8a449 !important; }
88
  color: var(--moses-ink) !important;
89
  }
90
  .mb-row.rank1 .mb-yval { color: var(--moses-gold); font-size: 14px; }
91
- .mb-row.rarity-common { border-left: 3px solid var(--rarity-common); }
92
- .mb-row.rarity-rare { border-left: 3px solid var(--rarity-rare); }
93
- .mb-row.rarity-epic { border-left: 3px solid var(--rarity-epic); }
94
- .mb-row.rarity-mythic { border-left: 3px solid var(--rarity-mythic); }
 
 
95
  .mb-rank-1 { color: var(--moses-gold); font-weight: 700; }
96
  .mb-rank-2 { color: #a0a0a0; }
97
  .mb-rank-3 { color: #8a6a3a; }
@@ -121,10 +132,10 @@ button.primary:hover, #compute-btn:hover { background: #d8a449 !important; }
121
  font-family: ui-monospace, monospace;
122
  position: relative;
123
  }
124
- .sig-card.rarity-common { border: 1px solid var(--rarity-common); box-shadow: 0 0 20px rgba(107,114,128,0.12); }
125
- .sig-card.rarity-rare { border: 1px solid var(--rarity-rare); box-shadow: 0 0 24px rgba(59,130,246,0.15); }
126
- .sig-card.rarity-epic { border: 1px solid var(--rarity-epic); box-shadow: 0 0 28px rgba(139,92,246,0.18); }
127
- .sig-card.rarity-mythic { border: 1px solid var(--rarity-mythic); box-shadow: 0 0 40px rgba(196,146,58,0.22), inset 0 1px 0 rgba(196,146,58,0.15); }
128
  .sig-card-watermark {
129
  position: absolute; top: 14px; right: 16px;
130
  font-size: 9px; color: var(--moses-dim); letter-spacing: 0.1em;
@@ -156,14 +167,14 @@ button.primary:hover, #compute-btn:hover { background: #d8a449 !important; }
156
  font-style: italic;
157
  }
158
  .sig-card-rarity { display: inline-block; font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; padding: 2px 8px; border-radius: 2px; margin-bottom: 8px; }
159
- .sig-card-rarity.rarity-common { color: var(--rarity-common); border: 1px solid var(--rarity-common); }
160
- .sig-card-rarity.rarity-rare { color: var(--rarity-rare); border: 1px solid var(--rarity-rare); }
161
- .sig-card-rarity.rarity-epic { color: var(--rarity-epic); border: 1px solid var(--rarity-epic); }
162
- .sig-card-rarity.rarity-mythic { color: var(--rarity-mythic); border: 1px solid var(--rarity-mythic); }
163
  .sig-card-passive { font-size: 9px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--moses-dim); margin: 12px 0 4px; }
164
  .sig-card-effect { font-size: 10px; color: var(--moses-dim); font-style: italic; border-left: 2px solid #3A3324; padding: 6px 10px; margin-bottom: 14px; line-height: 1.5; }
165
- .sig-card.rarity-mythic .sig-card-yield { color: var(--rarity-mythic); }
166
- .sig-card.rarity-mythic .sig-card-name { color: var(--rarity-mythic); }
167
  .sig-card-footer {
168
  position: absolute; bottom: 16px; left: 24px; right: 24px;
169
  font-size: 9px; color: #5f573f; letter-spacing: 0.06em;
@@ -200,10 +211,6 @@ button.primary:hover, #compute-btn:hover { background: #d8a449 !important; }
200
  /* HF login button styling */
201
  #hf-login-btn { margin-bottom: 8px; }
202
 
203
- /* footprint flex line under the hero (Build Small badge) */
204
- #moses-footprint { margin-top: 8px; font-size: 10px; color: var(--moses-dim);
205
- letter-spacing: 0.05em; opacity: 0.85; }
206
-
207
  /* "Rank by" radio -> horizontal pill / segmented control (not a gray form) */
208
  #rank-by { border: none !important; background: transparent !important; padding: 0 !important; }
209
  #rank-by .wrap { display: flex !important; flex-wrap: wrap; gap: 6px; }
 
8
  --moses-line: #3A3324;
9
  --moses-ink: #E8E0CF;
10
  --moses-dim: #8a7f68;
11
+ --species-throughput: #6b7280;
12
+ --species-converter: #3b82f6;
13
+ --species-architect: #8b5cf6;
14
+ --species-cascade: #C4923A;
15
  }
16
  .gradio-container, .gradio-container * { font-family: ui-monospace, "SF Mono", Menlo, monospace !important; }
17
  .gradio-container { background: var(--moses-bg) !important; max-width: 1100px !important; margin: 0 auto !important; }
 
31
  margin: 0 !important;
32
  }
33
  #moses-hero p { color: var(--moses-dim) !important; font-size: 12px !important; margin: 6px 0 0 !important; }
34
+
35
  /* stat strip */
36
  #moses-stat-strip {
37
  display: flex; gap: 24px; margin-top: 10px;
 
39
  }
40
  #moses-stat-strip span { color: var(--moses-ink); font-weight: 700; }
41
 
42
+ /* Tab padding layout stabilization overrides */
43
+ .tabs { background: transparent !important; border: none !important; }
44
+ .tabitem {
45
+ background: transparent !important;
46
+ border: none !important;
47
+ padding: 16px 0px !important;
48
+ }
49
+ .tabitem > div { gap: 20px !important; }
50
  button.selected { color: var(--moses-gold) !important; border-bottom: 2px solid var(--moses-gold) !important; }
51
  .tab-nav button { color: var(--moses-dim) !important; font-size: 13px !important; letter-spacing: 0.06em; }
52
 
53
  .dataframe, table { background: var(--moses-card) !important; color: var(--moses-ink) !important;
54
+ border: 1px solid var(--moses-line) !important; font-size: 12px !important; width: 100% !important; }
55
  .dataframe thead th, table thead th { background: var(--moses-bg) !important; color: var(--moses-gold) !important;
56
  border-bottom: 1px solid var(--moses-gold) !important; font-size: 10px !important;
57
  letter-spacing: 0.06em !important; text-transform: uppercase; padding: 8px 6px !important; }
 
82
  .prose, .md, #moses-foot { color: var(--moses-dim) !important; font-size: 11px !important; }
83
  #moses-foot { border-top: 1px solid var(--moses-line); padding-top: 10px; margin-top: 16px; line-height: 1.7; }
84
 
85
+ /* Structural Board Alignment Layout */
86
+ .moses-board { font-family: ui-monospace, monospace; margin-top: 6px; width: 100% !important; box-sizing: border-box !important; }
87
+ .mb-head, .mb-row { display: grid; grid-template-columns: 32px 1.8fr 0.6fr 0.7fr 0.7fr 0.75fr 0.7fr 1.5fr;
88
+ align-items: center; gap: 12px; padding: 10px 12px; width: 100%; box-sizing: border-box; }
89
  .mb-head { color: #C4923A; font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;
90
  border-bottom: 1px solid #C4923A; }
91
  .mb-row { border-bottom: 1px solid #3A3324; color: #8a7f68; font-size: 12px; }
 
97
  color: var(--moses-ink) !important;
98
  }
99
  .mb-row.rank1 .mb-yval { color: var(--moses-gold); font-size: 14px; }
100
+
101
+ /* Species Classification Left Highlights */
102
+ .mb-row.species-throughput { border-left: 3px solid var(--species-throughput); }
103
+ .mb-row.species-converter { border-left: 3px solid var(--species-converter); }
104
+ .mb-row.species-architect { border-left: 3px solid var(--species-architect); }
105
+ .mb-row.species-cascade { border-left: 3px solid var(--species-cascade); }
106
  .mb-rank-1 { color: var(--moses-gold); font-weight: 700; }
107
  .mb-rank-2 { color: #a0a0a0; }
108
  .mb-rank-3 { color: #8a6a3a; }
 
132
  font-family: ui-monospace, monospace;
133
  position: relative;
134
  }
135
+ .sig-card.species-throughput { border: 1px solid var(--species-throughput); box-shadow: 0 0 20px rgba(107,114,128,0.12); }
136
+ .sig-card.species-converter { border: 1px solid var(--species-converter); box-shadow: 0 0 24px rgba(59,130,246,0.15); }
137
+ .sig-card.species-architect { border: 1px solid var(--species-architect); box-shadow: 0 0 28px rgba(139,92,246,0.18); }
138
+ .sig-card.species-cascade { border: 1px solid var(--species-cascade); box-shadow: 0 0 40px rgba(196,146,58,0.22), inset 0 1px 0 rgba(196,146,58,0.15); }
139
  .sig-card-watermark {
140
  position: absolute; top: 14px; right: 16px;
141
  font-size: 9px; color: var(--moses-dim); letter-spacing: 0.1em;
 
167
  font-style: italic;
168
  }
169
  .sig-card-rarity { display: inline-block; font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; padding: 2px 8px; border-radius: 2px; margin-bottom: 8px; }
170
+ .sig-card-rarity.species-throughput { color: var(--species-throughput); border: 1px solid var(--species-throughput); }
171
+ .sig-card-rarity.species-converter { color: var(--species-converter); border: 1px solid var(--species-converter); }
172
+ .sig-card-rarity.species-architect { color: var(--species-architect); border: 1px solid var(--species-architect); }
173
+ .sig-card-rarity.species-cascade { color: var(--species-cascade); border: 1px solid var(--species-cascade); }
174
  .sig-card-passive { font-size: 9px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--moses-dim); margin: 12px 0 4px; }
175
  .sig-card-effect { font-size: 10px; color: var(--moses-dim); font-style: italic; border-left: 2px solid #3A3324; padding: 6px 10px; margin-bottom: 14px; line-height: 1.5; }
176
+ .sig-card.species-cascade .sig-card-yield { color: var(--species-cascade); }
177
+ .sig-card.species-cascade .sig-card-name { color: var(--species-cascade); }
178
  .sig-card-footer {
179
  position: absolute; bottom: 16px; left: 24px; right: 24px;
180
  font-size: 9px; color: #5f573f; letter-spacing: 0.06em;
 
211
  /* HF login button styling */
212
  #hf-login-btn { margin-bottom: 8px; }
213
 
 
 
 
 
214
  /* "Rank by" radio -> horizontal pill / segmented control (not a gray form) */
215
  #rank-by { border: none !important; background: transparent !important; padding: 0 !important; }
216
  #rank-by .wrap { display: flex !important; flex-wrap: wrap; gap: 6px; }