// SunLike White — single full-viewport story.
// Chart fills full viewport width (no horizontal pan / no scroll-jacking).
// Hover one of the 9 wavelength bands to lock that scene; idle auto-cycles
// every 5s so the animation is always visible.
function SunLikeStory() {
const stageRef = React.useRef(null);
const [scene, setScene] = React.useState(0);
const [hovering, setHovering] = React.useState(false);
const SCENE_COUNT = 9;
// Auto-advance when not hovering
React.useEffect(() => {
if (hovering) return;
const t = setInterval(() => setScene((s) => (s + 1) % SCENE_COUNT), 5000);
return () => clearInterval(t);
}, [hovering]);
// Apply scene state to DOM nodes
React.useEffect(() => {
const stage = stageRef.current;
if (!stage) return;
const SCENES = [
{ nm: 380, annD: 0, annA: 0, annB: 0, annC: 0, bD: 0, bA: 0, bB: 0, bC: 0 },
{ nm: 415, annD: 1, annA: 0, annB: 0, annC: 0, bD: 1, bA: 0, bB: 0, bC: 0 },
{ nm: 450, annD: 0, annA: 1, annB: 0, annC: 0, bD: 0, bA: 1, bB: 0, bC: 0 },
{ nm: 490, annD: 0, annA: 0, annB: 1, annC: 0, bD: 0, bA: 0, bB: 1, bC: 0 },
{ nm: 530, annD: 0, annA: 0, annB: 0, annC: 0, bD: 0, bA: 0, bB: 0, bC: 0 },
{ nm: 570, annD: 0, annA: 0, annB: 0, annC: 0, bD: 0, bA: 0, bB: 0, bC: 0 },
{ nm: 610, annD: 0, annA: 0, annB: 0, annC: 1, bD: 0, bA: 0, bB: 0, bC: 1 },
{ nm: 650, annD: 0, annA: 0, annB: 0, annC: 0, bD: 0, bA: 0, bB: 0, bC: 0 },
{ nm: 720, annD: 0, annA: 0, annB: 0, annC: 0, bD: 0, bA: 0, bB: 0, bC: 0 }
];
const SUN = [[150,724],[510,656],[780,595],[1050,566],[1410,526],[1950,473],[2310,444],[2850,405],[3210,382],[3570,351],[3750,337],[4110,306],[4470,192],[4650,200],[4830,222],[5010,238],[5190,268],[5370,316],[5550,382],[5730,481],[5910,587],[6090,663],[6270,724],[6450,762],[6630,785],[8000,800]];
const STD = [[150,762],[510,738],[870,682],[1050,604],[1200,440],[1290,356],[1410,40],[1500,250],[1620,620],[1770,740],[1950,762],[2130,747],[2310,709],[2670,595],[2850,542],[3210,420],[3570,329],[3750,306],[3930,299],[4110,299],[4290,316],[4470,344],[4650,374],[5010,435],[5550,572],[5910,663],[6270,724],[6810,768],[8000,790]];
const NAT = [[150,648],[510,610],[780,572],[1050,534],[1410,496],[1950,450],[2310,420],[2850,382],[3210,359],[3570,329],[3750,314],[4110,283],[4650,245],[5010,222],[5550,192],[5910,177],[6270,169],[6810,169],[8000,196]];
const ptY = (pts, x) => {
for (let i = 0; i < pts.length - 1; i++) {
const [x0, y0] = pts[i], [x1, y1] = pts[i + 1];
if (x >= x0 && x <= x1) return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
}
return pts[pts.length - 1][1];
};
const s = SCENES[scene];
const svgX = (s.nm - 380) * 18 + 150;
const $ = (id) => stage.querySelector('#' + id);
const q = (sel) => stage.querySelectorAll(sel);
q('.tslot').forEach((el, j) => el.classList.toggle('on', j === scene));
q('.kslot').forEach((el, j) => el.classList.toggle('on', j === scene && el.children.length > 0));
const tp = $('sl-tp'); if (tp) tp.classList.toggle('s0', scene === 0);
if ($('ann-D')) $('ann-D').style.opacity = s.annD;
if ($('ann-A')) $('ann-A').style.opacity = s.annA;
if ($('ann-B')) $('ann-B').style.opacity = s.annB;
if ($('ann-C')) $('ann-C').style.opacity = s.annC;
if ($('band-D')) $('band-D').style.opacity = s.bD;
if ($('band-A')) $('band-A').style.opacity = s.bA;
if ($('band-B')) $('band-B').style.opacity = s.bB;
if ($('band-C')) $('band-C').style.opacity = s.bC;
const hcl = $('sl-hcl-title'); if (hcl) hcl.classList.toggle('show', scene !== 0);
const lamp = $('sl-lamp-img'); if (lamp) lamp.classList.toggle('show', scene !== 0);
const legend = $('sl-legend'); if (legend) legend.classList.toggle('show', scene !== 0);
// Tracker line + dots
const ty = ptY(SUN, svgX), tys = ptY(STD, svgX), tyn = ptY(NAT, svgX);
const setAttrs = (el, attrs) => { if (el) for (const k in attrs) el.setAttribute(k, attrs[k]); };
setAttrs($('tl'), { x1: svgX, x2: svgX });
setAttrs($('t-glow'), { cx: svgX, cy: ty });
setAttrs($('t-dot'), { cx: svgX, cy: ty });
setAttrs($('std-glow'), { cx: svgX, cy: tys });
setAttrs($('std-dot'), { cx: svgX, cy: tys });
setAttrs($('std-lbl'), { x: svgX + 14, y: tys - 4 });
setAttrs($('nat-glow'), { cx: svgX, cy: tyn });
setAttrs($('nat-dot'), { cx: svgX, cy: tyn });
setAttrs($('nat-lbl'), { x: svgX + 14, y: tyn - 4 });
const stl = stage.querySelector('#stl-text');
if (stl) { stl.setAttribute('x', svgX + 14); stl.setAttribute('y', ty - 14); }
const stLabel = stage.querySelector('#sun-tracker-label');
if (stLabel) stLabel.style.opacity = 1;
}, [scene]);
// Hover zone definitions — pct of full chart width (chart spans nm 380..780 → x 150..7350 in viewBox 0..8000)
// pct = ((nm-380)*18 + 150) / 8000 * 100
const ZONES = [
{ idx: 0, label: 'Intro', nm: '380', from: 1.9, to: 9.7 },
{ idx: 1, label: 'D · 415', nm: '415', from: 9.7, to: 13.5 },
{ idx: 2, label: 'A · 450', nm: '450', from: 13.5, to: 18.0 },
{ idx: 3, label: 'B · 490', nm: '490', from: 18.0, to: 23.5 },
{ idx: 4, label: 'True', nm: '530', from: 23.5, to: 31.5 },
{ idx: 5, label: 'Rising', nm: '570', from: 31.5, to: 41.0 },
{ idx: 6, label: 'C · 610', nm: '610', from: 41.0, to: 53.5 },
{ idx: 7, label: 'CRI 97', nm: '650', from: 53.5, to: 70.0 },
{ idx: 8, label: 'Awards', nm: '720', from: 70.0, to: 91.9 }
];
return (
SOLADUO Overview
SunLike White of Seoul Semiconductor has a similar spectrum as natural sunlight spectrum. It may give you benefits to reduce eye fatigue and improve focus, learning efficiency and better sleep quality. SunLike may create a comfortable and natural ambiance in your space.
DOpsin 5 · 415nm · Myopia Prevention
SunLike has a violet component at ~415nm (Opsin 5 zone) that activates the OPN5 photoreceptor — effective for preventing myopia in growing children. Standard LED lacks this component.
ABlue Hazard · 450nm
Standard LED reaches maximum intensity (100%) at 450nm — the Blue Hazard wavelength. SunLike intentionally has only 4% here, nearly eliminating this harmful peak while Natural Sunlight has just 14%.
BMelanopic Zone · 480nm
The melanopic 480nm region controls memory, learning, alertness, and sleep quality. Standard LED has only 5% here — a near-zero valley. SunLike fills this region at 22%, 4.4× more — supporting daytime cognitive function.
True Colors · 470–500nm
Standard LED loses critical wavelengths in the 470-500nm range (near zero after the spike). SunLike restores this missing spectrum — 99 distinct shades with over 95% fidelity (TM-30-20, Rf ≥ 95).
Broad Peak Rising · 530–570nm
SunLike rises smoothly from the valley to its broad peak region — mimicking natural sunlight's gradual increase. Increases alertness and learning effect during the daytime. Standard LED took a jagged path to reach the same region.
CFull-fill Red · 620nm
SunLike reaches its peak at 620nm at 80% — the highest of the three curves. Standard LED is at 60%, Natural at 54%. The Full-fill Red zone supports mood and emotional balance for a comfortable living environment.
CRI-97 · Rf 95+
By tracking natural sunlight across the full visible spectrum, SunLike achieves CRI-97. Effective on eye health for growing children. SunLike declines gracefully after 650nm, unlike Standard LED's jagged history.
5개국 10개 글로벌 혁신 기술상
We have won 10 Global Innovation Technology Awards in 5 countries. SunLike establishes a comfortable environment in any space — certified safe and healthy by global authorities.
D 영역 — Opsin 5 · 415nm · 근시 예방
SunLike의 415nm 바이올렛 성분이 OPN5 활성화. 성장기 근시 예방. 일반 LED는 없음.
A 영역 — 블루 해저드 · 450nm
일반 LED: 100%(최대) vs SunLike: 4%(안전). SunLike는 450nm 블루 해저드를 의도적으로 회피.
B 영역 — 멜라노픽 · 480nm
일반 LED: 5%(고갈) vs SunLike: 22%(채움, 4.4배). 기억력·학습·각성에 결정적.
470–500nm 복원
SunLike는 일반 LED가 0%에 가까운 구간을 복원. Rf≥95, 99가지 색상 95% 이상 충실도.
학습 능력 향상
SunLike의 부드러운 상승 곡선이 자연광을 모방. 낮 시간 각성·학습 효과 향상.
C 영역 — 풀필 레드 · 기분·편안함
620nm 피크: SunLike 80% > 일반LED 60% > 자연광 54%. 기분 균형·편안한 환경.
정확한 색상 · CRI-97 · 근시 예방
CRI-97, Rf 95+. 성장기 근시 예방 효과. 650nm 이후 자연스러운 감소.
안전한 조명으로 인증
5개국 10개 글로벌 혁신 기술상 수상. 어떤 공간에서든 편안하고 안전한 조명.