feat: strengthen design skill and refresh all showcases
Some checks failed
ci / build (push) Has been cancelled
Some checks failed
ci / build (push) Has been cancelled
This commit is contained in:
parent
69e5cc1efd
commit
e09d4efb1c
257 changed files with 8196 additions and 2374 deletions
27
apps/site/public/work/synapse-bci/design.md
Normal file
27
apps/site/public/work/synapse-bci/design.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Synapse BCI Lab design.md
|
||||
|
||||
## 브리프
|
||||
|
||||
- 무엇을: 시뮬레이션 신호와 연구 보고·윤리 경계를 설명하는 개념 페이지.
|
||||
- 누구에게: 임상 결과로 오해하지 않고 신호·제한·보고 필드를 읽어야 하는 방문자.
|
||||
- 제약: no clinical/participant data 표기, 조작 동작, 정적 reduced-motion 경로를 유지한다.
|
||||
|
||||
## 결정표
|
||||
|
||||
| 축 | 관찰과 적용 범위 | 결정·역할 토큰 | 기각 조건 |
|
||||
|---|---|---|---|
|
||||
| 구도 | 기준 화면의 메타·래스터·장치·윤리 구분이 약했다. | 세 상태 메타, 장치 설명 레일, 윤리 항목 레일을 역할별로 나눈다. `--line`, `--accent-dim`, `--space-4`. | 레일이 제목이나 상태 문구를 분절해 읽기 순서를 해치면 제거한다. |
|
||||
| 타입 | 연구 한계와 범례가 13px 아래로 약해지면 사실 범위가 묻힌다. | 메타·래스터 머리말·범례를 `--step--1` 이상으로 둔다. | 좁은 폭에서 메타가 지나치게 길어져 제목이나 행동을 밀면 행 분리한다. |
|
||||
| 색 | 스파이크는 신호 표면의 주체이고 경계선은 보조다. | `--accent`, `--accent-dim`, `--line`으로 스파이크·시뮬레이션 범례·레일을 구분한다. | 밝은 스파이크가 임상 결과처럼 읽히거나 범례보다 과장되면 밝기를 낮춘다. |
|
||||
|
||||
## 근거와 경계
|
||||
|
||||
[art-direction.md](../../../../../packages/skill/references/art-direction.md)의 Hofmann 관련 군집 관찰은 신호/메타/윤리 표면을 나누는 데만 적용했다. [typography.md](../../../../../packages/skill/references/typography.md)의 Ruder 관련 실제 상태·숫자 proof는 13px 이상 메타와 표에만 적용했다. [visual-design-lineage.md](../../../../../packages/skill/references/visual-design-lineage.md)의 Albers 관련 색 맥락은 금색 신호와 어두운 바탕의 구분에만 적용했다. 이는 학습·임상 성능 근거가 아니다.
|
||||
|
||||
[trustworthy-showcases.md](../../../../../packages/skill/references/trustworthy-showcases.md)에 따라 시뮬레이션 표기는 래스터와 인접하게, no clinical/participant data 표기는 기존 가까운 문맥에 유지한다.
|
||||
|
||||
## 2026-09-12 현재 검증 기록
|
||||
|
||||
- `verify-final` 18개 묶음은 16개가 즉시 통과했다. 전체 묶음의 invariant·visual 검사는 Gaon·Dure를 대상으로 하며, 나머지 2개는 수정 뒤 release 독립 재실행에서 ALL PASS·ALL MATCH였다.
|
||||
- root는 28개 모바일, 21개 데스크톱, 7개 하위 경로와 30개 앱 상태를 직접 검토해 수용했다. stress 112건은 hard failure 0이며, 가로 넘침 4건은 targeted fix 뒤 390px 재측정에서 0이다.
|
||||
- 이 기록은 렌더·계약 범위의 현재 결과다. 모든 폭·키보드 경로·인쇄 등 개별 기능을 완전 재실행했다는 뜻이 아니며, 참여자 과업 효과도 미측정이다.
|
||||
|
|
@ -3,15 +3,15 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Synapse BCI Lab · 64-Channel Neural Interface Engine</title>
|
||||
<title>Synapse BCI Lab · Neural Interface Study</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="A 64-channel μECoG array decoding cortical intent in 1.82 ms. Every number on this page carries its measurement condition."
|
||||
content="An illustrative neural-interface study showing how simulated signals, reporting fields, and research commitments can be communicated."
|
||||
/>
|
||||
<meta property="og:title" content="Synapse BCI Lab · 64-Channel Neural Interface" />
|
||||
<meta property="og:title" content="Synapse BCI Lab · Neural Interface Study" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Cortial intent, decoded in under two milliseconds."
|
||||
content="An illustrative interface concept with simulated signals and no clinical results."
|
||||
/>
|
||||
<meta property="og:type" content="website" />
|
||||
<meta name="theme-color" content="#08090B" />
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Sans+KR:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"
|
||||
/>
|
||||
<link rel="stylesheet" href="./styles/main.css?v=2" />
|
||||
<link rel="stylesheet" href="./styles/main.css?v=20260912all" />
|
||||
<link
|
||||
rel="icon"
|
||||
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%2308090B'/%3E%3Cpath d='M6 24l6-6 4 4 9-14' fill='none' stroke='%23D9A441' stroke-width='2'/%3E%3Cpath d='M19 8h6v6' fill='none' stroke='%23D9A441' stroke-width='2'/%3E%3C/svg%3E"
|
||||
|
|
@ -45,28 +45,36 @@
|
|||
</header>
|
||||
|
||||
<main id="main">
|
||||
<!--
|
||||
Hero — the product is a signal, so the first screen shows one:
|
||||
a 64-channel spike raster, procedurally generated (no recording
|
||||
claimed). Static frame under reduced motion; never drawn offscreen.
|
||||
-->
|
||||
<section class="hero" aria-labelledby="hero-h">
|
||||
<div class="wrap hero-grid">
|
||||
<div class="hero-text">
|
||||
<p class="hero-kicker reveal">64-CHANNEL μECoG · 30 kS/s · 1.82 ms</p>
|
||||
<p class="hero-kicker reveal">Illustrative μECoG concept · simulated signal display</p>
|
||||
<h1 id="hero-h" class="reveal" style="--delay: 60ms">
|
||||
Intent, decoded<br />before the hand moves
|
||||
A signal interface,<br />explained clearly
|
||||
</h1>
|
||||
<p class="lead reveal" style="--delay: 120ms">
|
||||
Synapse reads cortical surface potentials through a 1.8 mm-thin
|
||||
array and turns them into device commands in under two
|
||||
milliseconds — faster than the signal reaches the muscle. The
|
||||
raster on the right is a simulation of that stream, not a
|
||||
recording of a person.
|
||||
This page illustrates how a neural-interface study could describe
|
||||
signals, reporting, and safeguards. It is not a clinical device,
|
||||
a trial, or evidence of performance. The raster is simulated and
|
||||
contains no participant data.
|
||||
</p>
|
||||
<dl class="trial-register reveal" style="--delay: 150ms">
|
||||
<div>
|
||||
<dt>study status</dt>
|
||||
<dd>illustrative concept · no trial</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>reporting</dt>
|
||||
<dd>no clinical outcomes reported</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>raster source</dt>
|
||||
<dd>simulated signal · no participant data</dd>
|
||||
</div>
|
||||
</dl>
|
||||
<div class="hero-actions reveal" style="--delay: 180ms">
|
||||
<a class="btn" href="#numbers">Read the numbers</a>
|
||||
<a class="link-quiet" href="#ethics">Our implant ethics</a>
|
||||
<a class="btn" href="#numbers">See the reporting format</a>
|
||||
<a class="link-quiet" href="#ethics">Read the research principles</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -84,48 +92,41 @@
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Device — what is actually implanted. Macro photography, no renders.
|
||||
-->
|
||||
<section id="device" class="section" aria-labelledby="device-h">
|
||||
<div class="wrap two">
|
||||
<figure class="two-photo reveal">
|
||||
<img
|
||||
src="./assets/chip-macro.webp"
|
||||
alt="A black silicon neural interface die with dense gold traces and a micro-electrode grid at one edge"
|
||||
alt="Illustrative neural-interface concept plate with dense gold traces and a micro-electrode grid at one edge"
|
||||
width="900"
|
||||
height="1200"
|
||||
loading="lazy"
|
||||
/>
|
||||
<figcaption>SYN-64 die · 4.2 × 4.2 mm · gold on black silicon</figcaption>
|
||||
<figcaption>SYN-64 concept plate · illustrative reference image</figcaption>
|
||||
</figure>
|
||||
<div class="two-text">
|
||||
<h2 id="device-h">Thin enough<br />to be forgotten</h2>
|
||||
<h2 id="device-h">Surface interface,<br />explained</h2>
|
||||
<p>
|
||||
The array sits on the cortical surface, under the dura — 1.8 mm
|
||||
thin, 64 electrodes at 2.5 mm pitch. No puncturing tissue, no
|
||||
threads into the parenchyma. Patients in our trial report the
|
||||
implant becomes imperceptible within weeks; that, not channel
|
||||
count, is the design goal we report first.
|
||||
The SYN-64 is an illustrative surface-interface concept. It helps
|
||||
explain the questions a real device page must answer about contact,
|
||||
tissue interaction, and user safety; it does not describe an
|
||||
implant available for study or care.
|
||||
</p>
|
||||
<p class="muted">
|
||||
The die photographs are of the actual implant, not renders. What
|
||||
you see is what a surgeon holds.
|
||||
The image is a constructed reference for this concept, not a
|
||||
clinical product photograph or a surgical instruction.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Numbers — every value with its condition. The trust band.
|
||||
-->
|
||||
<section id="numbers" class="section band" aria-labelledby="numbers-h">
|
||||
<div class="wrap">
|
||||
<h2 id="numbers-h" class="reveal">Numbers, with their conditions</h2>
|
||||
<h2 id="numbers-h" class="reveal">Reporting fields, not results</h2>
|
||||
<div class="table-wrap reveal" style="--delay: 80ms">
|
||||
<table>
|
||||
<caption class="sr-only">
|
||||
Measured performance — metric, value, measurement condition
|
||||
Illustrative research reporting fields — metric, reported value, and condition
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -137,116 +138,103 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">Decode latency</th>
|
||||
<td class="num">1.82 ms</td>
|
||||
<td>p50 · on-device inference · 12 participants</td>
|
||||
<td class="num">—</td>
|
||||
<td>No clinical result reported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Raw sampling</th>
|
||||
<td class="num">30 kS/s</td>
|
||||
<td>per channel · 24-bit ΔΣ</td>
|
||||
<td class="num">—</td>
|
||||
<td>No device specification reported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">SNR</th>
|
||||
<td class="num">18.4 dB</td>
|
||||
<td>referenced to skull electrode · chronic week 26</td>
|
||||
<td class="num">—</td>
|
||||
<td>No clinical measurement reported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Gesture classes</th>
|
||||
<td class="num">11</td>
|
||||
<td>offline, cross-validated · 94.1% ± 1.8</td>
|
||||
<td class="num">—</td>
|
||||
<td>No accuracy or participant result reported</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Wireless link</th>
|
||||
<td class="num">—</td>
|
||||
<td>transcutaneous power + 2.4 GHz telemetry</td>
|
||||
<td>No system detail reported</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="measure-note reveal" style="--delay: 140ms">
|
||||
All values from the first-in-human trial (N=12), 2025-09 – 2026-06.
|
||||
Wireless link figure withheld pending regulatory filing — a blank
|
||||
beats a guess.
|
||||
This table shows the fields a responsible report should identify.
|
||||
It deliberately reports no clinical values, participant outcomes,
|
||||
regulatory status, or device availability.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Array plate — full-bleed.
|
||||
-->
|
||||
<section class="section plate" aria-label="Microelectrode array photograph">
|
||||
<section class="section plate" aria-label="Illustrative microelectrode layout reference image">
|
||||
<figure class="plate-fig reveal">
|
||||
<img
|
||||
src="./assets/thread-array.webp"
|
||||
alt="Dozens of fine gold-tipped microelectrode threads fanning out across a dark stage under a microscope"
|
||||
alt="Illustrative gold-tipped microelectrode layout spreading across a dark reference stage"
|
||||
width="1440"
|
||||
height="810"
|
||||
loading="lazy"
|
||||
/>
|
||||
<figcaption class="wrap">Electrode fan-out · microscope stage · no color grading</figcaption>
|
||||
<figcaption class="wrap">Illustrative electrode layout · reference image</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Ethics — a BCI page without an ethics section is a red flag.
|
||||
This is deliberate content, not compliance decoration.
|
||||
-->
|
||||
<section id="ethics" class="section" aria-labelledby="ethics-h">
|
||||
<div class="wrap ethics-grid">
|
||||
<h2 id="ethics-h">What we will not do</h2>
|
||||
<h2 id="ethics-h">Research principles for a real study</h2>
|
||||
<ul class="ethics-list">
|
||||
<li class="reveal">
|
||||
<h3>No neural advertising</h3>
|
||||
<h3>Signals are not advertising data</h3>
|
||||
<p>
|
||||
Decoded signals are commands, not content. We do not build — or
|
||||
license — emotion or attention inference.
|
||||
A real study should define purpose limits before data collection
|
||||
and should not repurpose neural signals for advertising or profiling.
|
||||
</p>
|
||||
</li>
|
||||
<li class="reveal" style="--delay: 80ms">
|
||||
<h3>Participants can leave</h3>
|
||||
<h3>Withdrawal must be possible</h3>
|
||||
<p>
|
||||
Explantation on request within 30 days, at our cost, at any
|
||||
point in the trial. Three participants have exercised it.
|
||||
A real protocol must explain withdrawal, support, and follow-up
|
||||
before enrollment. This concept reports no participants or outcomes.
|
||||
</p>
|
||||
</li>
|
||||
<li class="reveal" style="--delay: 160ms">
|
||||
<h3>Raw data stays in the vault</h3>
|
||||
<h3>Data access needs a stated boundary</h3>
|
||||
<p>
|
||||
Raw neural data never leaves our encrypted cluster. Published
|
||||
figures are aggregate statistics, as on this page.
|
||||
A real study must state how raw data is retained, who can access
|
||||
it, and how publication separates aggregate findings from identity.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Research contact -->
|
||||
<section class="section band contact" aria-labelledby="contact-h">
|
||||
<div class="wrap contact-grid">
|
||||
<h2 id="contact-h">Research contact</h2>
|
||||
<h2 id="contact-h">About this concept</h2>
|
||||
<p>
|
||||
Trial enrollment is closed. Collaboration and data-access inquiries
|
||||
from accredited institutions:
|
||||
This is a design concept for explaining an emerging research area.
|
||||
It does not recruit participants, accept data-access requests, or
|
||||
provide medical or research services.
|
||||
</p>
|
||||
<a class="btn" href="mailto:lab@synapse.bci">lab@synapse.bci</a>
|
||||
<a class="btn" href="#main">Return to the concept</a>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-foot">
|
||||
<div class="wrap foot-inner">
|
||||
<p>synapse bci lab</p>
|
||||
<p class="foot-meta">IRB-2025-0412 · results are preliminary until peer review</p>
|
||||
<p>synapse bci · illustrative research concept</p>
|
||||
<p class="foot-meta">no trial, clinical result, regulatory approval, or participant data</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/*
|
||||
Spike raster — procedural, self-scrolling. Poisson-ish per-channel
|
||||
spikes plus occasional cross-channel bursts. No audio, no recording,
|
||||
no data claim: it is labeled SIMULATED. Pauses offscreen; a static
|
||||
frame under prefers-reduced-motion.
|
||||
*/
|
||||
const canvas = document.getElementById("raster");
|
||||
const reduced = matchMedia("(prefers-reduced-motion: reduce)").matches;
|
||||
const CH = 64;
|
||||
|
|
@ -264,9 +252,9 @@
|
|||
ctx.fillRect(0, 0, w, h);
|
||||
}
|
||||
|
||||
const rate = () => 0.02 + Math.random() * 0.05; // per channel per frame
|
||||
const GOLD = "rgba(217, 164, 65, 0.9)";
|
||||
const GOLD_DIM = "rgba(217, 164, 65, 0.45)";
|
||||
const rate = () => 0.02 + Math.random() * 0.05;
|
||||
const GOLD = "rgba(235, 184, 78, 1)";
|
||||
const GOLD_DIM = "rgba(217, 164, 65, 0.72)";
|
||||
|
||||
function column(x) {
|
||||
const burst = Math.random() < 0.006;
|
||||
|
|
@ -275,6 +263,7 @@
|
|||
const fire = burst ? Math.random() < 0.55 : Math.random() < rate();
|
||||
if (!fire) continue;
|
||||
ctx.strokeStyle = burst ? GOLD : GOLD_DIM;
|
||||
ctx.lineWidth = burst ? 1.35 : 1;
|
||||
ctx.beginPath();
|
||||
const y = ch * rowH + rowH / 2;
|
||||
ctx.moveTo(x, y - rowH * 0.36);
|
||||
|
|
@ -286,7 +275,6 @@
|
|||
function step() {
|
||||
if (!running) return;
|
||||
const dx = 2;
|
||||
// self-copy shift: draw the canvas onto itself, one column left
|
||||
ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, -dx * dpr, 0, canvas.width, canvas.height);
|
||||
ctx.fillStyle = "#0b0d10";
|
||||
ctx.fillRect(w - dx - 1, 0, dx + 2, h);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@import url("./tokens.css");
|
||||
@import url("./tokens.css?v=20260912all");
|
||||
|
||||
/* ==========================================================================
|
||||
Synapse BCI Lab — dark-instrument. 측정 조건이 붙은 계기.
|
||||
|
|
@ -178,6 +178,37 @@ a {
|
|||
.hero .lead {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
.trial-register {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 0;
|
||||
margin-top: var(--space-4);
|
||||
padding: var(--space-3) 0;
|
||||
border-block: 1px solid var(--line);
|
||||
}
|
||||
.trial-register > div {
|
||||
min-width: 0;
|
||||
padding-inline: var(--space-3);
|
||||
border-left: 1px solid var(--line);
|
||||
}
|
||||
.trial-register > div:first-child {
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
}
|
||||
.trial-register dt,
|
||||
.trial-register dd {
|
||||
font-family: var(--font-mono);
|
||||
font-size: var(--step--1);
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
.trial-register dt {
|
||||
color: var(--accent);
|
||||
}
|
||||
.trial-register dd {
|
||||
margin-top: 0.2rem;
|
||||
color: var(--ink-muted);
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
.hero-actions {
|
||||
margin-top: var(--space-5);
|
||||
display: flex;
|
||||
|
|
@ -186,7 +217,9 @@ a {
|
|||
flex-wrap: wrap;
|
||||
}
|
||||
.btn {
|
||||
display: inline-block;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
min-height: 44px;
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
|
|
@ -202,6 +235,7 @@ a {
|
|||
}
|
||||
|
||||
.raster-frame {
|
||||
min-width: 0;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--radius-frame);
|
||||
background: var(--surface-raised);
|
||||
|
|
@ -209,14 +243,19 @@ a {
|
|||
}
|
||||
.raster-head {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
gap: var(--space-3);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.6875rem;
|
||||
font-size: var(--step--1);
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--ink-faint);
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
.raster-head > span {
|
||||
min-width: 0;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
#raster {
|
||||
display: block;
|
||||
width: 100%;
|
||||
|
|
@ -227,8 +266,8 @@ a {
|
|||
align-items: center;
|
||||
gap: var(--space-2);
|
||||
margin-top: var(--space-2);
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-muted);
|
||||
}
|
||||
.legend-tick {
|
||||
display: inline-block;
|
||||
|
|
@ -270,6 +309,11 @@ a {
|
|||
.two-text p + p {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
.two-text {
|
||||
min-width: 0;
|
||||
padding-left: var(--space-4);
|
||||
border-left: 1px solid var(--accent-dim);
|
||||
}
|
||||
|
||||
/* ── 수치 표 ──────────────────────────────────────────────────────────── */
|
||||
|
||||
|
|
@ -340,11 +384,20 @@ tbody td:not(.num) {
|
|||
margin: 0;
|
||||
padding: 0;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
|
||||
gap: var(--space-5) var(--space-6);
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
|
||||
gap: 0;
|
||||
border-top: 1px solid var(--line);
|
||||
padding-top: var(--space-5);
|
||||
}
|
||||
.ethics-list li {
|
||||
min-width: 0;
|
||||
padding-inline: var(--space-4);
|
||||
border-left: 1px solid var(--line);
|
||||
}
|
||||
.ethics-list li:first-child {
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
}
|
||||
.ethics-list h3 {
|
||||
color: var(--ink);
|
||||
}
|
||||
|
|
@ -422,6 +475,24 @@ tbody td:not(.num) {
|
|||
padding-block: var(--space-6);
|
||||
}
|
||||
}
|
||||
@media (max-width: 640px) {
|
||||
.trial-register {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--space-2);
|
||||
}
|
||||
.trial-register > div,
|
||||
.trial-register > div:first-child,
|
||||
.ethics-list li,
|
||||
.ethics-list li:first-child {
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
}
|
||||
.ethics-list li + li {
|
||||
margin-top: var(--space-4);
|
||||
padding-top: var(--space-4);
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
}
|
||||
@media (max-width: 560px) {
|
||||
.head-inner {
|
||||
flex-direction: column;
|
||||
|
|
@ -430,6 +501,9 @@ tbody td:not(.num) {
|
|||
}
|
||||
.nav {
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
column-gap: var(--space-4);
|
||||
row-gap: var(--space-2);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
--step-0: 1rem;
|
||||
--step-1: 1.1875rem;
|
||||
--step-2: clamp(1.375rem, 1.2rem + 0.9vw, 1.75rem);
|
||||
--step-3: clamp(2.125rem, 1.4rem + 3.4vw, 3.625rem);
|
||||
--step-3: clamp(1.5rem, 0.8rem + 3vw, 3rem); /* 48px — 두 줄 계약 */
|
||||
|
||||
--leading-tight: 1.24;
|
||||
--leading-normal: 1.72;
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
--surface-raised: #0d0f13;
|
||||
--ink: #e9ebee;
|
||||
--ink-muted: #9aa1ab;
|
||||
--ink-faint: #69707a;
|
||||
--ink-faint: #838d98;
|
||||
--line: #1e2229;
|
||||
--line-strong: #343a45;
|
||||
--accent: #d9a441; /* 전극 금 — 텍스트·선 */
|
||||
|
|
@ -45,8 +45,8 @@
|
|||
--radius: 2px;
|
||||
--radius-frame: 6px;
|
||||
|
||||
--container: 1120px;
|
||||
--pad-inline: clamp(1.25rem, 1rem + 2.5vw, 4rem);
|
||||
--container: 1240px;
|
||||
--pad-inline: clamp(1.25rem, 1rem + 2.5vw, 5rem);
|
||||
|
||||
--dur-quick: 160ms;
|
||||
--dur-normal: 420ms;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue