zli12321 commited on
Commit
e57ffdb
·
verified ·
1 Parent(s): f1b1a0b

Deploy IntelligenceLab website

Browse files
Files changed (4) hide show
  1. README.md +1 -1
  2. app.js +0 -3
  3. index.html +9 -105
  4. styles.css +6 -68
README.md CHANGED
@@ -7,4 +7,4 @@ app_file: index.html
7
  pinned: false
8
  ---
9
 
10
- IntelligenceLab AI for Science collaboration site: an open call for biology and materials science graduate students. Static site (`index.html`, `styles.css`, `app.js`, `live.js`, `terminal.js`, `assets/`).
 
7
  pinned: false
8
  ---
9
 
10
+ IntelligenceLab AI for Science collaboration site: an open call for biology and materials science graduate students. Static site (`index.html`, `styles.css`, `app.js`, `live.js`, `assets/`).
app.js CHANGED
@@ -315,9 +315,6 @@
315
  'How I use AI in my research today:',
316
  value('ai_use') || '-',
317
  '',
318
- 'Where I would most like help:',
319
- value('help') || '-',
320
- '',
321
  `How I'd like to take part: ${data.getAll('involve').join(', ') || 'Not sure yet'}`,
322
  ];
323
  if (value('interest')) lines.push(`Demo that caught my eye: ${value('interest')}`);
 
315
  'How I use AI in my research today:',
316
  value('ai_use') || '-',
317
  '',
 
 
 
318
  `How I'd like to take part: ${data.getAll('involve').join(', ') || 'Not sure yet'}`,
319
  ];
320
  if (value('interest')) lines.push(`Demo that caught my eye: ${value('interest')}`);
index.html CHANGED
@@ -64,8 +64,8 @@
64
  <div class="container hero-grid">
65
  <div class="hero-copy">
66
  <p class="eyebrow"><span class="pulse-dot" aria-hidden="true"></span>Open call · Biology &amp; materials science</p>
67
- <h1 id="hero-title">Let's build AI that actually <em>helps your research</em>.</h1>
68
- <p class="lede">We're AI researchers who teach language-model agents to use real scientific software. Now we want to learn from the people doing the science: how you work, where AI already helps, and where it falls short. If you're a graduate student in biology or materials science, come shape what we build and write the paper with us.</p>
69
  <div class="hero-actions">
70
  <a class="btn btn-dark" href="#join">Join the collaboration
71
  <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 10h11m-4-4 4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
@@ -93,9 +93,10 @@
93
  <li>University of Georgia</li>
94
  <li>National University of Singapore</li>
95
  <li>Indiana University</li>
96
- <li>The Hong Kong Polytechnic University</li>
 
97
  </ul>
98
- <p class="team-more">and collaborators at other universities</p>
99
  </div>
100
  </section>
101
 
@@ -261,10 +262,10 @@
261
  <p>No preparation needed. These are the kinds of things we'd talk about in a first conversation.</p>
262
  </div>
263
  <ol class="question-list">
264
- <li>Which part of your week feels most like busywork?</li>
265
  <li>Where do you already use AI, and where have you stopped trusting it?</li>
266
  <li>What software, instruments, or pipelines does your work depend on?</li>
267
- <li>How do you check that a result is right before you believe it?</li>
268
  <li>Which task would you hand to a reliable assistant tomorrow?</li>
269
  <li>What would an AI agent need to show before you'd publish its result?</li>
270
  </ol>
@@ -396,56 +397,6 @@
396
  <div class="ex-more">
397
  <button class="btn btn-ghost" id="ex-more" type="button" aria-expanded="false">Show more demos</button>
398
  </div>
399
-
400
- <div class="chores">
401
- <div class="chores-head reveal">
402
- <h3>Everyday research computing, too</h3>
403
- <p>Plenty of research time goes to installing tools, managing data, and fixing broken environments. Our agents practice that as well. Each replay shows commands from the task's own reference solution.</p>
404
- </div>
405
- <div class="tx-grid" id="tx-grid">
406
- <!--TERMINAL_CARDS:START-->
407
- <article class="tx-card reveal" data-index="0" tabindex="0" role="button" aria-label="Open task: Install an HPC scheduler&#x27;s Python bindings, verified">
408
- <div class="tx-term" aria-hidden="true">
409
- <div class="tx-bar"><i></i><i></i><i></i><em>fluxrm/flux-core:focal-v0.48.0</em></div>
410
- <pre class="tx-screen"><code><span class="tx-cmd"><b>$</b> ACTUAL_HASH=$(sha256sum &quot;$TARBALL&quot; | awk &#x27;{print $1}&#x27;)</span><span class="tx-cmd"><b>$</b> pip install --no-compile &quot;$TARBALL&quot;</span><span class="tx-cmd"><b>$</b> find &quot;$FLUX_ROOT&quot; -type f ! -name &#x27;*.pyc&#x27; -exec sha256sum {} \; | sort -k2 &gt; &quot;$INSTALLED_MANIFEST&quot;</span><span class="tx-cmd"><b>$</b> cp &quot;$INSTALLED_MANIFEST&quot; &quot;$EXPECTED_MANIFEST&quot;</span><span class="tx-cmd"><b>$</b> flux start --test-size=4 bash -c &#x27;…&#x27;</span></code></pre>
411
- </div>
412
- <div class="tx-body">
413
- <p class="tx-area">HPC &amp; clusters</p>
414
- <h3>Install an HPC scheduler&#x27;s Python bindings, verified</h3>
415
- <p>Install the Flux Python package from the tarball at /app/flux-python-0.48.0rc6.tar.gz after verifying its integrity against the provided checksum file.</p>
416
- <ul class="tx-meta"><li>171-line reference solution</li><li>Checked in a fresh sandbox</li></ul>
417
- </div>
418
- <span class="ex-open" aria-hidden="true">Explore ↗</span>
419
- </article>
420
- <article class="tx-card reveal" data-index="1" tabindex="0" role="button" aria-label="Open task: Version a dataset with DVC and reconcile its history">
421
- <div class="tx-term" aria-hidden="true">
422
- <div class="tx-bar"><i></i><i></i><i></i><em>ubuntu:22.04</em></div>
423
- <pre class="tx-screen"><code><span class="tx-cmd"><b>$</b> dvc add dataset/foo</span><span class="tx-cmd"><b>$</b> dvc add dataset/test/0</span><span class="tx-cmd"><b>$</b> git add dataset/foo.dvc dataset/test/0.dvc</span><span class="tx-cmd"><b>$</b> git commit -m &quot;DVC track dataset items&quot;</span><span class="tx-cmd"><b>$</b> git diff &quot;${PARENT}..${ADD_COMMIT}&quot; -- &quot;$dvc_file&quot; &gt; &quot;$patch_path&quot;</span></code></pre>
424
- </div>
425
- <div class="tx-body">
426
- <p class="tx-area">Research data management</p>
427
- <h3>Version a dataset with DVC and reconcile its history</h3>
428
- <p>Set up a DVC-tracked dataset under /app/dataset/ with two items: dataset/foo and dataset/test/0.</p>
429
- <ul class="tx-meta"><li>313-line reference solution</li><li>Checked in a fresh sandbox</li></ul>
430
- </div>
431
- <span class="ex-open" aria-hidden="true">Explore ↗</span>
432
- </article>
433
- <article class="tx-card reveal" data-index="2" tabindex="0" role="button" aria-label="Open task: Diagnose and fix a Python dependency bug">
434
- <div class="tx-term" aria-hidden="true">
435
- <div class="tx-bar"><i></i><i></i><i></i><em>python:3.11-slim</em></div>
436
- <pre class="tx-screen"><code><span class="tx-cmd"><b>$</b> python /app/bug.py &gt; /app/result.txt</span><span class="tx-cmd"><b>$</b> /app/validate_output.py /app/result.txt &gt; /app/validation_stdout.txt 2&gt; /app/validation_stderr.txt</span><span class="tx-cmd"><b>$</b> pip install &quot;environs==${REQUIRED_VERSION}&quot; &#x27;marshmallow&lt;4.0.0&#x27;</span><span class="tx-cmd"><b>$</b> python /app/bug.py &gt; /app/fixed.txt</span></code></pre>
437
- </div>
438
- <div class="tx-body">
439
- <p class="tx-area">Python environments</p>
440
- <h3>Diagnose and fix a Python dependency bug</h3>
441
- <p>In /app, diagnose and fix the environs URL parsing bug.</p>
442
- <ul class="tx-meta"><li>202-line reference solution</li><li>Checked in a fresh sandbox</li></ul>
443
- </div>
444
- <span class="ex-open" aria-hidden="true">Explore ↗</span>
445
- </article>
446
- <!--TERMINAL_CARDS:END-->
447
- </div>
448
- </div>
449
  </div>
450
  </section>
451
 
@@ -596,14 +547,13 @@
596
  <section class="section" id="faq" aria-labelledby="faq-title">
597
  <div class="container faq-grid">
598
  <div class="faq-head reveal">
599
- <p class="kicker">Questions</p>
600
- <h2 id="faq-title">Before you write to us.</h2>
601
  <p class="sub">Anything else? Ask us directly. We're happy to talk it through.</p>
602
  </div>
603
  <div class="faq-list reveal">
604
  <details open>
605
  <summary>Who are you?</summary>
606
- <p>AI researchers from the University of Maryland, the University of Georgia, the National University of Singapore, Indiana University, The Hong Kong Polytechnic University, and other universities. We build and train AI agents that work with real software, and we publish our results on arXiv.</p>
607
  </details>
608
  <details>
609
  <summary>Do I need machine-learning experience?</summary>
@@ -652,7 +602,6 @@
652
  </fieldset>
653
  <label>Your research in a sentence<input name="topic" placeholder="e.g. segmenting neurons in light-sheet images"></label>
654
  <label>How do you use AI in your research today?<textarea name="ai_use" rows="3" placeholder="Writing code, reading papers, structure prediction, nothing yet…"></textarea></label>
655
- <label>Which part of your work would you most like help with?<textarea name="help" rows="3" placeholder="The step that takes the longest or breaks most often"></textarea></label>
656
  <fieldset class="pill-set">
657
  <legend>How would you like to take part?</legend>
658
  <div class="pills">
@@ -730,53 +679,8 @@
730
  </div>
731
  </div>
732
 
733
- <div class="ex-modal" id="tx-modal" data-subject="AI for Science, research computing" hidden>
734
- <div class="ex-backdrop" data-tx-close></div>
735
- <div class="ex-sheet" role="dialog" aria-modal="true" aria-labelledby="txm-title">
736
- <header class="ex-head">
737
- <div>
738
- <p class="ex-domain" id="txm-area"></p>
739
- <h3 id="txm-title"></h3>
740
- <ul class="ex-tracks" id="txm-tags"></ul>
741
- </div>
742
- <div class="ex-nav">
743
- <button class="icon-btn" type="button" data-tx-prev aria-label="Previous task">←</button>
744
- <button class="icon-btn" type="button" data-tx-next aria-label="Next task">→</button>
745
- <button class="icon-btn" type="button" data-tx-close aria-label="Close">✕</button>
746
- </div>
747
- </header>
748
- <div class="ex-body">
749
- <div class="txm-grid">
750
- <div class="txm-col">
751
- <h4 class="txm-h">Instruction the agent receives</h4>
752
- <div class="txm-instruction" id="txm-instruction"></div>
753
- <dl class="txm-facts">
754
- <div><dt>Environment</dt><dd id="txm-base"></dd></div>
755
- <div><dt>Reference solution</dt><dd id="txm-lines"></dd></div>
756
- <div><dt>Checking</dt><dd>The reference solution passes every check in a fresh sandbox, and each check is stated in the instruction.</dd></div>
757
- </dl>
758
- </div>
759
- <div class="txm-col">
760
- <h4 class="txm-h">Replay of the reference solution</h4>
761
- <div class="tx-term tx-term-lg" aria-hidden="true">
762
- <div class="tx-bar"><i></i><i></i><i></i><em id="txm-term-base"></em></div>
763
- <pre class="tx-screen" id="txm-replay"><code></code></pre>
764
- </div>
765
- <h4 class="txm-h">Excerpt of <code>solve.sh</code></h4>
766
- <pre class="txm-code" id="txm-code"></pre>
767
- </div>
768
- </div>
769
- <a class="btn btn-dark" id="txm-cta" data-contact data-subject="AI for Science, research computing" href="#join">Email us about a task like this
770
- <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 10h11m-4-4 4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
771
- </a>
772
- </div>
773
- </div>
774
- </div>
775
-
776
  <script type="application/json" id="examples-data">[{"kind": "micro", "title": "Microscopy cell segmentation and counting", "domain": "Life & Molecular Sciences", "color": "#16a34a", "description": "Reconstruct cell segmentation and measurement behavior across channel, illumination, threshold, object size, and measurement feature.", "why": "The same steps as counting nuclei or measuring cell shape in your own fluorescence images.", "tags": ["Biology", "Microscopy"], "software": ["CellProfiler", "scikit-image", "Bio-Formats"], "artifacts": ["label-mask image", "object-measurements CSV"], "axes": ["channel selection", "illumination correction", "measurement feature", "object size range", "threshold method"], "outputs": ["object count", "area sum", "eccentricity sum", "threshold", "minimum size"], "img": "assets/examples/micro-detail.webp", "alt": "Microscopy label masks from public runs"}, {"kind": "foam", "title": "OpenFOAM 2-D dam-break CFD", "domain": "Physical & Engineering Simulation", "color": "#0891b2", "description": "Reconstruct a 2-D dam-break CFD workflow across water height, mesh, gravity, and simulation time.", "why": "Meshing, boundary conditions, and solver settings: the setup behind any flow or transport simulation.", "tags": ["Simulation", "Fluid dynamics"], "software": ["OpenFOAM"], "artifacts": ["blockMesh log", "polyMesh", "initial field files", "case dictionaries"], "axes": ["water height", "mesh", "gravity", "time"], "outputs": ["mesh statistics", "field summaries", "residual/probe behavior"], "img": "assets/examples/foam-detail.webp", "alt": "OpenFOAM dam-break mesh drawn from the public polyMesh"}, {"kind": "stl", "title": "OpenSCAD / BOSL2 parametric fan duct", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Regenerate a swept fan-duct mount STL whose inlet size, outlet size, bend angle, and rib count change the geometry.", "why": "Parametric CAD for 3D-printed sample holders, fixtures, and flow cells.", "tags": ["Lab hardware", "CAD"], "software": ["OpenSCAD", "BOSL2"], "artifacts": ["STL mesh", "geometry metrics JSON"], "axes": ["inlet size", "outlet size", "bend angle", "rib count"], "outputs": ["bounding box", "volume", "surface area", "connected components", "sampled surface distance"], "img": "assets/examples/stl-detail.webp", "alt": "Rendered fan-duct mesh from a public OpenSCAD run"}, {"kind": "astro", "title": "Astronomy FITS/WCS cutout and photometry", "domain": "Earth & Space Sciences", "color": "#db2777", "description": "Reconstruct FITS/WCS cutout and photometry behavior under aperture, background, clipping, threshold, and coordinate-frame interventions.", "why": "Aperture photometry and background subtraction, the same math as quantifying spots or bands in noisy images.", "tags": ["Imaging", "Signal extraction"], "software": ["Astropy", "Photutils"], "artifacts": ["FITS image", "photometry catalog CSV"], "axes": ["aperture radius", "background model", "sigma clip", "source threshold", "WCS frame"], "outputs": ["flux", "coordinate frame", "median", "shape", "standard deviation"], "img": "assets/examples/astro-detail.webp", "alt": "Astronomy FITS cutouts from public runs"}, {"kind": "color", "title": "Color-space and tone-curve pipeline", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Infer a color pipeline across color space, white point, tone curve, demosaicing, and compression quality.", "why": "The color-space math behind calibrated imaging, colorimetric assays, and optical characterization.", "tags": ["Imaging", "Optics"], "software": ["colour-science", "ImageMagick", "scikit-image"], "artifacts": ["color measurements JSON", "PPM preview"], "axes": ["color space", "white point", "tone curve", "demosaic method", "compression quality"], "outputs": ["mean color", "image shape", "XYZ tristimulus values"], "img": "assets/examples/color-detail.webp", "alt": "Color-pipeline previews from public runs"}, {"kind": "ocr", "title": "Tesseract table-image OCR", "domain": "Data & Document Workflows", "color": "#d97706", "description": "Reconstruct how DPI, font, language, metadata, and page range affect OCR behavior.", "why": "Reading numbers out of scanned tables, the first step in mining property data from papers.", "tags": ["Literature", "Data extraction"], "software": ["Pandoc", "Poppler", "Tesseract", "QPDF"], "artifacts": ["OCR summary JSON", "page-preview image"], "axes": ["DPI", "font", "language", "metadata", "page range"], "outputs": ["ink", "line count", "page size", "text digest", "text length"], "img": "assets/examples/ocr-detail.webp", "alt": "OCR page preview from a public run"}, {"kind": "robot", "title": "MuJoCo / URDF mass-inertia repair", "domain": "Physical & Engineering Simulation", "color": "#0891b2", "description": "Infer robot state and trajectory behavior under actuator, collision, pose, joint-limit, and target interventions.", "why": "Physical models with masses, inertias, and joint limits, as used to simulate lab robots before running them.", "tags": ["Lab automation", "Physics"], "software": ["MuJoCo", "URDF/MJCF tooling"], "artifacts": ["URDF model", "trajectory CSV", "control summary"], "axes": ["actuator gain", "collision margin", "initial pose", "joint limit", "trajectory target"], "outputs": ["gain", "nq", "nv", "qpos", "qvel"], "img": "assets/examples/robot-detail.webp", "alt": "MuJoCo joint-position trajectories across public scenarios"}, {"kind": "blender", "title": "Blender cloth flag scene", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Reconstruct cloth-scene behavior under wind, pin-group, frame, and subdivision interventions.", "why": "A physics simulation whose outcome shifts with wind, constraints, and resolution.", "tags": ["Simulation", "Physics"], "software": ["Blender"], "artifacts": ["scene graph JSON"], "axes": ["wind strength", "pin group", "frame", "cloth subdiv"], "outputs": ["evaluated objects", "frame", "materials", "node groups", "object counts", "rotation"], "img": "assets/examples/blender-detail.webp", "alt": "Blender cloth scene rotation dial across public scenarios"}, {"kind": "drc", "title": "KiCad LED-matrix driver PCB", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Reconstruct LED-matrix driver board outputs (DRC report and project files) under row, column, driver, and routing interventions.", "why": "Design-rule checks on circuit boards, like the custom electronics inside lab instruments.", "tags": ["Instrumentation", "Electronics"], "software": ["KiCad"], "artifacts": ["DRC report", "project file list"], "axes": ["rows", "cols", "driver", "routing"], "outputs": ["DRC report summary", "project file inventory"], "img": "assets/examples/drc-detail.webp", "alt": "KiCad board with design-rule findings plotted at their positions"}, {"kind": "container", "title": "Container SBOM and supply-chain attestation", "domain": "Software & Formal Systems", "color": "#2563eb", "description": "Infer coupled container base-image, package-set, label, entrypoint, and SBOM-scope behavior.", "why": "Recording exactly which software went into an environment, the backbone of reproducible analysis.", "tags": ["Reproducibility", "Software"], "software": ["Hadolint", "Syft", "Skopeo"], "artifacts": ["Dockerfile", "in-toto attestation", "SPDX SBOM"], "axes": ["base image", "entrypoint", "labels", "package set", "SBOM scope"], "outputs": ["attestation", "base", "layer count", "merkle", "vuln budget"], "img": "assets/examples/container-detail.webp", "alt": "Container image layers and attestation from a public run"}]</script>
777
- <script type="application/json" id="terminal-data">{"tasks": [{"title": "Install an HPC scheduler's Python bindings, verified", "area": "HPC & clusters", "summary": "Install the Flux Python package from the tarball at /app/flux-python-0.48.0rc6.tar.gz after verifying its integrity against the provided checksum file.", "instruction": "<p>Install the Flux Python package from the tarball at /app/flux-python-0.48.0rc6.tar.gz after verifying its integrity against the provided checksum file.<\/p><p>The expected manifest file may be outdated; if the installed layout differs, update the manifest and note the discrepancy in the installation report.<\/p><p>The installation report at /app/installation_report.txt must include the verified tarball hash, describe any manifest changes, and also contain additional package metadata specified by the configuration at /app/config/metadata.json — follow that config&#x27;s instructions for intermediate reporting.<\/p><p>Finally, use the Flux Python bindings to produce /app/result.txt containing exactly the string found in /app/config/expected.txt.<\/p>", "base": "fluxrm/flux-core:focal-v0.48.0", "lines": 171, "tags": ["flux", "hpc", "job-scheduling", "python-bindings"], "replay": [["$", "ACTUAL_HASH=$(sha256sum \"$TARBALL\" | awk '{print $1}')"], ["$", "pip install --no-compile \"$TARBALL\""], ["$", "find \"$FLUX_ROOT\" -type f ! -name '*.pyc' -exec sha256sum {} \\; | sort -k2 > \"$INSTALLED_MANIFEST\""], ["$", "cp \"$INSTALLED_MANIFEST\" \"$EXPECTED_MANIFEST\""], ["$", "flux start --test-size=4 bash -c '…'"]], "code": "set -euo pipefail\nTARBALL=\"/app/flux-python-0.48.0rc6.tar.gz\"\nCHECKSUM_FILE=\"/app/checksum.sha256\"\nVALIDATION_FILE=\"/app/validation.txt\"\nCONFIG_FILE=\"/app/config/expected.txt\"\nRESULT_FILE=\"/app/result.txt\"\nEXPECTED_MANIFEST=\"/app/expected_manifest.txt\"\nINSTALLED_MANIFEST=\"/app/installed_manifest.txt\"\nINSTALLATION_REPORT=\"/app/installation_report.txt\"\nMETADATA_CONFIG=\"/app/config/metadata.json\"\necho \"=== INSPECT: verify required inputs exist ===\"\nfor f in \"$TARBALL\" \"$CHECKSUM_FILE\" \"$EXPECTED_MANIFEST\" \"$CONFIG_FILE\" \"$METADATA_CONFIG\"; do\n if [ ! -f \"$f\" ]; then\n echo \"ERROR: Required file $f not found\" >&2\n exit 1\n fi\ndone\necho \"=== INSPECT: read metadata configuration ===\"\nMETADATA_FILE=$(python3 -c \"import json; cfg=json.load(open('$METADATA_CONFIG')); print(cfg['metadata_file'])\")\nFIELDS=$(python3 -c \"import json; cfg=json.load(open('$METADATA_CONFIG')); print(' '.join(cfg['required_metadata']))\")\necho \"Metadata will be gathered for fields: $FIELDS\"\necho \"Intermediate metadata file: /app/$METADATA_FILE\"\necho \"=== DERIVE: verify tarball hash ===\"\nACTUAL_HASH=$(sha256sum \"$TARBALL\" | awk '{print $1}')\nEXPECTED_HASH=$(awk '{print $1}' \"$CHECKSUM_FILE\")\nif [ \"$ACTUAL_HASH\" != \"$EXPECTED_HASH\" ]; then\n echo \"ERROR: Tarball checksum mismatch\" >&2\n exit 1\nfi\necho \"=== VALIDATE checksum OK, writing validation report ===\""}, {"title": "Version a dataset with DVC and reconcile its history", "area": "Research data management", "summary": "Set up a DVC-tracked dataset under /app/dataset/ with two items: dataset/foo and dataset/test/0.", "instruction": "<p>Set up a DVC-tracked dataset under /app/dataset/ with two items: dataset/foo and dataset/test/0.<\/p><p>Track both with DVC, remove the original data, and commit the resulting .dvc files.<\/p><p>Then produce the following artifacts under /app: dvc_inventory.json, dvc_reconciliation.md, dvc_changes.diff, dvc_status.txt, and a directory /app/patches/ containing a patch file for each of dataset/foo.dvc and dataset/test/0.dvc that captures the changes introduced when that file was first committed.<\/p><p>The reconciliation report must document the absence of the data, the git commits that introduced each .dvc file (SHA and message), and the baseline tag (name and commit SHA).<\/p><p>The diff should be taken from that tag to HEAD.<\/p><p>The repository already has git and DVC initialized, and a git tag marks the initial DVC initialization; discover and use that tag as the baseline.<\/p><p>Refer to /app/task_files/ for the required formats of the inventory and the reconciliation report.<\/p>", "base": "ubuntu:22.04", "lines": 313, "tags": ["dvc", "data-versioning", "version-control"], "replay": [["$", "dvc add dataset/foo"], ["$", "dvc add dataset/test/0"], ["$", "git add dataset/foo.dvc dataset/test/0.dvc"], ["$", "git commit -m \"DVC track dataset items\""], ["$", "git diff \"${PARENT}..${ADD_COMMIT}\" -- \"$dvc_file\" > \"$patch_path\""]], "code": "set -euo pipefail\nif [ -s /app/dvc_changes.diff ] && \\\n [ -s /app/dvc_reconciliation.md ] && \\\n [ -s /app/dvc_inventory.json ] && \\\n [ -s /app/dvc_status.txt ] && \\\n grep -q 'Commit message:' /app/dvc_reconciliation.md && \\\n grep -q 'Baseline tag:' /app/dvc_reconciliation.md && \\\n [ -d /app/patches ] && \\\n [ \"$(ls -1 /app/patches/*.patch 2>/dev/null | wc -l)\" -ge 2 ]; then\n echo \"Required artifacts with commit messages, baseline tag, and patches already present. Nothing to do.\"\n exit 0\nfi\ncd /app\nrm -f dataset/foo.dvc dataset/test/0.dvc\nrm -rf dataset/foo dataset/test/0\nrm -f /app/dvc_reconciliation.md \\\n /app/dvc_inventory.json \\\n /app/dvc_changes.diff \\\n /app/dvc_status.txt\nrm -rf /app/patches\nINIT_COMMIT=$(git rev-list --max-parents=0 HEAD)\nif [ -z \"$INIT_COMMIT\" ]; then\n echo \"ERROR: could not determine initial commit\"\n exit 1\nfi\necho \"Initial commit: $INIT_COMMIT\"\nreadarray -t TAGS < <(git tag --points-at \"$INIT_COMMIT\")\nif [ \"${#TAGS[@]}\" -eq 0 ]; then\n echo \"ERROR: no tag found pointing to the initial commit\"\n exit 1"}, {"title": "Diagnose and fix a Python dependency bug", "area": "Python environments", "summary": "In /app, diagnose and fix the environs URL parsing bug.", "instruction": "<p>In /app, diagnose and fix the environs URL parsing bug.<\/p><p>Run bug.py to capture the original output and use validate_output.py to diagnose the failure.<\/p><p>Consult changelog.md to determine the required environs version, upgrade the library, and produce a corrected output in fixed.txt.<\/p><p>Write a test suite test_bug.py covering both mongodb and mongodb+srv URL schemes.<\/p><p>The suite must include a test that runs validate_output.py against bug.py’s output after the fix and asserts the validator exits successfully.<\/p><p>Run the tests and save the report as test_report.txt.<\/p><p>Finally, create validation_passed.txt and a debug summary debug_summary.txt describing the error and the fix.<\/p>", "base": "python:3.11-slim", "lines": 202, "tags": ["python", "library-bug", "url-parsing", "environs"], "replay": [["$", "python /app/bug.py > /app/result.txt"], ["$", "/app/validate_output.py /app/result.txt > /app/validation_stdout.txt 2> /app/validation_stderr.txt"], ["$", "pip install \"environs==${REQUIRED_VERSION}\" 'marshmallow<4.0.0'"], ["$", "python /app/bug.py > /app/fixed.txt"]], "code": "set -euo pipefail\necho \"Ensuring pytest is available\"\npython -m pytest --version >/dev/null 2>&1 || pip install pytest\necho \"Stage 1: Create original bug.py (known buggy)\"\ncat > /app/bug.py << 'EOF'\nfrom environs import Env\nenv = Env()\nMONGODB_URL = env.url(\n \"MONGODB_URL\",\n default=\"mongodb://user:pass@mongo.example.local/db?authSource=admin\",\n schemes={\"mongodb\", \"mongodb+srv\"},\n require_tld=False,\n)\nprint(MONGODB_URL)\nEOF\necho \"Stage 2: Run bug.py and capture original output\"\npython /app/bug.py > /app/result.txt\necho \"Stage 3: Validate original output and interpret failure\"\nset +e\n/app/validate_output.py /app/result.txt > /app/validation_stdout.txt 2> /app/validation_stderr.txt\nVALIDATION_EXIT=$?\nset -e\nif [ $VALIDATION_EXIT -eq 0 ]; then\n echo \"ERROR: validate_output.py unexpectedly succeeded on buggy output\" >&2\n exit 1\nfi\nif ! grep -q \"ParseResult\" /app/validation_stderr.txt; then\n echo \"ERROR: Expected 'ParseResult' indication in validator failure output\" >&2\n exit 1\nfi"}]}</script>
778
  <script src="app.js" defer></script>
779
  <script src="live.js" defer></script>
780
- <script src="terminal.js" defer></script>
781
  </body>
782
  </html>
 
64
  <div class="container hero-grid">
65
  <div class="hero-copy">
66
  <p class="eyebrow"><span class="pulse-dot" aria-hidden="true"></span>Open call · Biology &amp; materials science</p>
67
+ <h1 id="hero-title">Building AI that actually <em>helps your research</em>.</h1>
68
+ <p class="lede">We're AI researchers who teach language-model agents to use real scientific software. We already have research directions and tasks in mind. What we need is your expertise: propose the verifiers that check whether an agent's result is scientifically right, and help us decide how its work should be evaluated. If you're a graduate student in biology or materials science, come design them with us and write the paper together.</p>
69
  <div class="hero-actions">
70
  <a class="btn btn-dark" href="#join">Join the collaboration
71
  <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 10h11m-4-4 4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
 
93
  <li>University of Georgia</li>
94
  <li>National University of Singapore</li>
95
  <li>Indiana University</li>
96
+ <li>Carnegie Mellon University</li>
97
+ <li>University of Pennsylvania</li>
98
  </ul>
99
+ <p class="team-more">and we're looking for more collaborators</p>
100
  </div>
101
  </section>
102
 
 
262
  <p>No preparation needed. These are the kinds of things we'd talk about in a first conversation.</p>
263
  </div>
264
  <ol class="question-list">
265
+ <li>Which parts of your work do you think AI could help with?</li>
266
  <li>Where do you already use AI, and where have you stopped trusting it?</li>
267
  <li>What software, instruments, or pipelines does your work depend on?</li>
268
+ <li>How would you evaluate whether an agent is doing the job well or badly?</li>
269
  <li>Which task would you hand to a reliable assistant tomorrow?</li>
270
  <li>What would an AI agent need to show before you'd publish its result?</li>
271
  </ol>
 
397
  <div class="ex-more">
398
  <button class="btn btn-ghost" id="ex-more" type="button" aria-expanded="false">Show more demos</button>
399
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
400
  </div>
401
  </section>
402
 
 
547
  <section class="section" id="faq" aria-labelledby="faq-title">
548
  <div class="container faq-grid">
549
  <div class="faq-head reveal">
550
+ <h2 class="kicker" id="faq-title">Questions</h2>
 
551
  <p class="sub">Anything else? Ask us directly. We're happy to talk it through.</p>
552
  </div>
553
  <div class="faq-list reveal">
554
  <details open>
555
  <summary>Who are you?</summary>
556
+ <p>AI researchers from the University of Maryland, the University of Georgia, the National University of Singapore, Indiana University, Carnegie Mellon University, and the University of Pennsylvania. We build and train AI agents that work with real software, we publish our results on arXiv, and we're looking for more collaborators.</p>
557
  </details>
558
  <details>
559
  <summary>Do I need machine-learning experience?</summary>
 
602
  </fieldset>
603
  <label>Your research in a sentence<input name="topic" placeholder="e.g. segmenting neurons in light-sheet images"></label>
604
  <label>How do you use AI in your research today?<textarea name="ai_use" rows="3" placeholder="Writing code, reading papers, structure prediction, nothing yet…"></textarea></label>
 
605
  <fieldset class="pill-set">
606
  <legend>How would you like to take part?</legend>
607
  <div class="pills">
 
679
  </div>
680
  </div>
681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
  <script type="application/json" id="examples-data">[{"kind": "micro", "title": "Microscopy cell segmentation and counting", "domain": "Life & Molecular Sciences", "color": "#16a34a", "description": "Reconstruct cell segmentation and measurement behavior across channel, illumination, threshold, object size, and measurement feature.", "why": "The same steps as counting nuclei or measuring cell shape in your own fluorescence images.", "tags": ["Biology", "Microscopy"], "software": ["CellProfiler", "scikit-image", "Bio-Formats"], "artifacts": ["label-mask image", "object-measurements CSV"], "axes": ["channel selection", "illumination correction", "measurement feature", "object size range", "threshold method"], "outputs": ["object count", "area sum", "eccentricity sum", "threshold", "minimum size"], "img": "assets/examples/micro-detail.webp", "alt": "Microscopy label masks from public runs"}, {"kind": "foam", "title": "OpenFOAM 2-D dam-break CFD", "domain": "Physical & Engineering Simulation", "color": "#0891b2", "description": "Reconstruct a 2-D dam-break CFD workflow across water height, mesh, gravity, and simulation time.", "why": "Meshing, boundary conditions, and solver settings: the setup behind any flow or transport simulation.", "tags": ["Simulation", "Fluid dynamics"], "software": ["OpenFOAM"], "artifacts": ["blockMesh log", "polyMesh", "initial field files", "case dictionaries"], "axes": ["water height", "mesh", "gravity", "time"], "outputs": ["mesh statistics", "field summaries", "residual/probe behavior"], "img": "assets/examples/foam-detail.webp", "alt": "OpenFOAM dam-break mesh drawn from the public polyMesh"}, {"kind": "stl", "title": "OpenSCAD / BOSL2 parametric fan duct", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Regenerate a swept fan-duct mount STL whose inlet size, outlet size, bend angle, and rib count change the geometry.", "why": "Parametric CAD for 3D-printed sample holders, fixtures, and flow cells.", "tags": ["Lab hardware", "CAD"], "software": ["OpenSCAD", "BOSL2"], "artifacts": ["STL mesh", "geometry metrics JSON"], "axes": ["inlet size", "outlet size", "bend angle", "rib count"], "outputs": ["bounding box", "volume", "surface area", "connected components", "sampled surface distance"], "img": "assets/examples/stl-detail.webp", "alt": "Rendered fan-duct mesh from a public OpenSCAD run"}, {"kind": "astro", "title": "Astronomy FITS/WCS cutout and photometry", "domain": "Earth & Space Sciences", "color": "#db2777", "description": "Reconstruct FITS/WCS cutout and photometry behavior under aperture, background, clipping, threshold, and coordinate-frame interventions.", "why": "Aperture photometry and background subtraction, the same math as quantifying spots or bands in noisy images.", "tags": ["Imaging", "Signal extraction"], "software": ["Astropy", "Photutils"], "artifacts": ["FITS image", "photometry catalog CSV"], "axes": ["aperture radius", "background model", "sigma clip", "source threshold", "WCS frame"], "outputs": ["flux", "coordinate frame", "median", "shape", "standard deviation"], "img": "assets/examples/astro-detail.webp", "alt": "Astronomy FITS cutouts from public runs"}, {"kind": "color", "title": "Color-space and tone-curve pipeline", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Infer a color pipeline across color space, white point, tone curve, demosaicing, and compression quality.", "why": "The color-space math behind calibrated imaging, colorimetric assays, and optical characterization.", "tags": ["Imaging", "Optics"], "software": ["colour-science", "ImageMagick", "scikit-image"], "artifacts": ["color measurements JSON", "PPM preview"], "axes": ["color space", "white point", "tone curve", "demosaic method", "compression quality"], "outputs": ["mean color", "image shape", "XYZ tristimulus values"], "img": "assets/examples/color-detail.webp", "alt": "Color-pipeline previews from public runs"}, {"kind": "ocr", "title": "Tesseract table-image OCR", "domain": "Data & Document Workflows", "color": "#d97706", "description": "Reconstruct how DPI, font, language, metadata, and page range affect OCR behavior.", "why": "Reading numbers out of scanned tables, the first step in mining property data from papers.", "tags": ["Literature", "Data extraction"], "software": ["Pandoc", "Poppler", "Tesseract", "QPDF"], "artifacts": ["OCR summary JSON", "page-preview image"], "axes": ["DPI", "font", "language", "metadata", "page range"], "outputs": ["ink", "line count", "page size", "text digest", "text length"], "img": "assets/examples/ocr-detail.webp", "alt": "OCR page preview from a public run"}, {"kind": "robot", "title": "MuJoCo / URDF mass-inertia repair", "domain": "Physical & Engineering Simulation", "color": "#0891b2", "description": "Infer robot state and trajectory behavior under actuator, collision, pose, joint-limit, and target interventions.", "why": "Physical models with masses, inertias, and joint limits, as used to simulate lab robots before running them.", "tags": ["Lab automation", "Physics"], "software": ["MuJoCo", "URDF/MJCF tooling"], "artifacts": ["URDF model", "trajectory CSV", "control summary"], "axes": ["actuator gain", "collision margin", "initial pose", "joint limit", "trajectory target"], "outputs": ["gain", "nq", "nv", "qpos", "qvel"], "img": "assets/examples/robot-detail.webp", "alt": "MuJoCo joint-position trajectories across public scenarios"}, {"kind": "blender", "title": "Blender cloth flag scene", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Reconstruct cloth-scene behavior under wind, pin-group, frame, and subdivision interventions.", "why": "A physics simulation whose outcome shifts with wind, constraints, and resolution.", "tags": ["Simulation", "Physics"], "software": ["Blender"], "artifacts": ["scene graph JSON"], "axes": ["wind strength", "pin group", "frame", "cloth subdiv"], "outputs": ["evaluated objects", "frame", "materials", "node groups", "object counts", "rotation"], "img": "assets/examples/blender-detail.webp", "alt": "Blender cloth scene rotation dial across public scenarios"}, {"kind": "drc", "title": "KiCad LED-matrix driver PCB", "domain": "Spatial, Visual & 3D", "color": "#7c3aed", "description": "Reconstruct LED-matrix driver board outputs (DRC report and project files) under row, column, driver, and routing interventions.", "why": "Design-rule checks on circuit boards, like the custom electronics inside lab instruments.", "tags": ["Instrumentation", "Electronics"], "software": ["KiCad"], "artifacts": ["DRC report", "project file list"], "axes": ["rows", "cols", "driver", "routing"], "outputs": ["DRC report summary", "project file inventory"], "img": "assets/examples/drc-detail.webp", "alt": "KiCad board with design-rule findings plotted at their positions"}, {"kind": "container", "title": "Container SBOM and supply-chain attestation", "domain": "Software & Formal Systems", "color": "#2563eb", "description": "Infer coupled container base-image, package-set, label, entrypoint, and SBOM-scope behavior.", "why": "Recording exactly which software went into an environment, the backbone of reproducible analysis.", "tags": ["Reproducibility", "Software"], "software": ["Hadolint", "Syft", "Skopeo"], "artifacts": ["Dockerfile", "in-toto attestation", "SPDX SBOM"], "axes": ["base image", "entrypoint", "labels", "package set", "SBOM scope"], "outputs": ["attestation", "base", "layer count", "merkle", "vuln budget"], "img": "assets/examples/container-detail.webp", "alt": "Container image layers and attestation from a public run"}]</script>
 
683
  <script src="app.js" defer></script>
684
  <script src="live.js" defer></script>
 
685
  </body>
686
  </html>
styles.css CHANGED
@@ -163,7 +163,7 @@ section[id] { scroll-margin-top: 72px; }
163
  /* Team strip */
164
  .team-strip { padding: 26px 0 28px; border-block: 1px solid var(--line); background: rgba(255, 255, 255, 0.6); text-align: center; }
165
  .team-title { font-size: 13px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); }
166
- .team-list { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 34px; margin: 12px 0 0; padding: 0; list-style: none; }
167
  .team-list li { font-family: var(--serif); font-size: 19px; font-weight: 500; color: var(--ink-2); }
168
  .team-more { margin-top: 8px; font-size: 13.5px; color: var(--muted); }
169
 
@@ -383,67 +383,6 @@ body.modal-open { overflow: hidden; }
383
  .lv-aperture::after { width: 1px; height: 140%; }
384
  @keyframes lv-aperture { 0%, 100% { width: 30%; } 50% { width: 58%; } }
385
 
386
- /* Research computing replays */
387
- .chores { margin-top: 72px; }
388
- .chores-head { max-width: 720px; margin-bottom: 22px; }
389
- .chores-head h3 { font-family: var(--serif); font-size: 28px; font-weight: 600; letter-spacing: -0.015em; }
390
- .chores-head p { margin-top: 8px; font-size: 16px; color: var(--ink-2); }
391
- .tx-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; }
392
- .tx-card {
393
- position: relative;
394
- display: flex;
395
- flex-direction: column;
396
- overflow: hidden;
397
- border-radius: 20px;
398
- border: 1px solid var(--line);
399
- background: var(--surface);
400
- box-shadow: var(--shadow-sm);
401
- cursor: pointer;
402
- transition: transform 0.3s var(--ease), box-shadow 0.3s, border-color 0.3s;
403
- }
404
- .tx-card:hover, .tx-card:focus-visible { transform: translateY(-4px); box-shadow: var(--shadow); border-color: rgba(15, 159, 117, 0.4); }
405
- .tx-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
406
- .tx-card .ex-open { background: #fff; color: var(--ink); box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.5); }
407
- .tx-card:hover .ex-open, .tx-card:focus-visible .ex-open { opacity: 1; transform: none; }
408
- .tx-term { overflow: hidden; background: #0b1220; }
409
- .tx-card .tx-term { border-bottom: 1px solid #1e293b; }
410
- .tx-bar { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-bottom: 1px solid #1e293b; background: #0f172a; }
411
- .tx-bar i { flex: none; width: 9px; height: 9px; border-radius: 50%; background: #334155; }
412
- .tx-bar i:nth-child(1) { background: #f26b5b; }
413
- .tx-bar i:nth-child(2) { background: #f5b84b; }
414
- .tx-bar i:nth-child(3) { background: #34d399; }
415
- .tx-bar em { min-width: 0; margin-left: 8px; overflow: hidden; font: 500 11px var(--mono); font-style: normal; color: #8b9ab0; white-space: nowrap; text-overflow: ellipsis; }
416
- .tx-screen { height: 200px; margin: 0; padding: 12px 16px; overflow: hidden; font: 11.5px/1.65 var(--mono); color: #e2e8f0; }
417
- .tx-screen code { white-space: normal; }
418
- .tx-screen span { display: block; white-space: pre-wrap; overflow-wrap: anywhere; }
419
- .tx-screen b { color: #34d399; font-weight: 600; }
420
- .tx-screen .tx-sys { margin-top: 6px; color: #a5b4fc; }
421
- .tx-screen .tx-ok { color: #34d399; font-weight: 600; }
422
- .tx-caret { display: inline-block; width: 7px; height: 1.15em; margin-left: 2px; vertical-align: -3px; background: #34d399; animation: tx-caret 1s steps(1) infinite; }
423
- @keyframes tx-caret { 50% { opacity: 0; } }
424
- .tx-body { display: flex; flex: 1; flex-direction: column; padding: 18px 20px 20px; }
425
- .tx-area { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 700; letter-spacing: 0.04em; color: var(--accent-deep); }
426
- .tx-area::before { content: ""; width: 8px; height: 8px; border-radius: 2px; background: var(--accent); }
427
- .tx-card h3 { margin: 8px 0 6px; font-size: 18px; letter-spacing: -0.02em; }
428
- .tx-body > p:not(.tx-area) { font-size: 14px; color: var(--muted); overflow-wrap: anywhere; }
429
- .tx-body code, .txm-instruction code { padding: 1px 5px; border-radius: 5px; border: 1px solid var(--line); background: #fff; font: 500 0.86em var(--mono); color: var(--ink-2); overflow-wrap: anywhere; }
430
- .tx-meta { display: flex; flex-wrap: wrap; gap: 6px; margin: auto 0 0; padding: 14px 0 0; list-style: none; }
431
- .tx-meta li { padding: 3px 8px; border-radius: 6px; border: 1px solid var(--line); background: var(--tint-2); font: 500 11px var(--mono); color: var(--ink-2); }
432
- .txm-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
433
- .txm-h { margin: 0 0 10px; font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--accent-deep); }
434
- .txm-h code { font: inherit; text-transform: none; letter-spacing: 0; }
435
- .txm-col .tx-term + .txm-h { margin-top: 20px; }
436
- .txm-instruction { padding: 16px 18px; border-radius: 14px; border: 1px solid var(--line); background: var(--tint-2); font-size: 15px; line-height: 1.65; color: var(--ink-2); overflow-wrap: anywhere; }
437
- .txm-instruction p + p { margin-top: 6px; }
438
- .txm-facts { margin: 16px 0 0; }
439
- .txm-facts div { display: grid; grid-template-columns: 136px minmax(0, 1fr); gap: 12px; padding: 11px 0; border-top: 1px solid var(--line); }
440
- .txm-facts dt { padding-top: 2px; font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--accent-deep); }
441
- .txm-facts dd { margin: 0; font-size: 14px; color: var(--ink-2); overflow-wrap: anywhere; }
442
- .tx-term-lg { border-radius: 14px; border: 1px solid #1e293b; }
443
- .tx-term-lg .tx-screen { height: 236px; font-size: 12px; }
444
- .txm-code { max-height: 300px; margin: 0; padding: 14px 16px; overflow: auto; border-radius: 14px; background: #0b1220; color: #cbd5e1; font: 11.5px/1.65 var(--mono); white-space: pre; }
445
- #txm-cta { margin-top: 22px; }
446
-
447
  /* Collaboration */
448
  .steps { position: relative; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; margin: 0; padding: 0; list-style: none; }
449
  .steps::before { content: ""; position: absolute; left: 26px; right: calc(25% - 40px); top: 25px; height: 2px; background: repeating-linear-gradient(90deg, #d6cdbb 0 8px, transparent 8px 14px); }
@@ -492,8 +431,10 @@ body.modal-open { overflow: hidden; }
492
  .js .paper.is-visible .rb i::after { transform: none; }
493
 
494
  /* FAQ */
495
- .faq-grid { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); gap: 48px; align-items: start; }
496
- .faq-list { display: grid; gap: 10px; }
 
 
497
  .faq-list details { border-radius: 16px; border: 1px solid var(--line); background: var(--surface); box-shadow: var(--shadow-sm); }
498
  .faq-list summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; font-size: 16.5px; font-weight: 600; list-style: none; cursor: pointer; }
499
  .faq-list summary::-webkit-details-marker { display: none; }
@@ -562,8 +503,6 @@ body.modal-open { overflow: hidden; }
562
  .questions { grid-template-columns: minmax(0, 1fr); gap: 20px; }
563
  .ex-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
564
  .ex-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
565
- .tx-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
566
- .txm-grid { grid-template-columns: minmax(0, 1fr); }
567
  .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 34px; }
568
  .steps::before { display: none; }
569
  .paper { grid-template-columns: minmax(0, 1fr); gap: 22px; }
@@ -582,13 +521,12 @@ body.modal-open { overflow: hidden; }
582
  .explorer { padding: 18px; border-radius: 20px; }
583
  .questions { padding: 22px 18px; }
584
  .field-card, .give-card, .paper { padding: 22px; }
585
- .ex-grid, .ex-facts, .tx-grid, .steps, .row2 { grid-template-columns: minmax(0, 1fr); }
586
  .ex-modal { padding: 10px; }
587
  .ex-sheet { max-height: 100%; border-radius: 18px; }
588
  .ex-head { padding: 16px 16px 14px; }
589
  .ex-head h3 { font-size: 20px; }
590
  .ex-body { padding: 16px; }
591
- .txm-facts div { grid-template-columns: minmax(0, 1fr); gap: 4px; }
592
  .join-form { padding: 20px; }
593
  }
594
 
 
163
  /* Team strip */
164
  .team-strip { padding: 26px 0 28px; border-block: 1px solid var(--line); background: rgba(255, 255, 255, 0.6); text-align: center; }
165
  .team-title { font-size: 13px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); }
166
+ .team-list { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 34px; max-width: 820px; margin: 12px auto 0; padding: 0; list-style: none; }
167
  .team-list li { font-family: var(--serif); font-size: 19px; font-weight: 500; color: var(--ink-2); }
168
  .team-more { margin-top: 8px; font-size: 13.5px; color: var(--muted); }
169
 
 
383
  .lv-aperture::after { width: 1px; height: 140%; }
384
  @keyframes lv-aperture { 0%, 100% { width: 30%; } 50% { width: 58%; } }
385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  /* Collaboration */
387
  .steps { position: relative; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; margin: 0; padding: 0; list-style: none; }
388
  .steps::before { content: ""; position: absolute; left: 26px; right: calc(25% - 40px); top: 25px; height: 2px; background: repeating-linear-gradient(90deg, #d6cdbb 0 8px, transparent 8px 14px); }
 
431
  .js .paper.is-visible .rb i::after { transform: none; }
432
 
433
  /* FAQ */
434
+ .faq-grid { display: grid; gap: 22px; }
435
+ .section .faq-head h2.kicker { margin-bottom: 0; font-family: var(--font); font-size: 13px; font-weight: 700; line-height: 1.6; letter-spacing: 0.08em; }
436
+ .faq-head .sub { margin-top: 6px; }
437
+ .faq-list { display: grid; gap: 10px; max-width: 880px; }
438
  .faq-list details { border-radius: 16px; border: 1px solid var(--line); background: var(--surface); box-shadow: var(--shadow-sm); }
439
  .faq-list summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; font-size: 16.5px; font-weight: 600; list-style: none; cursor: pointer; }
440
  .faq-list summary::-webkit-details-marker { display: none; }
 
503
  .questions { grid-template-columns: minmax(0, 1fr); gap: 20px; }
504
  .ex-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
505
  .ex-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
 
 
506
  .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 34px; }
507
  .steps::before { display: none; }
508
  .paper { grid-template-columns: minmax(0, 1fr); gap: 22px; }
 
521
  .explorer { padding: 18px; border-radius: 20px; }
522
  .questions { padding: 22px 18px; }
523
  .field-card, .give-card, .paper { padding: 22px; }
524
+ .ex-grid, .ex-facts, .steps, .row2 { grid-template-columns: minmax(0, 1fr); }
525
  .ex-modal { padding: 10px; }
526
  .ex-sheet { max-height: 100%; border-radius: 18px; }
527
  .ex-head { padding: 16px 16px 14px; }
528
  .ex-head h3 { font-size: 20px; }
529
  .ex-body { padding: 16px; }
 
530
  .join-form { padding: 20px; }
531
  }
532