kakaotalk-chat-analyzer 0.10.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/src/report-charts.d.ts +1 -1
- package/dist/src/report-charts.js +26 -2
- package/dist/src/report-charts.js.map +1 -1
- package/dist/src/report-styles.d.ts +1 -1
- package/dist/src/report-styles.js +313 -6
- package/dist/src/report-styles.js.map +1 -1
- package/dist/src/report-ux.d.ts +1 -1
- package/dist/src/report-ux.js +49 -7
- package/dist/src/report-ux.js.map +1 -1
- package/dist/src/version.d.ts +2 -2
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -116,6 +116,7 @@ npm run bench:stream -- 100000
|
|
|
116
116
|
|
|
117
117
|
| 버전 | 요약 |
|
|
118
118
|
|------|------|
|
|
119
|
+
| **0.11.0** | 반응형 6레이어(모바일~4K)·컨테이너 쿼리·ECharts ResizeObserver·스크롤 리빌 |
|
|
119
120
|
| **0.10.2** | CSS 복구: `.deck-nav` pill 네비·명시 라이트/다크 팔레트(대비)·테마 버튼 동기화 |
|
|
120
121
|
| **0.10.1** | Pretendard 서브셋 CDN·`--kca-font-sans` 순환 참조 수정·카드 radius 토큰 |
|
|
121
122
|
| **0.10.0** | 리포트 CSS **Open Props** 토큰·6레이어 번들(`report-styles.ts`)·시맨틱 컬러 리워크 |
|
|
@@ -47,4 +47,4 @@ export interface ChartPayload {
|
|
|
47
47
|
export declare function serializeChartPayload(data: ReportData): string;
|
|
48
48
|
export declare function buildChartPayload(data: ReportData): ChartPayload;
|
|
49
49
|
export declare function renderChartDeck(data: ReportData): string;
|
|
50
|
-
export declare const CHARTS_INIT_SCRIPT = "\n (function () {\n function run() {\n var dataEl = document.getElementById(\"kca-chart-data\");\n if (!dataEl) return;\n if (typeof echarts === \"undefined\") return;\n var data;\n try { data = JSON.parse(dataEl.textContent || \"{}\"); } catch (e) { return; }\n\n var dark = document.documentElement.getAttribute(\"data-theme\") === \"dark\" ||\n (!document.documentElement.getAttribute(\"data-theme\") &&\n window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches);\n var text = dark ? \"#e9eef5\" : \"#141a1f\";\n var muted = dark ? \"#8b98a8\" : \"#5c6670\";\n var accent = dark ? \"#3ee8c5\" : \"#0f6b5c\";\n var accent2 = dark ? \"#818cf8\" : \"#4f46e5\";\n\n function baseOpt() {\n return {\n textStyle: { color: text, fontFamily: \"Pretendard, Apple SD Gothic Neo, sans-serif\" },\n tooltip: { trigger: \"axis\", backgroundColor: dark ? \"#1c2128\" : \"#fff\", borderColor: \"transparent\" },\n };\n }\n\n var charts = [];\n function resizeAll() {\n charts.forEach(function (c) {\n try { c.resize(); } catch (e) {}\n });\n }\n function init(id, opt) {\n var el = document.getElementById(id);\n if (!el) return null;\n try {\n var chart = echarts.init(el, null, { renderer: \"canvas\" });\n chart.setOption(opt);\n charts.push(chart);\n return chart;\n } catch (err) {\n console.error(\"[kca-chart]\", id, err);\n el.setAttribute(\"data-chart-failed\", \"1\");\n el.innerHTML = '<p style=\"margin:0;padding:12px;font-size:12px;color:var(--muted);text-align:center\">\uCC28\uD2B8\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694. \uC0C8\uB85C\uACE0\uCE68\uD558\uAC70\uB098 \uB124\uD2B8\uC6CC\uD06C(CDN)\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694.</p>';\n return null;\n }\n }\n\n if (data.hourly && document.getElementById(\"chart-hours\")) {\n init(\"chart-hours\", Object.assign(baseOpt(), {\n grid: { left: 36, right: 12, top: 24, bottom: 28 },\n xAxis: { type: \"category\", data: data.hourly.map(function (_, h) { return h + \"\uC2DC\"; }), axisLabel: { color: muted, fontSize: 10 } },\n yAxis: { type: \"value\", axisLabel: { color: muted }, splitLine: { lineStyle: { color: dark ? \"rgba(255,255,255,0.06)\" : \"rgba(0,0,0,0.06)\" } } },\n series: [{\n type: \"bar\",\n data: data.hourly,\n itemStyle: {\n borderRadius: [4, 4, 0, 0],\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: accent },\n { offset: 1, color: accent2 },\n ]),\n },\n }],\n }));\n }\n\n if (data.weekdays && document.getElementById(\"chart-weekday\")) {\n init(\"chart-weekday\", Object.assign(baseOpt(), {\n grid: { left: 48, right: 12, top: 24, bottom: 28 },\n xAxis: { type: \"value\", axisLabel: { color: muted } },\n yAxis: { type: \"category\", data: data.weekdays.map(function (w) { return w.label; }), axisLabel: { color: muted } },\n series: [{ type: \"bar\", data: data.weekdays.map(function (w) { return w.count; }), itemStyle: { color: accent, borderRadius: [0, 6, 6, 0] } }],\n }));\n }\n\n if (data.monthly && document.getElementById(\"chart-monthly\")) {\n init(\"chart-monthly\", Object.assign(baseOpt(), {\n grid: { left: 40, right: 12, top: 20, bottom: 36 },\n xAxis: { type: \"category\", data: data.monthly.map(function (m) { return m.label; }), axisLabel: { color: muted, fontSize: 10, rotate: 35 } },\n yAxis: { type: \"value\", axisLabel: { color: muted }, splitLine: { lineStyle: { color: dark ? \"rgba(255,255,255,0.06)\" : \"rgba(0,0,0,0.06)\" } } },\n series: [{ type: \"line\", smooth: true, data: data.monthly.map(function (m) { return m.count; }), areaStyle: { opacity: 0.12 }, lineStyle: { width: 2, color: accent2 }, itemStyle: { color: accent2 } }],\n }));\n }\n\n if (data.daily && document.getElementById(\"chart-daily-heat\")) {\n var heat = data.daily.map(function (d) { return [d.date, d.count]; });\n var burst = {};\n (data.burstDates || []).forEach(function (d) { burst[d] = true; });\n init(\"chart-daily-heat\", Object.assign(baseOpt(), {\n tooltip: { position: \"top\" },\n visualMap: { min: 0, max: Math.max.apply(null, data.daily.map(function (d) { return d.count; })), calculable: true, orient: \"horizontal\", left: \"center\", bottom: 0, textStyle: { color: muted }, inRange: { color: dark ? [\"#161b22\", \"#0e4429\", \"#006d32\", \"#26a641\", \"#39d353\"] : [\"#ebedf0\", \"#9be9a8\", \"#40c463\", \"#30a14e\", \"#216e39\"] } },\n calendar: { top: 36, left: 40, right: 20, cellSize: [\"auto\", 14], range: data.daily.length ? [data.daily[0].date, data.daily[data.daily.length - 1].date] : undefined, itemStyle: { borderWidth: 0.5, borderColor: dark ? \"#30363d\" : \"#fff\" }, dayLabel: { color: muted, fontSize: 10 }, monthLabel: { color: muted } },\n series: [{ type: \"heatmap\", coordinateSystem: \"calendar\", data: heat }],\n }));\n }\n\n if (data.keywords && document.getElementById(\"chart-kw-bar\")) {\n var topBar = data.keywords.slice(0, 80);\n init(\"chart-kw-bar\", Object.assign(baseOpt(), {\n grid: { left: 96, right: 16, top: 12, bottom: 12 },\n xAxis: { type: \"value\", axisLabel: { color: muted } },\n yAxis: { type: \"category\", data: topBar.map(function (k) { return k.label; }).reverse(), axisLabel: { color: text, fontSize: 11 } },\n series: [{ type: \"bar\", data: topBar.map(function (k) { return k.count; }).reverse(), itemStyle: { color: accent2, borderRadius: [0, 4, 4, 0] } }],\n }));\n }\n\n if (data.keywords && document.getElementById(\"chart-kw-cloud\")) {\n var cloud = data.keywords.slice(0, 100).map(function (k) {\n return { name: k.label, value: k.count };\n });\n init(\"chart-kw-cloud\", {\n textStyle: baseOpt().textStyle,\n tooltip: { show: true },\n series: [{\n type: \"wordCloud\",\n shape: \"circle\",\n gridSize: 6,\n sizeRange: [12, 56],\n rotationRange: [-45, 45],\n textStyle: {\n fontFamily: \"Pretendard, Apple SD Gothic Neo, sans-serif\",\n color: function () {\n var palette = dark ? [\"#3ee8c5\", \"#818cf8\", \"#fbbf24\", \"#fb923c\", \"#f472b6\"] : [\"#0f6b5c\", \"#4f46e5\", \"#b8860b\", \"#c45c2a\", \"#be185d\"];\n return palette[Math.floor(Math.random() * palette.length)];\n },\n },\n data: cloud,\n }],\n });\n }\n\n if (data.participants && document.getElementById(\"chart-participants\")) {\n var p = data.participants.slice(0, 16);\n init(\"chart-participants\", Object.assign(baseOpt(), {\n tooltip: { trigger: \"item\" },\n series: [{\n type: \"pie\",\n radius: [\"42%\", \"70%\"],\n data: p.map(function (x) { return { name: x.alias, value: x.messages }; }),\n label: { color: text, fontSize: 10 },\n itemStyle: { borderRadius: 4, borderColor: dark ? \"#0d1117\" : \"#fff\", borderWidth: 2 },\n }],\n }));\n }\n\n if (data.topics && data.topics.length && document.getElementById(\"chart-topics\")) {\n var topics = data.topics.slice(0, 8);\n init(\"chart-topics\", Object.assign(baseOpt(), {\n grid: { left: 120, right: 24, top: 16, bottom: 24 },\n xAxis: { type: \"value\", axisLabel: { color: muted, formatter: \"{value}%\" } },\n yAxis: {\n type: \"category\",\n data: topics.map(function (t) { return t.title; }).reverse(),\n axisLabel: { color: text, fontSize: 11 },\n },\n series: [{\n type: \"bar\",\n data: topics.map(function (t) { return t.messagePercent; }).reverse(),\n itemStyle: {\n borderRadius: [0, 6, 6, 0],\n color: function (p) { return p.dataIndex % 2 === 0 ? accent : accent2; },\n },\n }],\n }));\n }\n\n if (data.domains && document.getElementById(\"chart-domains\")) {\n init(\"chart-domains\", Object.assign(baseOpt(), {\n tooltip: { trigger: \"item\" },\n series: [{\n type: \"treemap\",\n data: data.domains.map(function (d) { return { name: d.label, value: d.count }; }),\n label: { color: text, fontSize: 11 },\n itemStyle: { borderColor: dark ? \"#0d1117\" : \"#fff\", gapWidth: 2 },\n }],\n }));\n }\n requestAnimationFrame(resizeAll);\n setTimeout(resizeAll, 150);\n window.addEventListener(\"resize\", resizeAll);\n window.addEventListener(\"load\", resizeAll);\n }\n if (typeof echarts !== \"undefined\") {\n run();\n } else {\n window.addEventListener(\"load\", function () {\n var tries = 0;\n (function wait() {\n if (typeof echarts !== \"undefined\") { run(); return; }\n if (++tries > 120) {\n document.querySelectorAll(\".chart-box\").forEach(function (el) {\n if (!el.querySelector(\"canvas\")) {\n el.innerHTML = '<p style=\"margin:0;padding:12px;font-size:12px;color:var(--muted);text-align:center\">ECharts CDN\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.</p>';\n }\n });\n return;\n }\n setTimeout(wait, 50);\n })();\n });\n }\n })();\n";
|
|
50
|
+
export declare const CHARTS_INIT_SCRIPT = "\n (function () {\n function run() {\n var dataEl = document.getElementById(\"kca-chart-data\");\n if (!dataEl) return;\n if (typeof echarts === \"undefined\") return;\n var data;\n try { data = JSON.parse(dataEl.textContent || \"{}\"); } catch (e) { return; }\n\n var dark = document.documentElement.getAttribute(\"data-theme\") === \"dark\" ||\n (!document.documentElement.getAttribute(\"data-theme\") &&\n window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches);\n var text = dark ? \"#e9eef5\" : \"#141a1f\";\n var muted = dark ? \"#8b98a8\" : \"#5c6670\";\n var accent = dark ? \"#3ee8c5\" : \"#0f6b5c\";\n var accent2 = dark ? \"#818cf8\" : \"#4f46e5\";\n\n function baseOpt() {\n return {\n textStyle: { color: text, fontFamily: \"Pretendard, Apple SD Gothic Neo, sans-serif\" },\n tooltip: { trigger: \"axis\", backgroundColor: dark ? \"#1c2128\" : \"#fff\", borderColor: \"transparent\" },\n };\n }\n\n var charts = [];\n function resizeAll() {\n charts.forEach(function (c) {\n try { c.resize(); } catch (e) {}\n });\n }\n function layout(el) {\n var w = (el && el.clientWidth) || 400;\n if (w < 380) return { left: 28, right: 8, top: 14, bottom: 42, fs: 9, rot: 38 };\n if (w < 640) return { left: 40, right: 10, top: 18, bottom: 32, fs: 10, rot: 24 };\n return { left: 48, right: 14, top: 22, bottom: 28, fs: 11, rot: 0 };\n }\n function init(id, opt) {\n var el = document.getElementById(id);\n if (!el) return null;\n try {\n var chart = echarts.init(el, null, { renderer: \"canvas\" });\n chart.setOption(opt);\n charts.push(chart);\n if (typeof ResizeObserver !== \"undefined\") {\n var ro = new ResizeObserver(function () {\n requestAnimationFrame(function () {\n try { chart.resize(); } catch (e) {}\n });\n });\n ro.observe(el);\n }\n return chart;\n } catch (err) {\n console.error(\"[kca-chart]\", id, err);\n el.setAttribute(\"data-chart-failed\", \"1\");\n el.innerHTML = '<p style=\"margin:0;padding:12px;font-size:12px;color:var(--muted);text-align:center\">\uCC28\uD2B8\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694. \uC0C8\uB85C\uACE0\uCE68\uD558\uAC70\uB098 \uB124\uD2B8\uC6CC\uD06C(CDN)\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694.</p>';\n return null;\n }\n }\n var mqWide = window.matchMedia && window.matchMedia(\"(min-width: 900px)\");\n if (mqWide && mqWide.addEventListener) {\n mqWide.addEventListener(\"change\", function () { setTimeout(resizeAll, 80); });\n } else if (mqWide && mqWide.addListener) {\n mqWide.addListener(function () { setTimeout(resizeAll, 80); });\n }\n var themeObs = new MutationObserver(function () { setTimeout(resizeAll, 60); });\n themeObs.observe(document.documentElement, { attributes: true, attributeFilter: [\"data-theme\"] });\n\n if (data.hourly && document.getElementById(\"chart-hours\")) {\n var hoursEl = document.getElementById(\"chart-hours\");\n var hg = layout(hoursEl);\n init(\"chart-hours\", Object.assign(baseOpt(), {\n grid: { left: hg.left, right: hg.right, top: hg.top, bottom: hg.bottom },\n xAxis: { type: \"category\", data: data.hourly.map(function (_, h) { return h + \"\uC2DC\"; }), axisLabel: { color: muted, fontSize: hg.fs, rotate: hg.rot } },\n yAxis: { type: \"value\", axisLabel: { color: muted }, splitLine: { lineStyle: { color: dark ? \"rgba(255,255,255,0.06)\" : \"rgba(0,0,0,0.06)\" } } },\n series: [{\n type: \"bar\",\n data: data.hourly,\n itemStyle: {\n borderRadius: [4, 4, 0, 0],\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: accent },\n { offset: 1, color: accent2 },\n ]),\n },\n }],\n }));\n }\n\n if (data.weekdays && document.getElementById(\"chart-weekday\")) {\n init(\"chart-weekday\", Object.assign(baseOpt(), {\n grid: { left: 48, right: 12, top: 24, bottom: 28 },\n xAxis: { type: \"value\", axisLabel: { color: muted } },\n yAxis: { type: \"category\", data: data.weekdays.map(function (w) { return w.label; }), axisLabel: { color: muted } },\n series: [{ type: \"bar\", data: data.weekdays.map(function (w) { return w.count; }), itemStyle: { color: accent, borderRadius: [0, 6, 6, 0] } }],\n }));\n }\n\n if (data.monthly && document.getElementById(\"chart-monthly\")) {\n init(\"chart-monthly\", Object.assign(baseOpt(), {\n grid: { left: 40, right: 12, top: 20, bottom: 36 },\n xAxis: { type: \"category\", data: data.monthly.map(function (m) { return m.label; }), axisLabel: { color: muted, fontSize: 10, rotate: 35 } },\n yAxis: { type: \"value\", axisLabel: { color: muted }, splitLine: { lineStyle: { color: dark ? \"rgba(255,255,255,0.06)\" : \"rgba(0,0,0,0.06)\" } } },\n series: [{ type: \"line\", smooth: true, data: data.monthly.map(function (m) { return m.count; }), areaStyle: { opacity: 0.12 }, lineStyle: { width: 2, color: accent2 }, itemStyle: { color: accent2 } }],\n }));\n }\n\n if (data.daily && document.getElementById(\"chart-daily-heat\")) {\n var heat = data.daily.map(function (d) { return [d.date, d.count]; });\n var burst = {};\n (data.burstDates || []).forEach(function (d) { burst[d] = true; });\n init(\"chart-daily-heat\", Object.assign(baseOpt(), {\n tooltip: { position: \"top\" },\n visualMap: { min: 0, max: Math.max.apply(null, data.daily.map(function (d) { return d.count; })), calculable: true, orient: \"horizontal\", left: \"center\", bottom: 0, textStyle: { color: muted }, inRange: { color: dark ? [\"#161b22\", \"#0e4429\", \"#006d32\", \"#26a641\", \"#39d353\"] : [\"#ebedf0\", \"#9be9a8\", \"#40c463\", \"#30a14e\", \"#216e39\"] } },\n calendar: { top: 36, left: 40, right: 20, cellSize: [\"auto\", 14], range: data.daily.length ? [data.daily[0].date, data.daily[data.daily.length - 1].date] : undefined, itemStyle: { borderWidth: 0.5, borderColor: dark ? \"#30363d\" : \"#fff\" }, dayLabel: { color: muted, fontSize: 10 }, monthLabel: { color: muted } },\n series: [{ type: \"heatmap\", coordinateSystem: \"calendar\", data: heat }],\n }));\n }\n\n if (data.keywords && document.getElementById(\"chart-kw-bar\")) {\n var topBar = data.keywords.slice(0, 80);\n init(\"chart-kw-bar\", Object.assign(baseOpt(), {\n grid: { left: 96, right: 16, top: 12, bottom: 12 },\n xAxis: { type: \"value\", axisLabel: { color: muted } },\n yAxis: { type: \"category\", data: topBar.map(function (k) { return k.label; }).reverse(), axisLabel: { color: text, fontSize: 11 } },\n series: [{ type: \"bar\", data: topBar.map(function (k) { return k.count; }).reverse(), itemStyle: { color: accent2, borderRadius: [0, 4, 4, 0] } }],\n }));\n }\n\n if (data.keywords && document.getElementById(\"chart-kw-cloud\")) {\n var cloud = data.keywords.slice(0, 100).map(function (k) {\n return { name: k.label, value: k.count };\n });\n init(\"chart-kw-cloud\", {\n textStyle: baseOpt().textStyle,\n tooltip: { show: true },\n series: [{\n type: \"wordCloud\",\n shape: \"circle\",\n gridSize: 6,\n sizeRange: [12, 56],\n rotationRange: [-45, 45],\n textStyle: {\n fontFamily: \"Pretendard, Apple SD Gothic Neo, sans-serif\",\n color: function () {\n var palette = dark ? [\"#3ee8c5\", \"#818cf8\", \"#fbbf24\", \"#fb923c\", \"#f472b6\"] : [\"#0f6b5c\", \"#4f46e5\", \"#b8860b\", \"#c45c2a\", \"#be185d\"];\n return palette[Math.floor(Math.random() * palette.length)];\n },\n },\n data: cloud,\n }],\n });\n }\n\n if (data.participants && document.getElementById(\"chart-participants\")) {\n var p = data.participants.slice(0, 16);\n init(\"chart-participants\", Object.assign(baseOpt(), {\n tooltip: { trigger: \"item\" },\n series: [{\n type: \"pie\",\n radius: [\"42%\", \"70%\"],\n data: p.map(function (x) { return { name: x.alias, value: x.messages }; }),\n label: { color: text, fontSize: 10 },\n itemStyle: { borderRadius: 4, borderColor: dark ? \"#0d1117\" : \"#fff\", borderWidth: 2 },\n }],\n }));\n }\n\n if (data.topics && data.topics.length && document.getElementById(\"chart-topics\")) {\n var topics = data.topics.slice(0, 8);\n init(\"chart-topics\", Object.assign(baseOpt(), {\n grid: { left: 120, right: 24, top: 16, bottom: 24 },\n xAxis: { type: \"value\", axisLabel: { color: muted, formatter: \"{value}%\" } },\n yAxis: {\n type: \"category\",\n data: topics.map(function (t) { return t.title; }).reverse(),\n axisLabel: { color: text, fontSize: 11 },\n },\n series: [{\n type: \"bar\",\n data: topics.map(function (t) { return t.messagePercent; }).reverse(),\n itemStyle: {\n borderRadius: [0, 6, 6, 0],\n color: function (p) { return p.dataIndex % 2 === 0 ? accent : accent2; },\n },\n }],\n }));\n }\n\n if (data.domains && document.getElementById(\"chart-domains\")) {\n init(\"chart-domains\", Object.assign(baseOpt(), {\n tooltip: { trigger: \"item\" },\n series: [{\n type: \"treemap\",\n data: data.domains.map(function (d) { return { name: d.label, value: d.count }; }),\n label: { color: text, fontSize: 11 },\n itemStyle: { borderColor: dark ? \"#0d1117\" : \"#fff\", gapWidth: 2 },\n }],\n }));\n }\n requestAnimationFrame(resizeAll);\n setTimeout(resizeAll, 150);\n window.addEventListener(\"resize\", resizeAll);\n window.addEventListener(\"load\", resizeAll);\n }\n if (typeof echarts !== \"undefined\") {\n run();\n } else {\n window.addEventListener(\"load\", function () {\n var tries = 0;\n (function wait() {\n if (typeof echarts !== \"undefined\") { run(); return; }\n if (++tries > 120) {\n document.querySelectorAll(\".chart-box\").forEach(function (el) {\n if (!el.querySelector(\"canvas\")) {\n el.innerHTML = '<p style=\"margin:0;padding:12px;font-size:12px;color:var(--muted);text-align:center\">ECharts CDN\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.</p>';\n }\n });\n return;\n }\n setTimeout(wait, 50);\n })();\n });\n }\n })();\n";
|
|
@@ -136,6 +136,12 @@ export const CHARTS_INIT_SCRIPT = `
|
|
|
136
136
|
try { c.resize(); } catch (e) {}
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
|
+
function layout(el) {
|
|
140
|
+
var w = (el && el.clientWidth) || 400;
|
|
141
|
+
if (w < 380) return { left: 28, right: 8, top: 14, bottom: 42, fs: 9, rot: 38 };
|
|
142
|
+
if (w < 640) return { left: 40, right: 10, top: 18, bottom: 32, fs: 10, rot: 24 };
|
|
143
|
+
return { left: 48, right: 14, top: 22, bottom: 28, fs: 11, rot: 0 };
|
|
144
|
+
}
|
|
139
145
|
function init(id, opt) {
|
|
140
146
|
var el = document.getElementById(id);
|
|
141
147
|
if (!el) return null;
|
|
@@ -143,6 +149,14 @@ export const CHARTS_INIT_SCRIPT = `
|
|
|
143
149
|
var chart = echarts.init(el, null, { renderer: "canvas" });
|
|
144
150
|
chart.setOption(opt);
|
|
145
151
|
charts.push(chart);
|
|
152
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
153
|
+
var ro = new ResizeObserver(function () {
|
|
154
|
+
requestAnimationFrame(function () {
|
|
155
|
+
try { chart.resize(); } catch (e) {}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
ro.observe(el);
|
|
159
|
+
}
|
|
146
160
|
return chart;
|
|
147
161
|
} catch (err) {
|
|
148
162
|
console.error("[kca-chart]", id, err);
|
|
@@ -151,11 +165,21 @@ export const CHARTS_INIT_SCRIPT = `
|
|
|
151
165
|
return null;
|
|
152
166
|
}
|
|
153
167
|
}
|
|
168
|
+
var mqWide = window.matchMedia && window.matchMedia("(min-width: 900px)");
|
|
169
|
+
if (mqWide && mqWide.addEventListener) {
|
|
170
|
+
mqWide.addEventListener("change", function () { setTimeout(resizeAll, 80); });
|
|
171
|
+
} else if (mqWide && mqWide.addListener) {
|
|
172
|
+
mqWide.addListener(function () { setTimeout(resizeAll, 80); });
|
|
173
|
+
}
|
|
174
|
+
var themeObs = new MutationObserver(function () { setTimeout(resizeAll, 60); });
|
|
175
|
+
themeObs.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
|
|
154
176
|
|
|
155
177
|
if (data.hourly && document.getElementById("chart-hours")) {
|
|
178
|
+
var hoursEl = document.getElementById("chart-hours");
|
|
179
|
+
var hg = layout(hoursEl);
|
|
156
180
|
init("chart-hours", Object.assign(baseOpt(), {
|
|
157
|
-
grid: { left:
|
|
158
|
-
xAxis: { type: "category", data: data.hourly.map(function (_, h) { return h + "시"; }), axisLabel: { color: muted, fontSize:
|
|
181
|
+
grid: { left: hg.left, right: hg.right, top: hg.top, bottom: hg.bottom },
|
|
182
|
+
xAxis: { type: "category", data: data.hourly.map(function (_, h) { return h + "시"; }), axisLabel: { color: muted, fontSize: hg.fs, rotate: hg.rot } },
|
|
159
183
|
yAxis: { type: "value", axisLabel: { color: muted }, splitLine: { lineStyle: { color: dark ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.06)" } } },
|
|
160
184
|
series: [{
|
|
161
185
|
type: "bar",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-charts.js","sourceRoot":"","sources":["../../src/report-charts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG;;;CAG7B,CAAC;AAkBF,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC3C,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAgB;IAChD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;aACpC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;QAC3C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvF,MAAM,UAAU,GACd,UAAU,GAAG,CAAC;QACZ,CAAC,CAAC;;;;eAIO;QACT,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;yEAEgE,YAAY,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2BtE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;mEACkB,YAAY,CAAC,EAAE,CAAC;;QAE3E,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;+BAIV,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;;;;;;;MAQ/D,UAAU;;IAEZ,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kEAAkE,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CACF,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACV,+BAA+B,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CACrI;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,6JAA6J,IAAI,wBAAwB,CAAC;AACnM,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"report-charts.js","sourceRoot":"","sources":["../../src/report-charts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG;;;CAG7B,CAAC;AAkBF,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC3C,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAgB;IAChD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;aACpC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;QAC3C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvF,MAAM,UAAU,GACd,UAAU,GAAG,CAAC;QACZ,CAAC,CAAC;;;;eAIO;QACT,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;yEAEgE,YAAY,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2BtE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;mEACkB,YAAY,CAAC,EAAE,CAAC;;QAE3E,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;+BAIV,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;;;;;;;MAQ/D,UAAU;;IAEZ,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kEAAkE,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CACF,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACV,+BAA+B,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CACrI;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,6JAA6J,IAAI,wBAAwB,CAAC;AACnM,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiOjC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Generated by scripts/bundle-report-css.mjs — do not edit by hand */
|
|
2
|
-
export declare const REPORT_STYLES = "/* open-props \u2014 https://open-props.style/ (MIT) */\n:where(html){--font-system-ui:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;--font-transitional:Charter,Bitstream Charter,Sitka Text,Cambria,serif;--font-old-style:Iowan Old Style,Palatino Linotype,URW Palladio L,P052,serif;--font-humanist:Seravek,Gill Sans Nova,Ubuntu,Calibri,DejaVu Sans,source-sans-pro,sans-serif;--font-geometric-humanist:Avenir,Montserrat,Corbel,URW Gothic,source-sans-pro,sans-serif;--font-classical-humanist:Optima,Candara,Noto Sans,source-sans-pro,sans-serif;--font-neo-grotesque:Inter,Roboto,Helvetica Neue,Arial Nova,Nimbus Sans,Arial,sans-serif;--font-monospace-slab-serif:Nimbus Mono PS,Courier New,monospace;--font-monospace-code:Dank Mono,Operator Mono,Inconsolata,Fira Mono,ui-monospace,SF Mono,Monaco,Droid Sans Mono,Source Code Pro,Cascadia Code,Menlo,Consolas,DejaVu Sans Mono,monospace;--font-industrial:Bahnschrift,DIN Alternate,Franklin Gothic Medium,Nimbus Sans Narrow,sans-serif-condensed,sans-serif;--font-rounded-sans:ui-rounded,Hiragino Maru Gothic ProN,Quicksand,Comfortaa,Manjari,Arial Rounded MT,Arial Rounded MT Bold,Calibri,source-sans-pro,sans-serif;--font-slab-serif:Rockwell,Rockwell Nova,Roboto Slab,DejaVu Serif,Sitka Small,serif;--font-antique:Superclarendon,Bookman Old Style,URW Bookman,URW Bookman L,Georgia Pro,Georgia,serif;--font-didone:Didot,Bodoni MT,Noto Serif Display,URW Palladio L,P052,Sylfaen,serif;--font-handwritten:Segoe Print,Bradley Hand,Chilanka,TSCu_Comic,casual,cursive;--font-sans:var(--font-system-ui);--font-serif:ui-serif,serif;--font-mono:var(--font-monospace-code);--font-weight-1:100;--font-weight-2:200;--font-weight-3:300;--font-weight-4:400;--font-weight-5:500;--font-weight-6:600;--font-weight-7:700;--font-weight-8:800;--font-weight-9:900;--font-lineheight-00:.95;--font-lineheight-0:1.1;--font-lineheight-1:1.25;--font-lineheight-2:1.375;--font-lineheight-3:1.5;--font-lineheight-4:1.75;--font-lineheight-5:2;--font-letterspacing-0:-.05em;--font-letterspacing-1:.025em;--font-letterspacing-2:.050em;--font-letterspacing-3:.075em;--font-letterspacing-4:.150em;--font-letterspacing-5:.500em;--font-letterspacing-6:.750em;--font-letterspacing-7:1em;--font-size-00:.5rem;--font-size-0:.75rem;--font-size-1:1rem;--font-size-2:1.1rem;--font-size-3:1.25rem;--font-size-4:1.5rem;--font-size-5:2rem;--font-size-6:2.5rem;--font-size-7:3rem;--font-size-8:3.5rem;--font-size-fluid-0:max(.75rem,min(2vw,1rem));--font-size-fluid-1:max(1rem,min(4vw,1.5rem));--font-size-fluid-2:max(1.5rem,min(6vw,2.5rem));--font-size-fluid-3:max(2rem,min(9vw,3.5rem));--size-000:-.5rem;--size-00:-.25rem;--size-1:.25rem;--size-2:.5rem;--size-3:1rem;--size-4:1.25rem;--size-5:1.5rem;--size-6:1.75rem;--size-7:2rem;--size-8:3rem;--size-9:4rem;--size-10:5rem;--size-11:7.5rem;--size-12:10rem;--size-13:15rem;--size-14:20rem;--size-15:30rem;--size-px-000:-8px;--size-px-00:-4px;--size-px-1:4px;--size-px-2:8px;--size-px-3:16px;--size-px-4:20px;--size-px-5:24px;--size-px-6:28px;--size-px-7:32px;--size-px-8:48px;--size-px-9:64px;--size-px-10:80px;--size-px-11:120px;--size-px-12:160px;--size-px-13:240px;--size-px-14:320px;--size-px-15:480px;--size-fluid-1:max(.5rem,min(1vw,1rem));--size-fluid-2:max(1rem,min(2vw,1.5rem));--size-fluid-3:max(1.5rem,min(3vw,2rem));--size-fluid-4:max(2rem,min(4vw,3rem));--size-fluid-5:max(4rem,min(5vw,5rem));--size-fluid-6:max(5rem,min(7vw,7.5rem));--size-fluid-7:max(7.5rem,min(10vw,10rem));--size-fluid-8:max(10rem,min(20vw,15rem));--size-fluid-9:max(15rem,min(30vw,20rem));--size-fluid-10:max(20rem,min(40vw,30rem));--size-content-1:20ch;--size-content-2:45ch;--size-content-3:60ch;--size-header-1:20ch;--size-header-2:25ch;--size-header-3:35ch;--size-xxs:240px;--size-xs:360px;--size-sm:480px;--size-md:768px;--size-lg:1024px;--size-xl:1440px;--size-xxl:1920px;--size-relative-000:-.5ch;--size-relative-00:-.25ch;--size-relative-1:.25ch;--size-relative-2:.5ch;--size-relative-3:1ch;--size-relative-4:1.25ch;--size-relative-5:1.5ch;--size-relative-6:1.75ch;--size-relative-7:2ch;--size-relative-8:3ch;--size-relative-9:4ch;--size-relative-10:5ch;--size-relative-11:7.5ch;--size-relative-12:10ch;--size-relative-13:15ch;--size-relative-14:20ch;--size-relative-15:30ch;--ease-1:cubic-bezier(.25,0,.5,1);--ease-2:cubic-bezier(.25,0,.4,1);--ease-3:cubic-bezier(.25,0,.3,1);--ease-4:cubic-bezier(.25,0,.2,1);--ease-5:cubic-bezier(.25,0,.1,1);--ease-in-1:cubic-bezier(.25,0,1,1);--ease-in-2:cubic-bezier(.50,0,1,1);--ease-in-3:cubic-bezier(.70,0,1,1);--ease-in-4:cubic-bezier(.90,0,1,1);--ease-in-5:cubic-bezier(1,0,1,1);--ease-out-1:cubic-bezier(0,0,.75,1);--ease-out-2:cubic-bezier(0,0,.50,1);--ease-out-3:cubic-bezier(0,0,.3,1);--ease-out-4:cubic-bezier(0,0,.1,1);--ease-out-5:cubic-bezier(0,0,0,1);--ease-in-out-1:cubic-bezier(.1,0,.9,1);--ease-in-out-2:cubic-bezier(.3,0,.7,1);--ease-in-out-3:cubic-bezier(.5,0,.5,1);--ease-in-out-4:cubic-bezier(.7,0,.3,1);--ease-in-out-5:cubic-bezier(.9,0,.1,1);--ease-elastic-out-1:cubic-bezier(.5,.75,.75,1.25);--ease-elastic-out-2:cubic-bezier(.5,1,.75,1.25);--ease-elastic-out-3:cubic-bezier(.5,1.25,.75,1.25);--ease-elastic-out-4:cubic-bezier(.5,1.5,.75,1.25);--ease-elastic-out-5:cubic-bezier(.5,1.75,.75,1.25);--ease-elastic-in-1:cubic-bezier(.5,-0.25,.75,1);--ease-elastic-in-2:cubic-bezier(.5,-0.50,.75,1);--ease-elastic-in-3:cubic-bezier(.5,-0.75,.75,1);--ease-elastic-in-4:cubic-bezier(.5,-1.00,.75,1);--ease-elastic-in-5:cubic-bezier(.5,-1.25,.75,1);--ease-elastic-in-out-1:cubic-bezier(.5,-.1,.1,1.5);--ease-elastic-in-out-2:cubic-bezier(.5,-.3,.1,1.5);--ease-elastic-in-out-3:cubic-bezier(.5,-.5,.1,1.5);--ease-elastic-in-out-4:cubic-bezier(.5,-.7,.1,1.5);--ease-elastic-in-out-5:cubic-bezier(.5,-.9,.1,1.5);--ease-step-1:steps(2);--ease-step-2:steps(3);--ease-step-3:steps(4);--ease-step-4:steps(7);--ease-step-5:steps(10);--ease-elastic-1:var(--ease-elastic-out-1);--ease-elastic-2:var(--ease-elastic-out-2);--ease-elastic-3:var(--ease-elastic-out-3);--ease-elastic-4:var(--ease-elastic-out-4);--ease-elastic-5:var(--ease-elastic-out-5);--ease-squish-1:var(--ease-elastic-in-out-1);--ease-squish-2:var(--ease-elastic-in-out-2);--ease-squish-3:var(--ease-elastic-in-out-3);--ease-squish-4:var(--ease-elastic-in-out-4);--ease-squish-5:var(--ease-elastic-in-out-5);--ease-spring-1:linear(0,0.006,0.025 2.8%,0.101 6.1%,0.539 18.9%,0.721 25.3%,0.849 31.5%,0.937 38.1%,0.968 41.8%,0.991 45.7%,1.006 50.1%,1.015 55%,1.017 63.9%,1.001);--ease-spring-2:linear(0,0.007,0.029 2.2%,0.118 4.7%,0.625 14.4%,0.826 19%,0.902,0.962,1.008 26.1%,1.041 28.7%,1.064 32.1%,1.07 36%,1.061 40.5%,1.015 53.4%,0.999 61.6%,0.995 71.2%,1);--ease-spring-3:linear(0,0.009,0.035 2.1%,0.141 4.4%,0.723 12.9%,0.938 16.7%,1.017,1.077,1.121,1.149 24.3%,1.159,1.163,1.161,1.154 29.9%,1.129 32.8%,1.051 39.6%,1.017 43.1%,0.991,0.977 51%,0.974 53.8%,0.975 57.1%,0.997 69.8%,1.003 76.9%,1);--ease-spring-4:linear(0,0.009,0.037 1.7%,0.153 3.6%,0.776 10.3%,1.001,1.142 16%,1.185,1.209 19%,1.215 19.9% 20.8%,1.199,1.165 25%,1.056 30.3%,1.008 33%,0.973,0.955 39.2%,0.953 41.1%,0.957 43.3%,0.998 53.3%,1.009 59.1% 63.7%,0.998 78.9%,1);--ease-spring-5:linear(0,0.01,0.04 1.6%,0.161 3.3%,0.816 9.4%,1.046,1.189 14.4%,1.231,1.254 17%,1.259,1.257 18.6%,1.236,1.194 22.3%,1.057 27%,0.999 29.4%,0.955 32.1%,0.942,0.935 34.9%,0.933,0.939 38.4%,1 47.3%,1.011,1.017 52.6%,1.016 56.4%,1 65.2%,0.996 70.2%,1.001 87.2%,1);--ease-bounce-1:linear(0,0.004,0.016,0.035,0.063,0.098,0.141,0.191,0.25,0.316,0.391 36.8%,0.563,0.766,1 58.8%,0.946,0.908 69.1%,0.895,0.885,0.879,0.878,0.879,0.885,0.895,0.908 89.7%,0.946,1);--ease-bounce-2:linear(0,0.004,0.016,0.035,0.063,0.098,0.141 15.1%,0.25,0.391,0.562,0.765,1,0.892 45.2%,0.849,0.815,0.788,0.769,0.757,0.753,0.757,0.769,0.788,0.815,0.85,0.892 75.2%,1 80.2%,0.973,0.954,0.943,0.939,0.943,0.954,0.973,1);--ease-bounce-3:linear(0,0.004,0.016,0.035,0.062,0.098,0.141 11.4%,0.25,0.39,0.562,0.764,1 30.3%,0.847 34.8%,0.787,0.737,0.699,0.672,0.655,0.65,0.656,0.672,0.699,0.738,0.787,0.847 61.7%,1 66.2%,0.946,0.908,0.885 74.2%,0.879,0.878,0.879,0.885 79.5%,0.908,0.946,1 87.4%,0.981,0.968,0.96,0.957,0.96,0.968,0.981,1);--ease-bounce-4:linear(0,0.004,0.016 3%,0.062,0.141,0.25,0.391,0.562 18.2%,1 24.3%,0.81,0.676 32.3%,0.629,0.595,0.575,0.568,0.575,0.595,0.629,0.676 48.2%,0.811,1 56.2%,0.918,0.86,0.825,0.814,0.825,0.86,0.918,1 77.2%,0.94 80.6%,0.925,0.92,0.925,0.94 87.5%,1 90.9%,0.974,0.965,0.974,1);--ease-bounce-5:linear(0,0.004,0.016 2.5%,0.063,0.141,0.25 10.1%,0.562,1 20.2%,0.783,0.627,0.534 30.9%,0.511,0.503,0.511,0.534 38%,0.627,0.782,1 48.7%,0.892,0.815,0.769 56.3%,0.757,0.753,0.757,0.769 61.3%,0.815,0.892,1 68.8%,0.908 72.4%,0.885,0.878,0.885,0.908 79.4%,1 83%,0.954 85.5%,0.943,0.939,0.943,0.954 90.5%,1 93%,0.977,0.97,0.977,1);--layer-1:1;--layer-2:2;--layer-3:3;--layer-4:4;--layer-5:5;--layer-important:2147483647;--shadow-color:220 3% 15%;--shadow-strength:1%;--inner-shadow-highlight:inset 0 -.5px 0 0 #fff,inset 0 .5px 0 0 rgba(0,0,0,.067);--shadow-1:0 1px 2px -1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--shadow-2:0 3px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 14px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%));--shadow-3:0 -1px 3px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 2px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 5px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 4px 12px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 12px 15px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-4:0 -2px 5px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 2px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 9px 9px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 16px 16px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%));--shadow-5:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 10px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 20px 20px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 40px 40px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-6:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 3px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 12px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 22px 18px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 41px 33px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%)),0 100px 80px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--inner-shadow-0:inset 0 0 0 1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--inner-shadow-1:inset 0 1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-2:inset 0 1px 4px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-3:inset 0 2px 8px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-4:inset 0 2px 14px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--ratio-square:1;--ratio-landscape:4/3;--ratio-portrait:3/4;--ratio-widescreen:16/9;--ratio-ultrawide:18/5;--ratio-golden:1.6180/1;--gray-0:#f8f9fa;--gray-1:#f1f3f5;--gray-2:#e9ecef;--gray-3:#dee2e6;--gray-4:#ced4da;--gray-5:#adb5bd;--gray-6:#868e96;--gray-7:#495057;--gray-8:#343a40;--gray-9:#212529;--gray-10:#16191d;--gray-11:#0d0f12;--gray-12:#030507;--stone-0:#f8fafb;--stone-1:#f2f4f6;--stone-2:#ebedef;--stone-3:#e0e4e5;--stone-4:#d1d6d8;--stone-5:#b1b6b9;--stone-6:#979b9d;--stone-7:#7e8282;--stone-8:#666968;--stone-9:#50514f;--stone-10:#3a3a37;--stone-11:#252521;--stone-12:#121210;--red-0:#fff5f5;--red-1:#ffe3e3;--red-2:#ffc9c9;--red-3:#ffa8a8;--red-4:#ff8787;--red-5:#ff6b6b;--red-6:#fa5252;--red-7:#f03e3e;--red-8:#e03131;--red-9:#c92a2a;--red-10:#b02525;--red-11:#962020;--red-12:#7d1a1a;--pink-0:#fff0f6;--pink-1:#ffdeeb;--pink-2:#fcc2d7;--pink-3:#faa2c1;--pink-4:#f783ac;--pink-5:#f06595;--pink-6:#e64980;--pink-7:#d6336c;--pink-8:#c2255c;--pink-9:#a61e4d;--pink-10:#8c1941;--pink-11:#731536;--pink-12:#59102a;--purple-0:#f8f0fc;--purple-1:#f3d9fa;--purple-2:#eebefa;--purple-3:#e599f7;--purple-4:#da77f2;--purple-5:#cc5de8;--purple-6:#be4bdb;--purple-7:#ae3ec9;--purple-8:#9c36b5;--purple-9:#862e9c;--purple-10:#702682;--purple-11:#5a1e69;--purple-12:#44174f;--violet-0:#f3f0ff;--violet-1:#e5dbff;--violet-2:#d0bfff;--violet-3:#b197fc;--violet-4:#9775fa;--violet-5:#845ef7;--violet-6:#7950f2;--violet-7:#7048e8;--violet-8:#6741d9;--violet-9:#5f3dc4;--violet-10:#5235ab;--violet-11:#462d91;--violet-12:#3a2578;--indigo-0:#edf2ff;--indigo-1:#dbe4ff;--indigo-2:#bac8ff;--indigo-3:#91a7ff;--indigo-4:#748ffc;--indigo-5:#5c7cfa;--indigo-6:#4c6ef5;--indigo-7:#4263eb;--indigo-8:#3b5bdb;--indigo-9:#364fc7;--indigo-10:#2f44ad;--indigo-11:#283a94;--indigo-12:#21307a;--blue-0:#e7f5ff;--blue-1:#d0ebff;--blue-2:#a5d8ff;--blue-3:#74c0fc;--blue-4:#4dabf7;--blue-5:#339af0;--blue-6:#228be6;--blue-7:#1c7ed6;--blue-8:#1971c2;--blue-9:#1864ab;--blue-10:#145591;--blue-11:#114678;--blue-12:#0d375e;--cyan-0:#e3fafc;--cyan-1:#c5f6fa;--cyan-2:#99e9f2;--cyan-3:#66d9e8;--cyan-4:#3bc9db;--cyan-5:#22b8cf;--cyan-6:#15aabf;--cyan-7:#1098ad;--cyan-8:#0c8599;--cyan-9:#0b7285;--cyan-10:#095c6b;--cyan-11:#074652;--cyan-12:#053038;--teal-0:#e6fcf5;--teal-1:#c3fae8;--teal-2:#96f2d7;--teal-3:#63e6be;--teal-4:#38d9a9;--teal-5:#20c997;--teal-6:#12b886;--teal-7:#0ca678;--teal-8:#099268;--teal-9:#087f5b;--teal-10:#066649;--teal-11:#054d37;--teal-12:#033325;--green-0:#ebfbee;--green-1:#d3f9d8;--green-2:#b2f2bb;--green-3:#8ce99a;--green-4:#69db7c;--green-5:#51cf66;--green-6:#40c057;--green-7:#37b24d;--green-8:#2f9e44;--green-9:#2b8a3e;--green-10:#237032;--green-11:#1b5727;--green-12:#133d1b;--lime-0:#f4fce3;--lime-1:#e9fac8;--lime-2:#d8f5a2;--lime-3:#c0eb75;--lime-4:#a9e34b;--lime-5:#94d82d;--lime-6:#82c91e;--lime-7:#74b816;--lime-8:#66a80f;--lime-9:#5c940d;--lime-10:#4c7a0b;--lime-11:#3c6109;--lime-12:#2c4706;--yellow-0:#fff9db;--yellow-1:#fff3bf;--yellow-2:#ffec99;--yellow-3:#ffe066;--yellow-4:#ffd43b;--yellow-5:#fcc419;--yellow-6:#fab005;--yellow-7:#f59f00;--yellow-8:#f08c00;--yellow-9:#e67700;--yellow-10:#b35c00;--yellow-11:#804200;--yellow-12:#663500;--orange-0:#fff4e6;--orange-1:#ffe8cc;--orange-2:#ffd8a8;--orange-3:#ffc078;--orange-4:#ffa94d;--orange-5:#ff922b;--orange-6:#fd7e14;--orange-7:#f76707;--orange-8:#e8590c;--orange-9:#d9480f;--orange-10:#bf400d;--orange-11:#99330b;--orange-12:#802b09;--choco-0:#fff8dc;--choco-1:#fce1bc;--choco-2:#f7ca9e;--choco-3:#f1b280;--choco-4:#e99b62;--choco-5:#df8545;--choco-6:#d46e25;--choco-7:#bd5f1b;--choco-8:#a45117;--choco-9:#8a4513;--choco-10:#703a13;--choco-11:#572f12;--choco-12:#3d210d;--brown-0:#faf4eb;--brown-1:#ede0d1;--brown-2:#e0cab7;--brown-3:#d3b79e;--brown-4:#c5a285;--brown-5:#b78f6d;--brown-6:#a87c56;--brown-7:#956b47;--brown-8:#825b3a;--brown-9:#6f4b2d;--brown-10:#5e3a21;--brown-11:#4e2b15;--brown-12:#422412;--sand-0:#f8fafb;--sand-1:#e6e4dc;--sand-2:#d5cfbd;--sand-3:#c2b9a0;--sand-4:#aea58c;--sand-5:#9a9178;--sand-6:#867c65;--sand-7:#736a53;--sand-8:#5f5746;--sand-9:#4b4639;--sand-10:#38352d;--sand-11:#252521;--sand-12:#121210;--camo-0:#f9fbe7;--camo-1:#e8ed9c;--camo-2:#d2df4e;--camo-3:#c2ce34;--camo-4:#b5bb2e;--camo-5:#a7a827;--camo-6:#999621;--camo-7:#8c851c;--camo-8:#7e7416;--camo-9:#6d6414;--camo-10:#5d5411;--camo-11:#4d460e;--camo-12:#36300a;--jungle-0:#ecfeb0;--jungle-1:#def39a;--jungle-2:#d0e884;--jungle-3:#c2dd6e;--jungle-4:#b5d15b;--jungle-5:#a8c648;--jungle-6:#9bbb36;--jungle-7:#8fb024;--jungle-8:#84a513;--jungle-9:#7a9908;--jungle-10:#658006;--jungle-11:#516605;--jungle-12:#3d4d04;--gradient-space: ;--gradient-1:linear-gradient(to bottom right var(--gradient-space),#1f005c,#5b0060,#870160,#ac255e,#ca485c,#e16b5c,#f39060,#ffb56b);--gradient-2:linear-gradient(to bottom right var(--gradient-space),#48005c,#8300e2,#a269ff);--gradient-3:radial-gradient(circle at top right var(--gradient-space),#0ff,rgba(0,255,255,0)),radial-gradient(circle at bottom left var(--gradient-space),#ff1492,rgba(255,20,146,0));--gradient-4:linear-gradient(to bottom right var(--gradient-space),#00f5a0,#00d9f5);--gradient-5:conic-gradient(from -270deg at 75% 110% var(--gradient-space),#f0f,#fffaf0);--gradient-6:conic-gradient(from -90deg at top left var(--gradient-space),#000,#fff);--gradient-7:linear-gradient(to bottom right var(--gradient-space),#72c6ef,#004e8f);--gradient-8:conic-gradient(from 90deg at 50% 0% var(--gradient-space),#111,50%,#222,#111);--gradient-9:conic-gradient(from .5turn at bottom center var(--gradient-space),#add8e6,#fff);--gradient-10:conic-gradient(from 90deg at 40% -25% var(--gradient-space),gold,#f79d03,#ee6907,#e6390a,#de0d0d,#d61039,#cf1261,#c71585,#cf1261,#d61039,#de0d0d,#ee6907,#f79d03,gold,gold,gold);--gradient-11:conic-gradient(at bottom left var(--gradient-space),#ff1493,cyan);--gradient-12:conic-gradient(from 90deg at 25% -10% var(--gradient-space),#ff4500,#d3f340,#7bee85,#afeeee,#7bee85);--gradient-13:radial-gradient(circle at 50% 200% var(--gradient-space),#000142,#3b0083,#b300c3,#ff059f,#ff4661,#ffad86,#fff3c7);--gradient-14:conic-gradient(at top right var(--gradient-space),lime,cyan);--gradient-15:linear-gradient(to bottom right var(--gradient-space),#c7d2fe,#fecaca,#fef3c7);--gradient-16:radial-gradient(circle at 50% -250% var(--gradient-space),#374151,#111827,#000);--gradient-17:conic-gradient(from -90deg at 50% -25% var(--gradient-space),blue,#8a2be2);--gradient-18:linear-gradient(0deg var(--gradient-space),rgba(255,0,0,.8),rgba(255,0,0,0) 75%),linear-gradient(60deg var(--gradient-space),rgba(255,255,0,.8),rgba(255,255,0,0) 75%),linear-gradient(120deg var(--gradient-space),rgba(0,255,0,.8),rgba(0,255,0,0) 75%),linear-gradient(180deg var(--gradient-space),rgba(0,255,255,.8),rgba(0,255,255,0) 75%),linear-gradient(240deg var(--gradient-space),rgba(0,0,255,.8),rgba(0,0,255,0) 75%),linear-gradient(300deg var(--gradient-space),rgba(255,0,255,.8),rgba(255,0,255,0) 75%);--gradient-19:linear-gradient(to bottom right var(--gradient-space),#ffe259,#ffa751);--gradient-20:conic-gradient(from -135deg at -10% center var(--gradient-space),orange,#ff7715,#ff522a,#ff3f47,#ff5482,#ff69b4);--gradient-21:conic-gradient(from -90deg at 25% 115% var(--gradient-space),red,#f06,#f0c,#c0f,#60f,#00f,#00f,#00f,#00f);--gradient-22:linear-gradient(to bottom right var(--gradient-space),#acb6e5,#86fde8);--gradient-23:linear-gradient(to bottom right var(--gradient-space),#536976,#292e49);--gradient-24:conic-gradient(from .5turn at 0% 0% var(--gradient-space),#00c476,10%,#82b0ff,90%,#00c476);--gradient-25:conic-gradient(at 125% 50% var(--gradient-space),#b78cf7,#ff7c94,#ffcf0d,#ff7c94,#b78cf7);--gradient-26:linear-gradient(to bottom right var(--gradient-space),#9796f0,#fbc7d4);--gradient-27:conic-gradient(from .5turn at bottom left var(--gradient-space),#ff1493,#639);--gradient-28:conic-gradient(from -90deg at 50% 105% var(--gradient-space),#fff,orchid);--gradient-29:radial-gradient(circle at top right var(--gradient-space),#bfb3ff,rgba(191,179,255,0)),radial-gradient(circle at bottom left var(--gradient-space),#86acf9,rgba(134,172,249,0));--gradient-30:radial-gradient(circle at top right var(--gradient-space),#00ff80,rgba(0,255,128,0)),radial-gradient(circle at bottom left var(--gradient-space),#adffd6,rgba(173,255,214,0));--noise-1:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.005' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-2:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.05' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-3:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.25' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-4:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-5:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-filter-1:contrast(300%) brightness(100%);--noise-filter-2:contrast(200%) brightness(150%);--noise-filter-3:contrast(200%) brightness(250%);--noise-filter-4:contrast(200%) brightness(500%);--noise-filter-5:contrast(200%) brightness(1000%);--animation-fade-in:fade-in .5s var(--ease-3);--animation-fade-in-bloom:fade-in-bloom 2s var(--ease-3);--animation-fade-out:fade-out .5s var(--ease-3);--animation-fade-out-bloom:fade-out-bloom 2s var(--ease-3);--animation-scale-up:scale-up .5s var(--ease-3);--animation-scale-down:scale-down .5s var(--ease-3);--animation-slide-out-up:slide-out-up .5s var(--ease-3);--animation-slide-out-down:slide-out-down .5s var(--ease-3);--animation-slide-out-right:slide-out-right .5s var(--ease-3);--animation-slide-out-left:slide-out-left .5s var(--ease-3);--animation-slide-in-up:slide-in-up .5s var(--ease-3);--animation-slide-in-down:slide-in-down .5s var(--ease-3);--animation-slide-in-right:slide-in-right .5s var(--ease-3);--animation-slide-in-left:slide-in-left .5s var(--ease-3);--animation-shake-x:shake-x .75s var(--ease-out-5);--animation-shake-y:shake-y .75s var(--ease-out-5);--animation-shake-z:shake-z 1s var(--ease-in-out-3);--animation-spin:spin 2s linear infinite;--animation-ping:ping 5s var(--ease-out-3) infinite;--animation-blink:blink 1s var(--ease-out-3) infinite;--animation-float:float 3s var(--ease-in-out-3) infinite;--animation-bounce:bounce 2s var(--ease-squish-2) infinite;--animation-pulse:pulse 2s var(--ease-out-3) infinite;--border-size-1:1px;--border-size-2:2px;--border-size-3:5px;--border-size-4:10px;--border-size-5:25px;--radius-1:2px;--radius-2:5px;--radius-3:1rem;--radius-4:2rem;--radius-5:4rem;--radius-6:8rem;--radius-drawn-1:255px 15px 225px 15px/15px 225px 15px 255px;--radius-drawn-2:125px 10px 20px 185px/25px 205px 205px 25px;--radius-drawn-3:15px 255px 15px 225px/225px 15px 255px 15px;--radius-drawn-4:15px 25px 155px 25px/225px 150px 25px 115px;--radius-drawn-5:250px 25px 15px 20px/15px 80px 105px 115px;--radius-drawn-6:28px 100px 20px 15px/150px 30px 205px 225px;--radius-round:1e5px;--radius-blob-1:30% 70% 70% 30%/53% 30% 70% 47%;--radius-blob-2:53% 47% 34% 66%/63% 46% 54% 37%;--radius-blob-3:37% 63% 56% 44%/49% 56% 44% 51%;--radius-blob-4:63% 37% 37% 63%/43% 37% 63% 57%;--radius-blob-5:49% 51% 48% 52%/57% 44% 56% 43%;--radius-conditional-1:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-1));--radius-conditional-2:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-2));--radius-conditional-3:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-3));--radius-conditional-4:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-4));--radius-conditional-5:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-5));--radius-conditional-6:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-6))}@media (prefers-color-scheme:dark){:where(html){--shadow-color:220 40% 2%;--shadow-strength:25%;--inner-shadow-highlight:inset 0 -.5px 0 0 hsla(0,0%,100%,.067),inset 0 .5px 0 0 rgba(0,0,0,.467)}}@supports (background:linear-gradient(to right in oklab,#000,#fff)){:where(html){--gradient-space:in oklab}}@keyframes fade-in{to{opacity:1}}@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}@keyframes scale-up{to{transform:scale(1.25)}}@keyframes scale-down{to{transform:scale(.75)}}@keyframes slide-out-up{to{transform:translateY(-100%)}}@keyframes slide-out-down{to{transform:translateY(100%)}}@keyframes slide-out-right{to{transform:translateX(100%)}}@keyframes slide-out-left{to{transform:translateX(-100%)}}@keyframes slide-in-up{0%{transform:translateY(100%)}}@keyframes slide-in-down{0%{transform:translateY(-100%)}}@keyframes slide-in-right{0%{transform:translateX(-100%)}}@keyframes slide-in-left{0%{transform:translateX(100%)}}@keyframes shake-x{0%,to{transform:translateX(0)}20%{transform:translateX(-5%)}40%{transform:translateX(5%)}60%{transform:translateX(-5%)}80%{transform:translateX(5%)}}@keyframes shake-y{0%,to{transform:translateY(0)}20%{transform:translateY(-5%)}40%{transform:translateY(5%)}60%{transform:translateY(-5%)}80%{transform:translateY(5%)}}@keyframes shake-z{0%,to{transform:rotate(0deg)}20%{transform:rotate(-2deg)}40%{transform:rotate(2deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(2deg)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{90%,to{opacity:0;transform:scale(2)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.5}}@keyframes float{50%{transform:translateY(-25%)}}@keyframes bounce{25%{transform:translateY(-20%)}40%{transform:translateY(-3%)}0%,60%,to{transform:translateY(0)}}@keyframes pulse{50%{transform:scale(.9)}}@media (prefers-color-scheme:dark){@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}}@media (prefers-color-scheme:dark){@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}}\n\n/* 00-kca-tokens.css */\n/* kca \uC2DC\uB9E8\uD2F1 \uD1A0\uD070 \u2014 Open Props(\uADF8\uB77C\uB370\uC774\uC158\u00B7radius\u00B7shadow) + \uBA85\uC2DC \uD314\uB808\uD2B8(\uB300\uBE44) */\n:root {\n color-scheme: light dark;\n --bg: #f4f1ea;\n --bg2: #e8e2d6;\n --ink: #141a1f;\n --muted: #5c6670;\n --line: #d4cdc2;\n --panel: #fffcf7;\n --panel-solid: #fffcf7;\n --accent: #0f6b5c;\n --accent2: #5b4fc7;\n --warm: #c45c2a;\n --gold: #b8860b;\n --shadow: var(--shadow-4, 0 18px 50px rgba(20, 26, 31, 0.08));\n --bar-bg: #e5dfd4;\n --glow: color-mix(in oklab, var(--teal-5, #0f6b5c) 18%, transparent);\n --glass: rgba(255, 252, 247, 0.82);\n --glass-border: rgba(20, 26, 31, 0.1);\n --accent-grad: var(--gradient-21, linear-gradient(125deg, var(--accent), var(--accent2)));\n --radius-card: var(--radius-3, 14px);\n --radius-pill: var(--radius-round, 999px);\n --kca-font-sans: \"Pretendard Variable\", Pretendard, \"Apple SD Gothic Neo\", \"Malgun Gothic\", var(--font-sans, system-ui, sans-serif);\n --ease-out: var(--ease-out-3, cubic-bezier(0.22, 1, 0.36, 1));\n font-family: var(--kca-font-sans);\n}\n\n@media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) {\n --bg: #070a0e;\n --bg2: #0e1218;\n --ink: #e9eef5;\n --muted: #8b98a8;\n --line: rgba(255, 255, 255, 0.12);\n --panel: #161b22;\n --panel-solid: #161b22;\n --accent: #3ee8c5;\n --accent2: #a78bfa;\n --warm: #ff9f43;\n --gold: #fbbf24;\n --shadow: var(--shadow-4, 0 28px 90px rgba(0, 0, 0, 0.55));\n --bar-bg: rgba(255, 255, 255, 0.08);\n --glow: color-mix(in oklab, var(--teal-4, #3ee8c5) 20%, transparent);\n --glass: rgba(22, 27, 34, 0.88);\n --glass-border: rgba(255, 255, 255, 0.1);\n --accent-grad: var(--gradient-27, linear-gradient(125deg, var(--accent), var(--accent2)));\n }\n}\n\n:root[data-theme=\"dark\"] {\n --bg: #070a0e;\n --bg2: #0e1218;\n --ink: #e9eef5;\n --muted: #8b98a8;\n --line: rgba(255, 255, 255, 0.12);\n --panel: #161b22;\n --panel-solid: #161b22;\n --accent: #3ee8c5;\n --accent2: #a78bfa;\n --warm: #ff9f43;\n --gold: #fbbf24;\n --shadow: 0 28px 90px rgba(0, 0, 0, 0.55);\n --bar-bg: rgba(255, 255, 255, 0.08);\n --glow: color-mix(in oklab, #3ee8c5 20%, transparent);\n --glass: rgba(22, 27, 34, 0.88);\n --glass-border: rgba(255, 255, 255, 0.1);\n --accent-grad: linear-gradient(125deg, var(--accent), var(--accent2));\n}\n\n:root[data-theme=\"light\"] {\n --bg: #f4f1ea;\n --bg2: #e8e2d6;\n --ink: #141a1f;\n --muted: #5c6670;\n --line: #d4cdc2;\n --panel: #fffcf7;\n --panel-solid: #fffcf7;\n --accent: #0f6b5c;\n --accent2: #5b4fc7;\n --warm: #c45c2a;\n --gold: #b8860b;\n --shadow: 0 18px 50px rgba(20, 26, 31, 0.08);\n --bar-bg: #e5dfd4;\n --glow: color-mix(in oklab, #0f6b5c 18%, transparent);\n --glass: rgba(255, 252, 247, 0.82);\n --glass-border: rgba(20, 26, 31, 0.1);\n --accent-grad: linear-gradient(125deg, var(--accent), var(--accent2));\n}\n\n\n/* 01-kca-base.css */\n/* kca \uB9AC\uC14B\u00B7\uD0C0\uC774\uD3EC\u00B7\uBAA8\uC158 */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n overflow-x: clip;\n max-width: 100%;\n}\n\nbody {\n margin: 0;\n overflow-x: clip;\n max-width: 100%;\n background:\n radial-gradient(1200px 600px at 8% -12%, var(--glow), transparent 58%),\n radial-gradient(900px 480px at 96% 0%, color-mix(in oklab, var(--accent2) 14%, transparent), transparent 48%),\n linear-gradient(180deg, var(--bg), var(--bg2));\n color: var(--ink);\n font-family: var(--kca-font-sans);\n font-size: var(--font-size-1);\n line-height: var(--font-lineheight-3);\n transition:\n background 0.28s var(--ease-out),\n color 0.2s var(--ease-out);\n}\n\n.skip-link {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.skip-link:focus {\n position: fixed;\n left: var(--size-3);\n top: var(--size-3);\n width: auto;\n height: auto;\n margin: 0;\n clip: auto;\n z-index: 10000;\n padding: var(--size-2) var(--size-3);\n border-radius: var(--radius-2);\n background: var(--accent);\n color: var(--gray-0);\n font-weight: var(--font-weight-8);\n font-size: var(--font-size-0);\n box-shadow: var(--shadow-3);\n}\n\nmain {\n width: min(var(--size-content-3, 72rem), calc(100% - var(--size-4)));\n margin: 0 auto;\n padding: var(--size-6) 0 var(--size-8);\n overflow-x: clip;\n max-width: 100%;\n}\n\nh1 {\n margin: 0;\n font-size: clamp(var(--font-size-5), 4.2vw, var(--font-size-8));\n line-height: var(--font-lineheight-00);\n letter-spacing: var(--font-letterspacing-0);\n font-weight: var(--font-weight-8);\n}\n\nh2 {\n margin: 0 0 var(--size-2);\n font-size: var(--font-size-3);\n font-weight: var(--font-weight-7);\n letter-spacing: var(--font-letterspacing-0);\n}\n\na {\n color: var(--accent);\n}\n\n@keyframes kca-fade-up {\n from {\n opacity: 0;\n transform: translateY(var(--size-3));\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes kca-ring-in {\n from {\n transform: scale(0.92);\n opacity: 0.75;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.anim-enter {\n animation: kca-fade-up 0.52s var(--ease-out) forwards;\n opacity: 0;\n animation-delay: var(--enter-delay, 0s);\n}\n\n.rh-wrap.anim-ring {\n animation: kca-ring-in 0.65s var(--ease-out) forwards;\n}\n\n.anim-enter:target {\n opacity: 1 !important;\n transform: none !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n html {\n scroll-behavior: auto;\n }\n .anim-enter,\n .rh-wrap.anim-ring {\n animation: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n}\n\n\n/* 02-kca-components.css */\n .card {\n background: var(--panel);\n border: 1px solid var(--line);\n border-radius: var(--radius-card);\n padding: 18px 20px;\n box-shadow: var(--shadow);\n transition: box-shadow 0.22s ease, transform 0.22s ease, border-color 0.2s ease;\n }\n .card:hover {\n border-color: var(--accent);\n box-shadow: 0 22px 56px rgba(20, 26, 31, 0.11);\n transform: translateY(-2px);\n }\n :root[data-theme=\"dark\"] .card:hover {\n box-shadow: 0 28px 72px rgba(0, 0, 0, 0.45);\n }\n .fact-hero-strip {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 10px;\n margin: 0 0 14px;\n }\n @media (max-width: 560px) { .fact-hero-strip { grid-template-columns: 1fr; } }\n .fact-hero-cell {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(15, 107, 92, 0.08), transparent);\n }\n .fact-hero-cell b {\n display: block;\n font-size: 11px;\n font-weight: 750;\n color: var(--muted);\n margin-bottom: 4px;\n letter-spacing: 0.02em;\n }\n .fact-hero-cell span {\n font-size: clamp(22px, 4vw, 28px);\n font-weight: 900;\n letter-spacing: -0.03em;\n font-variant-numeric: tabular-nums;\n color: var(--ink);\n }\n .glossary {\n margin-top: 18px;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n font-size: 13px;\n line-height: 1.55;\n color: var(--muted);\n }\n .glossary > summary {\n cursor: pointer;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n }\n .glossary > summary::-webkit-details-marker { display: none; }\n .glossary dl { margin: 12px 0 0; display: grid; gap: 10px; }\n .glossary dt { font-weight: 750; color: var(--ink); font-size: 12px; }\n .glossary dd { margin: 2px 0 0; padding: 0; font-size: 12px; }\n .chart-stack { display: flex; flex-direction: column; gap: 14px; }\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin-bottom: 18px;\n padding: 10px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n box-shadow: var(--shadow);\n }\n.toolbar-label { font-size: 12px; font-weight: 700; color: var(--muted); margin-right: 4px; }\n .theme-btn {\n font: inherit;\n font-size: 12px;\n font-weight: 650;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: transparent;\n color: var(--ink);\n cursor: pointer;\n }\n .theme-btn:hover { border-color: var(--accent); color: var(--accent); }\n .hero { display: grid; gap: 20px; grid-template-columns: 1.35fr 1fr; align-items: stretch; padding-bottom: 28px; }\n h1 { margin: 0; font-size: clamp(28px, 4.2vw, 48px); line-height: 1.08; letter-spacing: -0.03em; font-weight: 800; }\n .room-title {\n margin: 10px 0 0;\n font-size: clamp(18px, 2.8vw, 26px);\n line-height: 1.25;\n font-weight: 750;\n letter-spacing: -0.02em;\n color: var(--accent);\n word-break: break-word;\n }\n .sub { margin: 12px 0 0; color: var(--muted); line-height: 1.65; font-size: 15px; max-width: 52ch; }\n .badge-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }\n .badge { font-size: 12px; padding: 6px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel); color: var(--muted); }\n .side-card { display: flex; flex-direction: column; gap: 10px; justify-content: center; }\n .side-card p { margin: 0; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .side-card strong { color: var(--ink); }\n h2 { margin: 0 0 12px; font-size: 17px; font-weight: 750; letter-spacing: -0.02em; }\n .grid { display: grid; gap: 14px; }\n .two { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .three { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n .highlights { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }\n .highlights li { padding: 12px 14px; border-radius: 10px; background: linear-gradient(120deg, rgba(15,107,92,0.08), rgba(196,92,42,0.06)); border: 1px solid rgba(15,107,92,0.15); font-size: 14px; line-height: 1.55; }\n .highlights strong { color: var(--accent); font-weight: 750; }\n .bars { display: grid; gap: 8px; }\n .bar-row { display: grid; grid-template-columns: minmax(72px, 1fr) minmax(0, 2.2fr) 52px; gap: 10px; align-items: center; min-height: 22px; }\n .bar-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }\n .bar-track { height: 9px; background: var(--bar-bg); border-radius: 999px; overflow: hidden; }\n .bar-fill {\n display: block;\n height: 100%;\n min-width: 2px;\n background: linear-gradient(90deg, var(--accent), #1a9d87);\n border-radius: inherit;\n }\n .bar-value { text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12px; }\n .chart-hint { margin: 0 0 10px; font-size: 12px; color: var(--muted); line-height: 1.45; }\n .chart-hint strong { color: var(--ink); font-weight: 700; }\n .calendar {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(44px, 1fr));\n gap: 5px;\n width: 100%;\n box-sizing: border-box;\n }\n .day {\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n min-width: 0;\n aspect-ratio: 1;\n padding: 4px 2px;\n font-weight: 650;\n border: 1px solid var(--line);\n }\n .day-k { font-size: 9px; line-height: 1.15; font-weight: 750; letter-spacing: -0.02em; }\n .day-n { font-size: 11px; line-height: 1; font-weight: 800; font-variant-numeric: tabular-nums; }\n .day-burst { box-shadow: inset 0 0 0 2px #e85d04; position: relative; }\n .pace-ribbon {\n display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;\n margin: 0 0 14px; padding: 12px 14px; border-radius: 12px;\n background: linear-gradient(120deg, rgba(232,93,4,0.1), rgba(15,107,92,0.08));\n border: 1px solid rgba(232,93,4,0.22);\n }\n .pace-ribbon strong { font-size: 15px; font-weight: 800; }\n .pace-ribbon span { font-size: 13px; color: var(--muted); line-height: 1.45; }\n .arc-strip { display: flex; flex-wrap: wrap; gap: 10px; margin: 12px 0 0; }\n .arc-chip {\n flex: 1 1 140px; min-width: 120px; padding: 10px 12px; border-radius: 10px;\n background: var(--panel); border: 1px solid var(--line);\n }\n .arc-chip b { display: block; font-size: 18px; font-weight: 850; color: var(--accent); }\n .arc-chip small { font-size: 11px; color: var(--muted); }\n .pulse-mini { margin-top: 12px; }\n .pulse-mini h4 { margin: 0 0 6px; font-size: 12px; font-weight: 750; color: var(--muted); }\n .pulse-row { display: flex; align-items: flex-end; gap: 3px; height: 52px; overflow-x: auto; padding-bottom: 4px; }\n .pulse-bar {\n flex: 0 0 10px; min-height: 4px; border-radius: 3px 3px 1px 1px;\n background: linear-gradient(180deg, #ea580c 55%, #0f6b5c 100%);\n opacity: 0.85;\n }\n .hours-wrap { display: flex; flex-direction: column; gap: 8px; }\n .hours-split { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n @media (max-width: 560px) { .hours-split { grid-template-columns: 1fr; } }\n .hours-half { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n .hours-band {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n padding: 4px 8px;\n border-radius: 6px;\n text-align: center;\n }\n .hours-band-am { color: #0c4a6e; background: rgba(8, 145, 178, 0.14); }\n .hours-band-pm { color: #9a3412; background: rgba(234, 88, 12, 0.14); }\n :root[data-theme=\"dark\"] .hours-band-am { color: #7dd3fc; background: rgba(8, 145, 178, 0.22); }\n :root[data-theme=\"dark\"] .hours-band-pm { color: #fdba74; background: rgba(234, 88, 12, 0.2); }\n .hours-bars { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 3px; align-items: end; height: 120px; }\n .hour {\n min-width: 0;\n width: 100%;\n align-self: end;\n border-radius: 4px 4px 0 0;\n }\n .hour-am { background: linear-gradient(180deg, #22d3ee, #0891b2); }\n .hour-pm { background: linear-gradient(180deg, #fb923c, #ea580c); }\n .hours-labels {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n gap: 2px;\n font-size: 9px;\n line-height: 1.15;\n color: var(--muted);\n text-align: center;\n font-variant-numeric: tabular-nums;\n }\n .hours-labels span { min-width: 0; }\n .table { width: 100%; border-collapse: collapse; font-size: 13px; }\n .table-rank { width: 100%; max-width: 100%; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; table-layout: fixed; }\n .table-rank thead th {\n color: var(--muted);\n font-weight: 700;\n font-size: 11px;\n padding: 10px 8px;\n background: var(--bar-bg);\n border-bottom: 2px solid var(--line);\n }\n .table-rank tbody tr { border-bottom: 1px solid var(--line); }\n .table-rank tbody tr:last-child { border-bottom: none; }\n .table-rank tbody tr:nth-child(even) { background: rgba(15, 107, 92, 0.04); }\n :root[data-theme=\"dark\"] .table-rank tbody tr:nth-child(even) { background: rgba(255, 255, 255, 0.03); }\n .table-rank td { padding: 10px 8px; }\n .table-rank td:first-child { font-weight: 700; color: var(--ink); }\n .table th, .table td { text-align: left; border-bottom: 1px solid var(--line); padding: 9px 6px; }\n .table th { color: var(--muted); font-weight: 650; font-size: 11px; text-transform: none; }\n .table td.num { text-align: right; font-variant-numeric: tabular-nums; }\n .kw-note {\n margin: 0 0 10px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--line);\n background: rgba(15, 107, 92, 0.06);\n font-size: 12px;\n line-height: 1.55;\n color: var(--muted);\n }\n .topic-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n gap: 12px;\n margin-top: 12px;\n }\n .topic-card {\n border: 1px solid var(--line);\n border-radius: 12px;\n padding: 12px 14px;\n background: var(--bar-bg);\n }\n .topic-card header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n font-size: 14px;\n }\n .topic-badge {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n padding: 2px 7px;\n border-radius: 999px;\n }\n .topic-badge.theme { background: rgba(15, 107, 92, 0.15); color: var(--accent); }\n .topic-badge.period { background: rgba(196, 92, 42, 0.15); color: var(--warm); }\n .topic-pct { margin-left: auto; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }\n .topic-chips { display: flex; flex-wrap: wrap; gap: 6px; }\n .topic-chip {\n font-size: 12px;\n padding: 4px 9px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: rgba(255, 255, 255, 0.5);\n color: var(--ink);\n }\n :root[data-theme=\"dark\"] .topic-chip { background: rgba(255, 255, 255, 0.06); }\n .self-serve {\n margin-top: 14px;\n border: 1px dashed rgba(15, 107, 92, 0.38);\n border-radius: 12px;\n padding: 16px 18px;\n background: linear-gradient(135deg, rgba(15, 107, 92, 0.06), rgba(196, 92, 42, 0.04));\n font-size: 13px;\n line-height: 1.6;\n color: var(--muted);\n }\n .self-serve h2 { margin: 0 0 10px; font-size: 16px; font-weight: 750; color: var(--ink); letter-spacing: -0.02em; }\n .self-serve p { margin: 0 0 8px; }\n .self-serve ol { margin: 0 0 10px; padding-left: 1.25rem; }\n .self-serve li { margin: 4px 0; }\n .self-serve code { font-size: 11.5px; background: var(--bar-bg); padding: 1px 5px; border-radius: 4px; color: var(--ink); }\n .self-serve .cmd {\n margin: 10px 0 12px;\n padding: 11px 13px;\n border-radius: 8px;\n background: var(--bar-bg);\n border: 1px solid var(--line);\n font-family: ui-monospace, \"Cascadia Code\", \"Consolas\", monospace;\n font-size: 12px;\n line-height: 1.45;\n color: var(--ink);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n max-width: 100%;\n }\n .self-serve .links { margin: 10px 0 0; font-size: 12px; }\n .self-serve .links a { font-weight: 650; }\n .insight-hero { position: relative; overflow: hidden; }\n .insight-hero::before {\n content: \"\";\n position: absolute;\n inset: -40% 40% auto -20%;\n height: 120%;\n background: radial-gradient(closest-side, var(--glow), transparent 70%);\n pointer-events: none;\n }\n .insight-head { display: flex; flex-wrap: wrap; gap: 20px; justify-content: space-between; align-items: flex-start; position: relative; z-index: 1; }\n .insight-lede { margin: 8px 0 0; color: var(--muted); font-size: 14px; line-height: 1.65; max-width: 62ch; }\n .insight-grid {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 10px;\n margin-top: 18px;\n position: relative;\n z-index: 1;\n }\n @media (min-width: 1080px) {\n .insight-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n }\n @media (max-width: 720px) { .insight-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n .ins-metric {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(255,255,255,0.04), transparent);\n }\n .ins-m-label { display: block; font-size: 11px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 6px; }\n .ins-m-val { font-size: 22px; font-weight: 850; letter-spacing: -0.03em; line-height: 1.1; }\n .ins-m-sub { display: block; font-size: 11px; color: var(--muted); margin-top: 6px; }\n .insight-split { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 22px; position: relative; z-index: 1; }\n @media (max-width: 900px) { .insight-split { grid-template-columns: 1fr; } }\n .insight-sub { margin: 0 0 6px; font-size: 14px; font-weight: 750; color: var(--ink); }\n .daypart-bar { display: flex; height: 14px; border-radius: 999px; overflow: hidden; border: 1px solid var(--line); }\n .dp-seg { min-width: 2px; height: 100%; transition: opacity 0.2s; }\n .dp-seg:hover { opacity: 0.85; }\n .daypart-legend { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px 16px; font-size: 12px; color: var(--muted); }\n .daypart-legend li { display: flex; align-items: center; gap: 6px; }\n .daypart-legend i { width: 10px; height: 10px; border-radius: 2px; flex-shrink: 0; }\n .rh-wrap { position: relative; width: 108px; height: 108px; flex-shrink: 0; }\n .rh-ring {\n width: 108px;\n height: 108px;\n border-radius: 50%;\n background: conic-gradient(from -90deg, var(--accent) calc(var(--p) * 1%), var(--bar-bg) 0);\n display: grid;\n place-items: center;\n box-shadow: 0 0 0 1px var(--line) inset;\n }\n .rh-ring span {\n width: 74px;\n height: 74px;\n border-radius: 50%;\n background: var(--panel);\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--line);\n }\n .rh-cap {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n font-size: 11px;\n color: var(--muted);\n font-weight: 700;\n }\n .rh-cap span { font-size: 22px; font-weight: 900; color: var(--ink); letter-spacing: -0.04em; }\n .rh-cap small { font-size: 11px; font-weight: 700; color: var(--muted); margin-left: 1px; }\n .sc-plot {\n position: relative;\n width: 100%;\n max-width: 100%;\n margin-top: 4px;\n padding: 32px 8px 36px 8px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background-color: var(--panel);\n background-image:\n linear-gradient(to right, color-mix(in srgb, var(--line) 55%, transparent) 1px, transparent 1px),\n linear-gradient(to bottom, color-mix(in srgb, var(--line) 55%, transparent) 1px, transparent 1px);\n background-size: 25% 25%;\n overflow: hidden;\n }\n @media (min-width: 560px) {\n .sc-plot {\n aspect-ratio: 5 / 4;\n min-height: 240px;\n max-height: 380px;\n padding: 28px 12px 40px 12px;\n }\n }\n .sc-grid-label {\n position: absolute;\n font-size: 10px;\n font-weight: 700;\n color: var(--muted);\n letter-spacing: 0.02em;\n pointer-events: none;\n line-height: 1.2;\n }\n .sc-lbl-top { left: 50%; top: 6px; transform: translateX(-50%); }\n .sc-lbl-bottom { left: 50%; bottom: 8px; transform: translateX(-50%); }\n .sc-lbl-left { left: 6px; top: 50%; transform: translateY(-50%) rotate(-90deg); transform-origin: left center; }\n .sc-lbl-right { right: 6px; top: 50%; transform: translateY(-50%) rotate(90deg); transform-origin: right center; }\n .sc-quadrant {\n position: absolute;\n font-size: 9px;\n font-weight: 650;\n color: color-mix(in srgb, var(--muted) 75%, transparent);\n pointer-events: none;\n }\n .sc-q-tl { left: 12%; top: 14%; }\n .sc-q-tr { right: 10%; top: 14%; }\n .sc-q-bl { left: 12%; bottom: 18%; }\n .sc-q-br { right: 10%; bottom: 18%; }\n .bubble-node {\n position: relative;\n display: flex;\n align-items: flex-start;\n gap: 0;\n max-width: 100%;\n z-index: 1;\n }\n @media (min-width: 560px) {\n .bubble-node {\n position: absolute;\n transform: translate(-50%, -50%) scale(var(--bubble-scale, 1));\n max-width: min(34%, 140px);\n }\n }\n .bubble-shape {\n flex-shrink: 0;\n width: 10px;\n height: 10px;\n margin-top: 12px;\n background: hsl(var(--bubble-hue, 168) 62% 42%);\n border-radius: 0 0 0 3px;\n clip-path: polygon(0 0, 100% 50%, 0 100%);\n }\n @media (min-width: 560px) {\n .bubble-shape {\n position: absolute;\n inset: 0;\n width: auto;\n height: auto;\n margin: 0;\n clip-path: none;\n border-radius: 14px 14px 14px 4px;\n background: hsl(var(--bubble-hue, 168) 48% 94%);\n border: 2px solid hsl(var(--bubble-hue, 168) 58% 40%);\n opacity: 0.98;\n z-index: 0;\n }\n :root[data-theme=\"dark\"] .bubble-shape {\n background: hsl(var(--bubble-hue, 168) 35% 22%);\n border-color: hsl(var(--bubble-hue, 168) 55% 48%);\n }\n }\n .bubble-content {\n flex: 1;\n min-width: 0;\n padding: 8px 11px;\n border-radius: 14px;\n border: 2px solid hsl(var(--bubble-hue, 168) 58% 40%);\n background: hsl(var(--bubble-hue, 168) 48% 96%);\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n }\n :root[data-theme=\"dark\"] .bubble-content {\n background: hsl(var(--bubble-hue, 168) 35% 20%);\n border-color: hsl(var(--bubble-hue, 168) 55% 48%);\n }\n @media (min-width: 560px) {\n .bubble-content {\n position: relative;\n z-index: 1;\n text-align: center;\n border: none;\n background: transparent;\n box-shadow: none;\n padding: 6px 8px;\n }\n }\n .bubble-content strong {\n display: block;\n font-size: 11px;\n font-weight: 800;\n color: var(--ink);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .bubble-content .bubble-pct {\n display: block;\n font-size: 15px;\n font-weight: 900;\n letter-spacing: -0.03em;\n color: hsl(var(--bubble-hue, 168) 55% 32%);\n font-variant-numeric: tabular-nums;\n }\n :root[data-theme=\"dark\"] .bubble-content .bubble-pct {\n color: hsl(var(--bubble-hue, 168) 70% 72%);\n }\n .bubble-content small {\n display: block;\n margin-top: 2px;\n font-size: 9px;\n color: var(--muted);\n font-weight: 650;\n }\n .sc-plot-list {\n display: grid;\n gap: 10px;\n }\n @media (min-width: 560px) {\n .sc-plot-list { display: block; position: absolute; inset: 0; }\n .sc-plot-list .bubble-node { margin: 0; }\n }\n .fact-card { margin-bottom: 14px; padding: 14px 16px; }\n .fact-card h2 { margin: 0 0 6px; font-size: 15px; }\n .fact-hint { margin: 0 0 10px; font-size: 11px; color: var(--muted); line-height: 1.45; }\n .fact-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(118px, 1fr));\n gap: 5px 7px;\n }\n .fact-cell {\n padding: 5px 7px;\n border-radius: 8px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(255, 255, 255, 0.04), transparent);\n min-height: 42px;\n }\n .fact-cell b {\n display: block;\n color: var(--muted);\n font-size: 9px;\n font-weight: 750;\n letter-spacing: 0.03em;\n line-height: 1.15;\n margin-bottom: 2px;\n }\n .fact-cell span {\n font-weight: 850;\n font-size: 12.5px;\n font-variant-numeric: tabular-nums;\n letter-spacing: -0.02em;\n }\n footer { margin-top: 28px; color: var(--muted); font-size: 11px; line-height: 1.5; }\n @media (max-width: 900px) {\n .hero, .two, .three { grid-template-columns: 1fr; }\n }\n\n\n/* 03-kca-story.css */\n#s-wrapped, #s-personas, #s-chapters, #s-calendar { scroll-margin-top: 76px; }\n .story-headline {\n margin: 0 0 14px;\n font-size: clamp(17px, 2.5vw, 21px);\n line-height: 1.55;\n font-weight: 650;\n color: var(--ink);\n max-width: 48ch;\n }\n .wrapped-section { margin-bottom: 20px; }\n .wrapped-section h2 { margin: 0 0 6px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; }\n .wrapped-lede { margin: 0 0 14px; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .wrapped-deck {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));\n padding: 0;\n }\n .wrapped-card {\n border-radius: 18px;\n border: 1px solid var(--line);\n padding: 22px 20px;\n min-height: 200px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n background: linear-gradient(155deg, rgba(15, 107, 92, 0.14), rgba(196, 92, 42, 0.08));\n box-shadow: var(--shadow);\n position: relative;\n overflow: hidden;\n }\n .wrapped-card::before {\n content: attr(data-emoji);\n position: absolute;\n top: 12px;\n right: 14px;\n font-size: 2.4rem;\n opacity: 0.35;\n line-height: 1;\n }\n .wrapped-card-kicker {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--muted);\n margin: 0 0 6px;\n }\n .wrapped-card-stat {\n margin: 0;\n font-size: clamp(32px, 6vw, 44px);\n font-weight: 900;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--ink);\n word-break: break-word;\n }\n .wrapped-card-sub {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--muted);\n }\n .persona-grid {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n .persona-chip {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n .persona-chip strong {\n display: block;\n font-size: 14px;\n color: var(--ink);\n margin-bottom: 4px;\n }\n .persona-chip em {\n display: block;\n font-style: normal;\n font-size: 12px;\n font-weight: 800;\n color: var(--accent);\n margin-bottom: 4px;\n }\n .persona-chip span { font-size: 11px; color: var(--muted); line-height: 1.4; }\n .chapter-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }\n .chapter-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n gap: 10px 14px;\n align-items: center;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n @media (max-width: 560px) {\n .chapter-item { grid-template-columns: auto 1fr; }\n .chapter-item .chapter-stat { grid-column: 1 / -1; text-align: left; }\n }\n .chapter-badge {\n font-size: 12px;\n font-weight: 900;\n color: var(--accent);\n min-width: 2.5rem;\n }\n .chapter-meta { font-size: 13px; line-height: 1.45; color: var(--ink); }\n .chapter-meta small { display: block; color: var(--muted); font-size: 11px; margin-top: 4px; }\n .chapter-stat { text-align: right; font-size: 13px; font-weight: 750; color: var(--muted); font-variant-numeric: tabular-nums; }\n\n /* GitHub contribution graph (\uC794\uB514) */\n :root {\n --gh-cell-size: 11px;\n --gh-cell-gap: 3px;\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n @media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n }\n :root[data-theme=\"dark\"] {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n :root[data-theme=\"light\"] {\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n .gh-contrib {\n position: relative;\n border: 1px solid var(--line);\n border-radius: 12px;\n padding: 16px 18px 14px;\n background: var(--panel);\n }\n .gh-cal-tooltip {\n position: absolute;\n z-index: 20;\n transform: translate(-50%, -100%);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 650;\n line-height: 1.35;\n white-space: nowrap;\n color: #fff;\n background: #24292f;\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.12s ease;\n }\n .gh-contrib.gh-tip-on .gh-cal-tooltip { opacity: 1; }\n :root[data-theme=\"dark\"] .gh-cal-tooltip {\n background: #f0f6fc;\n color: #0d1117;\n }\n @media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) .gh-cal-tooltip {\n background: #f0f6fc;\n color: #0d1117;\n }\n }\n .gh-contrib-summary {\n margin: 0 0 12px;\n font-size: 14px;\n line-height: 1.4;\n color: var(--muted);\n }\n .gh-contrib-summary strong {\n font-weight: 600;\n color: var(--ink);\n font-variant-numeric: tabular-nums;\n }\n .gh-contrib-span {\n display: block;\n margin-top: 4px;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-scroll {\n overflow-x: auto;\n overflow-y: hidden;\n max-width: 100%;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 2px;\n }\n .gh-cal-graph {\n display: grid;\n grid-template-areas:\n \". months\"\n \"days weeks\";\n grid-template-columns: max-content max-content;\n column-gap: 8px;\n row-gap: 4px;\n width: max-content;\n min-width: min(100%, max-content);\n }\n .gh-cal-days {\n grid-area: days;\n display: grid;\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n align-items: center;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n padding-right: 2px;\n }\n .gh-cal-days span {\n height: var(--gh-cell-size);\n display: flex;\n align-items: center;\n }\n .gh-cal-days span:empty { visibility: hidden; }\n .gh-cal-months {\n grid-area: months;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n height: 14px;\n align-items: end;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n }\n .gh-cal-month {\n grid-column: span 1;\n white-space: nowrap;\n overflow: visible;\n }\n .gh-cal-weeks {\n grid-area: weeks;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n grid-auto-flow: column;\n }\n .gh-cal-cell {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n background: var(--gh-cell-0);\n display: block;\n padding: 0;\n margin: 0;\n appearance: none;\n font: inherit;\n cursor: default;\n transition: transform 0.1s ease, box-shadow 0.1s ease, outline 0.1s ease;\n }\n .gh-cal-cell[data-date] {\n cursor: pointer;\n }\n .gh-cal-cell[data-date]:hover,\n .gh-cal-cell[data-date]:focus-visible {\n transform: scale(1.45);\n z-index: 5;\n position: relative;\n outline: 2px solid var(--accent);\n outline-offset: 1px;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--panel) 80%, transparent);\n }\n .gh-cal-cell[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-cell[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-cell[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-cell[data-level=\"4\"] { background: var(--gh-cell-4); }\n .gh-cal-cell[data-level=\"0\"] { background: var(--gh-cell-0); border: 1px solid color-mix(in srgb, var(--line) 70%, transparent); }\n .gh-cal-cell--pad {\n pointer-events: none;\n border: none;\n }\n .gh-cal-legend {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n margin-top: 12px;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-legend-scale {\n display: inline-flex;\n gap: var(--gh-cell-gap);\n align-items: center;\n margin: 0 2px;\n }\n .gh-cal-legend-scale i {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n display: block;\n font-style: normal;\n background: var(--gh-cell-0);\n }\n .gh-cal-legend-scale i[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-legend-scale i[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-legend-scale i[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-legend-scale i[data-level=\"4\"] { background: var(--gh-cell-4); }\n\n\n/* 04-kca-charts.css */\n.viz-hero {\n margin: 0 0 18px;\n padding: 20px 22px;\n border-radius: 20px;\n border: 1px solid var(--glass-border);\n background: var(--glass);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n box-shadow: var(--shadow);\n }\n .viz-hero h2 {\n margin: 0 0 6px;\n font-size: 22px;\n font-weight: 850;\n letter-spacing: -0.03em;\n background: var(--accent-grad);\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n }\n .viz-hero p { margin: 0; font-size: 13px; color: var(--muted); line-height: 1.55; }\n .viz-grid {\n display: grid;\n gap: 14px;\n grid-template-columns: repeat(12, 1fr);\n }\n .viz-card {\n grid-column: span 12;\n border-radius: 18px;\n border: 1px solid var(--glass-border);\n background: var(--glass);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n padding: 16px 16px 12px;\n box-shadow: var(--shadow);\n }\n @media (min-width: 900px) {\n .viz-card.span-6 { grid-column: span 6; }\n .viz-card.span-8 { grid-column: span 8; }\n .viz-card.span-4 { grid-column: span 4; }\n }\n .viz-card h3 {\n margin: 0 0 4px;\n font-size: 15px;\n font-weight: 800;\n letter-spacing: -0.02em;\n }\n .viz-card .viz-hint {\n margin: 0 0 10px;\n font-size: 11px;\n color: var(--muted);\n line-height: 1.45;\n }\n .chart-box {\n width: 100%;\n min-height: 280px;\n height: min(42vh, 360px);\n }\n .chart-box.tall { height: min(52vh, 440px); min-height: 320px; }\n .chart-box.compact { height: 240px; min-height: 220px; }\n .kw-table-wrap {\n max-height: 520px;\n overflow: auto;\n border: 1px solid var(--line);\n border-radius: 12px;\n }\n .kw-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n }\n .kw-table thead th {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--panel-solid);\n text-align: left;\n padding: 8px 10px;\n font-size: 11px;\n color: var(--muted);\n border-bottom: 1px solid var(--line);\n }\n .kw-table td {\n padding: 7px 10px;\n border-bottom: 1px solid var(--line);\n }\n .kw-table tbody tr:nth-child(even) { background: rgba(94, 234, 212, 0.04); }\n .kw-table .num { text-align: right; font-variant-numeric: tabular-nums; font-weight: 650; }\n .kw-rank { color: var(--muted); width: 2.5rem; }\n\n\n/* 05-kca-ux.css */\n/* \uC139\uC158 \uB124\uBE44 \u2014 \uB9AC\uD329\uD130 \uC2DC \uC0AD\uC81C\uB410\uB358 \uAE30\uBCF8 \uADDC\uCE59 \uBCF5\uAD6C */\n.deck-nav {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 10px;\n margin-bottom: 0;\n padding: 10px 12px;\n border-radius: 0;\n border: none;\n background: transparent;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n box-shadow: none;\n}\n\n.deck-nav-h {\n font-size: 11px;\n font-weight: 800;\n color: var(--muted);\n margin-right: 4px;\n letter-spacing: 0.04em;\n flex: 0 0 auto;\n}\n\n.deck-nav a {\n font-size: 12px;\n font-weight: 700;\n padding: 6px 11px;\n border-radius: var(--radius-pill);\n border: 1px solid var(--line);\n background: var(--panel-solid);\n color: var(--ink);\n text-decoration: none;\n transition:\n transform 0.18s var(--ease-out),\n border-color 0.18s var(--ease-out),\n background 0.18s var(--ease-out);\n}\n\n.deck-nav a:hover {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 10%, var(--panel-solid));\n color: var(--accent);\n transform: translateY(-1px);\n}\n\n.kca-topbar {\n position: sticky;\n top: 0;\n z-index: 40;\n margin-bottom: 16px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background: var(--glass);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n }\n .kca-progress {\n height: 3px;\n background: var(--line);\n }\n .kca-progress-fill {\n display: block;\n height: 100%;\n width: 0%;\n background: var(--accent-grad);\n transition: width 0.12s ease-out;\n }\n .kca-topbar .toolbar {\n margin: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n border-bottom: 1px solid var(--line);\n }\n .deck-nav-shell > summary {\n display: none;\n cursor: pointer;\n padding: 10px 14px;\n font-size: 13px;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n border-bottom: 1px solid var(--line);\n }\n .deck-nav-shell > summary::-webkit-details-marker { display: none; }\n .deck-nav-shell > summary::after {\n content: \"\u25BE\";\n float: right;\n color: var(--muted);\n font-size: 11px;\n }\n .deck-nav-shell:not([open]) > summary::after { content: \"\u25B8\"; }\n .deck-nav-shell .deck-nav {\n margin: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n position: static;\n }\n .deck-nav a.is-active {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 14%, transparent);\n color: var(--accent);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);\n }\n .theme-btn.is-active {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 12%, transparent);\n color: var(--accent);\n font-weight: 800;\n }\n .hero-jumps {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 14px;\n }\n .hero-jump {\n font-size: 12px;\n font-weight: 750;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: var(--panel);\n color: var(--ink);\n text-decoration: none;\n transition: border-color 0.15s ease, transform 0.15s ease;\n }\n .hero-jump:hover {\n border-color: var(--accent);\n transform: translateY(-1px);\n }\n .hero-jump strong { color: var(--accent); font-weight: 850; }\n .kca-back-top {\n position: fixed;\n right: max(16px, env(safe-area-inset-right));\n bottom: max(16px, env(safe-area-inset-bottom));\n z-index: 50;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: 1px solid var(--line);\n background: var(--panel-solid);\n color: var(--accent);\n font-size: 18px;\n font-weight: 900;\n cursor: pointer;\n box-shadow: var(--shadow);\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n .kca-back-top:not([hidden]):hover { transform: translateY(-2px); border-color: var(--accent); }\n .kca-back-top[hidden] { display: none; }\n .kw-css-fold {\n margin-bottom: 14px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background: var(--panel);\n overflow: hidden;\n }\n .kw-css-fold > summary {\n cursor: pointer;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n }\n .kw-css-fold > summary::-webkit-details-marker { display: none; }\n .kw-css-fold > summary small {\n display: block;\n margin-top: 4px;\n font-size: 11px;\n font-weight: 500;\n color: var(--muted);\n }\n .kw-css-fold .kw-css-body { padding: 0 16px 16px; }\n @media (max-width: 720px) {\n .deck-nav-shell > summary { display: block; }\n .deck-nav-shell:not([open]) .deck-nav { display: none; }\n .deck-nav-shell .deck-nav {\n max-height: min(42vh, 280px);\n overflow-y: auto;\n overscroll-behavior: contain;\n }\n main { width: min(1200px, calc(100% - 20px)); padding: 20px 0 48px; }\n }\n @media (hover: none) {\n .card:hover { transform: none; box-shadow: var(--shadow); border-color: var(--line); }\n }\n #s-wrapped, #s-personas, #s-chapters, #s-calendar, #s-facts, #s-story, #s-hl, #s-ai, #s-topics, #s-viz, #s-charts, #s-help {\n scroll-margin-top: 118px;\n }\n\n";
|
|
2
|
+
export declare const REPORT_STYLES = "/* open-props \u2014 https://open-props.style/ (MIT) */\n:where(html){--font-system-ui:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;--font-transitional:Charter,Bitstream Charter,Sitka Text,Cambria,serif;--font-old-style:Iowan Old Style,Palatino Linotype,URW Palladio L,P052,serif;--font-humanist:Seravek,Gill Sans Nova,Ubuntu,Calibri,DejaVu Sans,source-sans-pro,sans-serif;--font-geometric-humanist:Avenir,Montserrat,Corbel,URW Gothic,source-sans-pro,sans-serif;--font-classical-humanist:Optima,Candara,Noto Sans,source-sans-pro,sans-serif;--font-neo-grotesque:Inter,Roboto,Helvetica Neue,Arial Nova,Nimbus Sans,Arial,sans-serif;--font-monospace-slab-serif:Nimbus Mono PS,Courier New,monospace;--font-monospace-code:Dank Mono,Operator Mono,Inconsolata,Fira Mono,ui-monospace,SF Mono,Monaco,Droid Sans Mono,Source Code Pro,Cascadia Code,Menlo,Consolas,DejaVu Sans Mono,monospace;--font-industrial:Bahnschrift,DIN Alternate,Franklin Gothic Medium,Nimbus Sans Narrow,sans-serif-condensed,sans-serif;--font-rounded-sans:ui-rounded,Hiragino Maru Gothic ProN,Quicksand,Comfortaa,Manjari,Arial Rounded MT,Arial Rounded MT Bold,Calibri,source-sans-pro,sans-serif;--font-slab-serif:Rockwell,Rockwell Nova,Roboto Slab,DejaVu Serif,Sitka Small,serif;--font-antique:Superclarendon,Bookman Old Style,URW Bookman,URW Bookman L,Georgia Pro,Georgia,serif;--font-didone:Didot,Bodoni MT,Noto Serif Display,URW Palladio L,P052,Sylfaen,serif;--font-handwritten:Segoe Print,Bradley Hand,Chilanka,TSCu_Comic,casual,cursive;--font-sans:var(--font-system-ui);--font-serif:ui-serif,serif;--font-mono:var(--font-monospace-code);--font-weight-1:100;--font-weight-2:200;--font-weight-3:300;--font-weight-4:400;--font-weight-5:500;--font-weight-6:600;--font-weight-7:700;--font-weight-8:800;--font-weight-9:900;--font-lineheight-00:.95;--font-lineheight-0:1.1;--font-lineheight-1:1.25;--font-lineheight-2:1.375;--font-lineheight-3:1.5;--font-lineheight-4:1.75;--font-lineheight-5:2;--font-letterspacing-0:-.05em;--font-letterspacing-1:.025em;--font-letterspacing-2:.050em;--font-letterspacing-3:.075em;--font-letterspacing-4:.150em;--font-letterspacing-5:.500em;--font-letterspacing-6:.750em;--font-letterspacing-7:1em;--font-size-00:.5rem;--font-size-0:.75rem;--font-size-1:1rem;--font-size-2:1.1rem;--font-size-3:1.25rem;--font-size-4:1.5rem;--font-size-5:2rem;--font-size-6:2.5rem;--font-size-7:3rem;--font-size-8:3.5rem;--font-size-fluid-0:max(.75rem,min(2vw,1rem));--font-size-fluid-1:max(1rem,min(4vw,1.5rem));--font-size-fluid-2:max(1.5rem,min(6vw,2.5rem));--font-size-fluid-3:max(2rem,min(9vw,3.5rem));--size-000:-.5rem;--size-00:-.25rem;--size-1:.25rem;--size-2:.5rem;--size-3:1rem;--size-4:1.25rem;--size-5:1.5rem;--size-6:1.75rem;--size-7:2rem;--size-8:3rem;--size-9:4rem;--size-10:5rem;--size-11:7.5rem;--size-12:10rem;--size-13:15rem;--size-14:20rem;--size-15:30rem;--size-px-000:-8px;--size-px-00:-4px;--size-px-1:4px;--size-px-2:8px;--size-px-3:16px;--size-px-4:20px;--size-px-5:24px;--size-px-6:28px;--size-px-7:32px;--size-px-8:48px;--size-px-9:64px;--size-px-10:80px;--size-px-11:120px;--size-px-12:160px;--size-px-13:240px;--size-px-14:320px;--size-px-15:480px;--size-fluid-1:max(.5rem,min(1vw,1rem));--size-fluid-2:max(1rem,min(2vw,1.5rem));--size-fluid-3:max(1.5rem,min(3vw,2rem));--size-fluid-4:max(2rem,min(4vw,3rem));--size-fluid-5:max(4rem,min(5vw,5rem));--size-fluid-6:max(5rem,min(7vw,7.5rem));--size-fluid-7:max(7.5rem,min(10vw,10rem));--size-fluid-8:max(10rem,min(20vw,15rem));--size-fluid-9:max(15rem,min(30vw,20rem));--size-fluid-10:max(20rem,min(40vw,30rem));--size-content-1:20ch;--size-content-2:45ch;--size-content-3:60ch;--size-header-1:20ch;--size-header-2:25ch;--size-header-3:35ch;--size-xxs:240px;--size-xs:360px;--size-sm:480px;--size-md:768px;--size-lg:1024px;--size-xl:1440px;--size-xxl:1920px;--size-relative-000:-.5ch;--size-relative-00:-.25ch;--size-relative-1:.25ch;--size-relative-2:.5ch;--size-relative-3:1ch;--size-relative-4:1.25ch;--size-relative-5:1.5ch;--size-relative-6:1.75ch;--size-relative-7:2ch;--size-relative-8:3ch;--size-relative-9:4ch;--size-relative-10:5ch;--size-relative-11:7.5ch;--size-relative-12:10ch;--size-relative-13:15ch;--size-relative-14:20ch;--size-relative-15:30ch;--ease-1:cubic-bezier(.25,0,.5,1);--ease-2:cubic-bezier(.25,0,.4,1);--ease-3:cubic-bezier(.25,0,.3,1);--ease-4:cubic-bezier(.25,0,.2,1);--ease-5:cubic-bezier(.25,0,.1,1);--ease-in-1:cubic-bezier(.25,0,1,1);--ease-in-2:cubic-bezier(.50,0,1,1);--ease-in-3:cubic-bezier(.70,0,1,1);--ease-in-4:cubic-bezier(.90,0,1,1);--ease-in-5:cubic-bezier(1,0,1,1);--ease-out-1:cubic-bezier(0,0,.75,1);--ease-out-2:cubic-bezier(0,0,.50,1);--ease-out-3:cubic-bezier(0,0,.3,1);--ease-out-4:cubic-bezier(0,0,.1,1);--ease-out-5:cubic-bezier(0,0,0,1);--ease-in-out-1:cubic-bezier(.1,0,.9,1);--ease-in-out-2:cubic-bezier(.3,0,.7,1);--ease-in-out-3:cubic-bezier(.5,0,.5,1);--ease-in-out-4:cubic-bezier(.7,0,.3,1);--ease-in-out-5:cubic-bezier(.9,0,.1,1);--ease-elastic-out-1:cubic-bezier(.5,.75,.75,1.25);--ease-elastic-out-2:cubic-bezier(.5,1,.75,1.25);--ease-elastic-out-3:cubic-bezier(.5,1.25,.75,1.25);--ease-elastic-out-4:cubic-bezier(.5,1.5,.75,1.25);--ease-elastic-out-5:cubic-bezier(.5,1.75,.75,1.25);--ease-elastic-in-1:cubic-bezier(.5,-0.25,.75,1);--ease-elastic-in-2:cubic-bezier(.5,-0.50,.75,1);--ease-elastic-in-3:cubic-bezier(.5,-0.75,.75,1);--ease-elastic-in-4:cubic-bezier(.5,-1.00,.75,1);--ease-elastic-in-5:cubic-bezier(.5,-1.25,.75,1);--ease-elastic-in-out-1:cubic-bezier(.5,-.1,.1,1.5);--ease-elastic-in-out-2:cubic-bezier(.5,-.3,.1,1.5);--ease-elastic-in-out-3:cubic-bezier(.5,-.5,.1,1.5);--ease-elastic-in-out-4:cubic-bezier(.5,-.7,.1,1.5);--ease-elastic-in-out-5:cubic-bezier(.5,-.9,.1,1.5);--ease-step-1:steps(2);--ease-step-2:steps(3);--ease-step-3:steps(4);--ease-step-4:steps(7);--ease-step-5:steps(10);--ease-elastic-1:var(--ease-elastic-out-1);--ease-elastic-2:var(--ease-elastic-out-2);--ease-elastic-3:var(--ease-elastic-out-3);--ease-elastic-4:var(--ease-elastic-out-4);--ease-elastic-5:var(--ease-elastic-out-5);--ease-squish-1:var(--ease-elastic-in-out-1);--ease-squish-2:var(--ease-elastic-in-out-2);--ease-squish-3:var(--ease-elastic-in-out-3);--ease-squish-4:var(--ease-elastic-in-out-4);--ease-squish-5:var(--ease-elastic-in-out-5);--ease-spring-1:linear(0,0.006,0.025 2.8%,0.101 6.1%,0.539 18.9%,0.721 25.3%,0.849 31.5%,0.937 38.1%,0.968 41.8%,0.991 45.7%,1.006 50.1%,1.015 55%,1.017 63.9%,1.001);--ease-spring-2:linear(0,0.007,0.029 2.2%,0.118 4.7%,0.625 14.4%,0.826 19%,0.902,0.962,1.008 26.1%,1.041 28.7%,1.064 32.1%,1.07 36%,1.061 40.5%,1.015 53.4%,0.999 61.6%,0.995 71.2%,1);--ease-spring-3:linear(0,0.009,0.035 2.1%,0.141 4.4%,0.723 12.9%,0.938 16.7%,1.017,1.077,1.121,1.149 24.3%,1.159,1.163,1.161,1.154 29.9%,1.129 32.8%,1.051 39.6%,1.017 43.1%,0.991,0.977 51%,0.974 53.8%,0.975 57.1%,0.997 69.8%,1.003 76.9%,1);--ease-spring-4:linear(0,0.009,0.037 1.7%,0.153 3.6%,0.776 10.3%,1.001,1.142 16%,1.185,1.209 19%,1.215 19.9% 20.8%,1.199,1.165 25%,1.056 30.3%,1.008 33%,0.973,0.955 39.2%,0.953 41.1%,0.957 43.3%,0.998 53.3%,1.009 59.1% 63.7%,0.998 78.9%,1);--ease-spring-5:linear(0,0.01,0.04 1.6%,0.161 3.3%,0.816 9.4%,1.046,1.189 14.4%,1.231,1.254 17%,1.259,1.257 18.6%,1.236,1.194 22.3%,1.057 27%,0.999 29.4%,0.955 32.1%,0.942,0.935 34.9%,0.933,0.939 38.4%,1 47.3%,1.011,1.017 52.6%,1.016 56.4%,1 65.2%,0.996 70.2%,1.001 87.2%,1);--ease-bounce-1:linear(0,0.004,0.016,0.035,0.063,0.098,0.141,0.191,0.25,0.316,0.391 36.8%,0.563,0.766,1 58.8%,0.946,0.908 69.1%,0.895,0.885,0.879,0.878,0.879,0.885,0.895,0.908 89.7%,0.946,1);--ease-bounce-2:linear(0,0.004,0.016,0.035,0.063,0.098,0.141 15.1%,0.25,0.391,0.562,0.765,1,0.892 45.2%,0.849,0.815,0.788,0.769,0.757,0.753,0.757,0.769,0.788,0.815,0.85,0.892 75.2%,1 80.2%,0.973,0.954,0.943,0.939,0.943,0.954,0.973,1);--ease-bounce-3:linear(0,0.004,0.016,0.035,0.062,0.098,0.141 11.4%,0.25,0.39,0.562,0.764,1 30.3%,0.847 34.8%,0.787,0.737,0.699,0.672,0.655,0.65,0.656,0.672,0.699,0.738,0.787,0.847 61.7%,1 66.2%,0.946,0.908,0.885 74.2%,0.879,0.878,0.879,0.885 79.5%,0.908,0.946,1 87.4%,0.981,0.968,0.96,0.957,0.96,0.968,0.981,1);--ease-bounce-4:linear(0,0.004,0.016 3%,0.062,0.141,0.25,0.391,0.562 18.2%,1 24.3%,0.81,0.676 32.3%,0.629,0.595,0.575,0.568,0.575,0.595,0.629,0.676 48.2%,0.811,1 56.2%,0.918,0.86,0.825,0.814,0.825,0.86,0.918,1 77.2%,0.94 80.6%,0.925,0.92,0.925,0.94 87.5%,1 90.9%,0.974,0.965,0.974,1);--ease-bounce-5:linear(0,0.004,0.016 2.5%,0.063,0.141,0.25 10.1%,0.562,1 20.2%,0.783,0.627,0.534 30.9%,0.511,0.503,0.511,0.534 38%,0.627,0.782,1 48.7%,0.892,0.815,0.769 56.3%,0.757,0.753,0.757,0.769 61.3%,0.815,0.892,1 68.8%,0.908 72.4%,0.885,0.878,0.885,0.908 79.4%,1 83%,0.954 85.5%,0.943,0.939,0.943,0.954 90.5%,1 93%,0.977,0.97,0.977,1);--layer-1:1;--layer-2:2;--layer-3:3;--layer-4:4;--layer-5:5;--layer-important:2147483647;--shadow-color:220 3% 15%;--shadow-strength:1%;--inner-shadow-highlight:inset 0 -.5px 0 0 #fff,inset 0 .5px 0 0 rgba(0,0,0,.067);--shadow-1:0 1px 2px -1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--shadow-2:0 3px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 14px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%));--shadow-3:0 -1px 3px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 2px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 5px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 4px 12px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 12px 15px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-4:0 -2px 5px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 2px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 9px 9px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 16px 16px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%));--shadow-5:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 10px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 20px 20px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 40px 40px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-6:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 3px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 12px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 22px 18px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 41px 33px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%)),0 100px 80px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--inner-shadow-0:inset 0 0 0 1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--inner-shadow-1:inset 0 1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-2:inset 0 1px 4px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-3:inset 0 2px 8px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-4:inset 0 2px 14px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--ratio-square:1;--ratio-landscape:4/3;--ratio-portrait:3/4;--ratio-widescreen:16/9;--ratio-ultrawide:18/5;--ratio-golden:1.6180/1;--gray-0:#f8f9fa;--gray-1:#f1f3f5;--gray-2:#e9ecef;--gray-3:#dee2e6;--gray-4:#ced4da;--gray-5:#adb5bd;--gray-6:#868e96;--gray-7:#495057;--gray-8:#343a40;--gray-9:#212529;--gray-10:#16191d;--gray-11:#0d0f12;--gray-12:#030507;--stone-0:#f8fafb;--stone-1:#f2f4f6;--stone-2:#ebedef;--stone-3:#e0e4e5;--stone-4:#d1d6d8;--stone-5:#b1b6b9;--stone-6:#979b9d;--stone-7:#7e8282;--stone-8:#666968;--stone-9:#50514f;--stone-10:#3a3a37;--stone-11:#252521;--stone-12:#121210;--red-0:#fff5f5;--red-1:#ffe3e3;--red-2:#ffc9c9;--red-3:#ffa8a8;--red-4:#ff8787;--red-5:#ff6b6b;--red-6:#fa5252;--red-7:#f03e3e;--red-8:#e03131;--red-9:#c92a2a;--red-10:#b02525;--red-11:#962020;--red-12:#7d1a1a;--pink-0:#fff0f6;--pink-1:#ffdeeb;--pink-2:#fcc2d7;--pink-3:#faa2c1;--pink-4:#f783ac;--pink-5:#f06595;--pink-6:#e64980;--pink-7:#d6336c;--pink-8:#c2255c;--pink-9:#a61e4d;--pink-10:#8c1941;--pink-11:#731536;--pink-12:#59102a;--purple-0:#f8f0fc;--purple-1:#f3d9fa;--purple-2:#eebefa;--purple-3:#e599f7;--purple-4:#da77f2;--purple-5:#cc5de8;--purple-6:#be4bdb;--purple-7:#ae3ec9;--purple-8:#9c36b5;--purple-9:#862e9c;--purple-10:#702682;--purple-11:#5a1e69;--purple-12:#44174f;--violet-0:#f3f0ff;--violet-1:#e5dbff;--violet-2:#d0bfff;--violet-3:#b197fc;--violet-4:#9775fa;--violet-5:#845ef7;--violet-6:#7950f2;--violet-7:#7048e8;--violet-8:#6741d9;--violet-9:#5f3dc4;--violet-10:#5235ab;--violet-11:#462d91;--violet-12:#3a2578;--indigo-0:#edf2ff;--indigo-1:#dbe4ff;--indigo-2:#bac8ff;--indigo-3:#91a7ff;--indigo-4:#748ffc;--indigo-5:#5c7cfa;--indigo-6:#4c6ef5;--indigo-7:#4263eb;--indigo-8:#3b5bdb;--indigo-9:#364fc7;--indigo-10:#2f44ad;--indigo-11:#283a94;--indigo-12:#21307a;--blue-0:#e7f5ff;--blue-1:#d0ebff;--blue-2:#a5d8ff;--blue-3:#74c0fc;--blue-4:#4dabf7;--blue-5:#339af0;--blue-6:#228be6;--blue-7:#1c7ed6;--blue-8:#1971c2;--blue-9:#1864ab;--blue-10:#145591;--blue-11:#114678;--blue-12:#0d375e;--cyan-0:#e3fafc;--cyan-1:#c5f6fa;--cyan-2:#99e9f2;--cyan-3:#66d9e8;--cyan-4:#3bc9db;--cyan-5:#22b8cf;--cyan-6:#15aabf;--cyan-7:#1098ad;--cyan-8:#0c8599;--cyan-9:#0b7285;--cyan-10:#095c6b;--cyan-11:#074652;--cyan-12:#053038;--teal-0:#e6fcf5;--teal-1:#c3fae8;--teal-2:#96f2d7;--teal-3:#63e6be;--teal-4:#38d9a9;--teal-5:#20c997;--teal-6:#12b886;--teal-7:#0ca678;--teal-8:#099268;--teal-9:#087f5b;--teal-10:#066649;--teal-11:#054d37;--teal-12:#033325;--green-0:#ebfbee;--green-1:#d3f9d8;--green-2:#b2f2bb;--green-3:#8ce99a;--green-4:#69db7c;--green-5:#51cf66;--green-6:#40c057;--green-7:#37b24d;--green-8:#2f9e44;--green-9:#2b8a3e;--green-10:#237032;--green-11:#1b5727;--green-12:#133d1b;--lime-0:#f4fce3;--lime-1:#e9fac8;--lime-2:#d8f5a2;--lime-3:#c0eb75;--lime-4:#a9e34b;--lime-5:#94d82d;--lime-6:#82c91e;--lime-7:#74b816;--lime-8:#66a80f;--lime-9:#5c940d;--lime-10:#4c7a0b;--lime-11:#3c6109;--lime-12:#2c4706;--yellow-0:#fff9db;--yellow-1:#fff3bf;--yellow-2:#ffec99;--yellow-3:#ffe066;--yellow-4:#ffd43b;--yellow-5:#fcc419;--yellow-6:#fab005;--yellow-7:#f59f00;--yellow-8:#f08c00;--yellow-9:#e67700;--yellow-10:#b35c00;--yellow-11:#804200;--yellow-12:#663500;--orange-0:#fff4e6;--orange-1:#ffe8cc;--orange-2:#ffd8a8;--orange-3:#ffc078;--orange-4:#ffa94d;--orange-5:#ff922b;--orange-6:#fd7e14;--orange-7:#f76707;--orange-8:#e8590c;--orange-9:#d9480f;--orange-10:#bf400d;--orange-11:#99330b;--orange-12:#802b09;--choco-0:#fff8dc;--choco-1:#fce1bc;--choco-2:#f7ca9e;--choco-3:#f1b280;--choco-4:#e99b62;--choco-5:#df8545;--choco-6:#d46e25;--choco-7:#bd5f1b;--choco-8:#a45117;--choco-9:#8a4513;--choco-10:#703a13;--choco-11:#572f12;--choco-12:#3d210d;--brown-0:#faf4eb;--brown-1:#ede0d1;--brown-2:#e0cab7;--brown-3:#d3b79e;--brown-4:#c5a285;--brown-5:#b78f6d;--brown-6:#a87c56;--brown-7:#956b47;--brown-8:#825b3a;--brown-9:#6f4b2d;--brown-10:#5e3a21;--brown-11:#4e2b15;--brown-12:#422412;--sand-0:#f8fafb;--sand-1:#e6e4dc;--sand-2:#d5cfbd;--sand-3:#c2b9a0;--sand-4:#aea58c;--sand-5:#9a9178;--sand-6:#867c65;--sand-7:#736a53;--sand-8:#5f5746;--sand-9:#4b4639;--sand-10:#38352d;--sand-11:#252521;--sand-12:#121210;--camo-0:#f9fbe7;--camo-1:#e8ed9c;--camo-2:#d2df4e;--camo-3:#c2ce34;--camo-4:#b5bb2e;--camo-5:#a7a827;--camo-6:#999621;--camo-7:#8c851c;--camo-8:#7e7416;--camo-9:#6d6414;--camo-10:#5d5411;--camo-11:#4d460e;--camo-12:#36300a;--jungle-0:#ecfeb0;--jungle-1:#def39a;--jungle-2:#d0e884;--jungle-3:#c2dd6e;--jungle-4:#b5d15b;--jungle-5:#a8c648;--jungle-6:#9bbb36;--jungle-7:#8fb024;--jungle-8:#84a513;--jungle-9:#7a9908;--jungle-10:#658006;--jungle-11:#516605;--jungle-12:#3d4d04;--gradient-space: ;--gradient-1:linear-gradient(to bottom right var(--gradient-space),#1f005c,#5b0060,#870160,#ac255e,#ca485c,#e16b5c,#f39060,#ffb56b);--gradient-2:linear-gradient(to bottom right var(--gradient-space),#48005c,#8300e2,#a269ff);--gradient-3:radial-gradient(circle at top right var(--gradient-space),#0ff,rgba(0,255,255,0)),radial-gradient(circle at bottom left var(--gradient-space),#ff1492,rgba(255,20,146,0));--gradient-4:linear-gradient(to bottom right var(--gradient-space),#00f5a0,#00d9f5);--gradient-5:conic-gradient(from -270deg at 75% 110% var(--gradient-space),#f0f,#fffaf0);--gradient-6:conic-gradient(from -90deg at top left var(--gradient-space),#000,#fff);--gradient-7:linear-gradient(to bottom right var(--gradient-space),#72c6ef,#004e8f);--gradient-8:conic-gradient(from 90deg at 50% 0% var(--gradient-space),#111,50%,#222,#111);--gradient-9:conic-gradient(from .5turn at bottom center var(--gradient-space),#add8e6,#fff);--gradient-10:conic-gradient(from 90deg at 40% -25% var(--gradient-space),gold,#f79d03,#ee6907,#e6390a,#de0d0d,#d61039,#cf1261,#c71585,#cf1261,#d61039,#de0d0d,#ee6907,#f79d03,gold,gold,gold);--gradient-11:conic-gradient(at bottom left var(--gradient-space),#ff1493,cyan);--gradient-12:conic-gradient(from 90deg at 25% -10% var(--gradient-space),#ff4500,#d3f340,#7bee85,#afeeee,#7bee85);--gradient-13:radial-gradient(circle at 50% 200% var(--gradient-space),#000142,#3b0083,#b300c3,#ff059f,#ff4661,#ffad86,#fff3c7);--gradient-14:conic-gradient(at top right var(--gradient-space),lime,cyan);--gradient-15:linear-gradient(to bottom right var(--gradient-space),#c7d2fe,#fecaca,#fef3c7);--gradient-16:radial-gradient(circle at 50% -250% var(--gradient-space),#374151,#111827,#000);--gradient-17:conic-gradient(from -90deg at 50% -25% var(--gradient-space),blue,#8a2be2);--gradient-18:linear-gradient(0deg var(--gradient-space),rgba(255,0,0,.8),rgba(255,0,0,0) 75%),linear-gradient(60deg var(--gradient-space),rgba(255,255,0,.8),rgba(255,255,0,0) 75%),linear-gradient(120deg var(--gradient-space),rgba(0,255,0,.8),rgba(0,255,0,0) 75%),linear-gradient(180deg var(--gradient-space),rgba(0,255,255,.8),rgba(0,255,255,0) 75%),linear-gradient(240deg var(--gradient-space),rgba(0,0,255,.8),rgba(0,0,255,0) 75%),linear-gradient(300deg var(--gradient-space),rgba(255,0,255,.8),rgba(255,0,255,0) 75%);--gradient-19:linear-gradient(to bottom right var(--gradient-space),#ffe259,#ffa751);--gradient-20:conic-gradient(from -135deg at -10% center var(--gradient-space),orange,#ff7715,#ff522a,#ff3f47,#ff5482,#ff69b4);--gradient-21:conic-gradient(from -90deg at 25% 115% var(--gradient-space),red,#f06,#f0c,#c0f,#60f,#00f,#00f,#00f,#00f);--gradient-22:linear-gradient(to bottom right var(--gradient-space),#acb6e5,#86fde8);--gradient-23:linear-gradient(to bottom right var(--gradient-space),#536976,#292e49);--gradient-24:conic-gradient(from .5turn at 0% 0% var(--gradient-space),#00c476,10%,#82b0ff,90%,#00c476);--gradient-25:conic-gradient(at 125% 50% var(--gradient-space),#b78cf7,#ff7c94,#ffcf0d,#ff7c94,#b78cf7);--gradient-26:linear-gradient(to bottom right var(--gradient-space),#9796f0,#fbc7d4);--gradient-27:conic-gradient(from .5turn at bottom left var(--gradient-space),#ff1493,#639);--gradient-28:conic-gradient(from -90deg at 50% 105% var(--gradient-space),#fff,orchid);--gradient-29:radial-gradient(circle at top right var(--gradient-space),#bfb3ff,rgba(191,179,255,0)),radial-gradient(circle at bottom left var(--gradient-space),#86acf9,rgba(134,172,249,0));--gradient-30:radial-gradient(circle at top right var(--gradient-space),#00ff80,rgba(0,255,128,0)),radial-gradient(circle at bottom left var(--gradient-space),#adffd6,rgba(173,255,214,0));--noise-1:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.005' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-2:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.05' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-3:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.25' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-4:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-5:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E\");--noise-filter-1:contrast(300%) brightness(100%);--noise-filter-2:contrast(200%) brightness(150%);--noise-filter-3:contrast(200%) brightness(250%);--noise-filter-4:contrast(200%) brightness(500%);--noise-filter-5:contrast(200%) brightness(1000%);--animation-fade-in:fade-in .5s var(--ease-3);--animation-fade-in-bloom:fade-in-bloom 2s var(--ease-3);--animation-fade-out:fade-out .5s var(--ease-3);--animation-fade-out-bloom:fade-out-bloom 2s var(--ease-3);--animation-scale-up:scale-up .5s var(--ease-3);--animation-scale-down:scale-down .5s var(--ease-3);--animation-slide-out-up:slide-out-up .5s var(--ease-3);--animation-slide-out-down:slide-out-down .5s var(--ease-3);--animation-slide-out-right:slide-out-right .5s var(--ease-3);--animation-slide-out-left:slide-out-left .5s var(--ease-3);--animation-slide-in-up:slide-in-up .5s var(--ease-3);--animation-slide-in-down:slide-in-down .5s var(--ease-3);--animation-slide-in-right:slide-in-right .5s var(--ease-3);--animation-slide-in-left:slide-in-left .5s var(--ease-3);--animation-shake-x:shake-x .75s var(--ease-out-5);--animation-shake-y:shake-y .75s var(--ease-out-5);--animation-shake-z:shake-z 1s var(--ease-in-out-3);--animation-spin:spin 2s linear infinite;--animation-ping:ping 5s var(--ease-out-3) infinite;--animation-blink:blink 1s var(--ease-out-3) infinite;--animation-float:float 3s var(--ease-in-out-3) infinite;--animation-bounce:bounce 2s var(--ease-squish-2) infinite;--animation-pulse:pulse 2s var(--ease-out-3) infinite;--border-size-1:1px;--border-size-2:2px;--border-size-3:5px;--border-size-4:10px;--border-size-5:25px;--radius-1:2px;--radius-2:5px;--radius-3:1rem;--radius-4:2rem;--radius-5:4rem;--radius-6:8rem;--radius-drawn-1:255px 15px 225px 15px/15px 225px 15px 255px;--radius-drawn-2:125px 10px 20px 185px/25px 205px 205px 25px;--radius-drawn-3:15px 255px 15px 225px/225px 15px 255px 15px;--radius-drawn-4:15px 25px 155px 25px/225px 150px 25px 115px;--radius-drawn-5:250px 25px 15px 20px/15px 80px 105px 115px;--radius-drawn-6:28px 100px 20px 15px/150px 30px 205px 225px;--radius-round:1e5px;--radius-blob-1:30% 70% 70% 30%/53% 30% 70% 47%;--radius-blob-2:53% 47% 34% 66%/63% 46% 54% 37%;--radius-blob-3:37% 63% 56% 44%/49% 56% 44% 51%;--radius-blob-4:63% 37% 37% 63%/43% 37% 63% 57%;--radius-blob-5:49% 51% 48% 52%/57% 44% 56% 43%;--radius-conditional-1:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-1));--radius-conditional-2:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-2));--radius-conditional-3:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-3));--radius-conditional-4:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-4));--radius-conditional-5:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-5));--radius-conditional-6:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-6))}@media (prefers-color-scheme:dark){:where(html){--shadow-color:220 40% 2%;--shadow-strength:25%;--inner-shadow-highlight:inset 0 -.5px 0 0 hsla(0,0%,100%,.067),inset 0 .5px 0 0 rgba(0,0,0,.467)}}@supports (background:linear-gradient(to right in oklab,#000,#fff)){:where(html){--gradient-space:in oklab}}@keyframes fade-in{to{opacity:1}}@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}@keyframes scale-up{to{transform:scale(1.25)}}@keyframes scale-down{to{transform:scale(.75)}}@keyframes slide-out-up{to{transform:translateY(-100%)}}@keyframes slide-out-down{to{transform:translateY(100%)}}@keyframes slide-out-right{to{transform:translateX(100%)}}@keyframes slide-out-left{to{transform:translateX(-100%)}}@keyframes slide-in-up{0%{transform:translateY(100%)}}@keyframes slide-in-down{0%{transform:translateY(-100%)}}@keyframes slide-in-right{0%{transform:translateX(-100%)}}@keyframes slide-in-left{0%{transform:translateX(100%)}}@keyframes shake-x{0%,to{transform:translateX(0)}20%{transform:translateX(-5%)}40%{transform:translateX(5%)}60%{transform:translateX(-5%)}80%{transform:translateX(5%)}}@keyframes shake-y{0%,to{transform:translateY(0)}20%{transform:translateY(-5%)}40%{transform:translateY(5%)}60%{transform:translateY(-5%)}80%{transform:translateY(5%)}}@keyframes shake-z{0%,to{transform:rotate(0deg)}20%{transform:rotate(-2deg)}40%{transform:rotate(2deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(2deg)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{90%,to{opacity:0;transform:scale(2)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.5}}@keyframes float{50%{transform:translateY(-25%)}}@keyframes bounce{25%{transform:translateY(-20%)}40%{transform:translateY(-3%)}0%,60%,to{transform:translateY(0)}}@keyframes pulse{50%{transform:scale(.9)}}@media (prefers-color-scheme:dark){@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}}@media (prefers-color-scheme:dark){@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}}\n\n/* 00-kca-tokens.css */\n/* kca \uC2DC\uB9E8\uD2F1 \uD1A0\uD070 \u2014 Open Props(\uADF8\uB77C\uB370\uC774\uC158\u00B7radius\u00B7shadow) + \uBA85\uC2DC \uD314\uB808\uD2B8(\uB300\uBE44) */\n:root {\n color-scheme: light dark;\n --bg: #f4f1ea;\n --bg2: #e8e2d6;\n --ink: #141a1f;\n --muted: #5c6670;\n --line: #d4cdc2;\n --panel: #fffcf7;\n --panel-solid: #fffcf7;\n --accent: #0f6b5c;\n --accent2: #5b4fc7;\n --warm: #c45c2a;\n --gold: #b8860b;\n --shadow: var(--shadow-4, 0 18px 50px rgba(20, 26, 31, 0.08));\n --bar-bg: #e5dfd4;\n --glow: color-mix(in oklab, var(--teal-5, #0f6b5c) 18%, transparent);\n --glass: rgba(255, 252, 247, 0.82);\n --glass-border: rgba(20, 26, 31, 0.1);\n --accent-grad: var(--gradient-21, linear-gradient(125deg, var(--accent), var(--accent2)));\n --radius-card: var(--radius-3, 14px);\n --radius-pill: var(--radius-round, 999px);\n --kca-font-sans: \"Pretendard Variable\", Pretendard, \"Apple SD Gothic Neo\", \"Malgun Gothic\", var(--font-sans, system-ui, sans-serif);\n --ease-out: var(--ease-out-3, cubic-bezier(0.22, 1, 0.36, 1));\n font-family: var(--kca-font-sans);\n}\n\n@media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) {\n --bg: #070a0e;\n --bg2: #0e1218;\n --ink: #e9eef5;\n --muted: #8b98a8;\n --line: rgba(255, 255, 255, 0.12);\n --panel: #161b22;\n --panel-solid: #161b22;\n --accent: #3ee8c5;\n --accent2: #a78bfa;\n --warm: #ff9f43;\n --gold: #fbbf24;\n --shadow: var(--shadow-4, 0 28px 90px rgba(0, 0, 0, 0.55));\n --bar-bg: rgba(255, 255, 255, 0.08);\n --glow: color-mix(in oklab, var(--teal-4, #3ee8c5) 20%, transparent);\n --glass: rgba(22, 27, 34, 0.88);\n --glass-border: rgba(255, 255, 255, 0.1);\n --accent-grad: var(--gradient-27, linear-gradient(125deg, var(--accent), var(--accent2)));\n }\n}\n\n:root[data-theme=\"dark\"] {\n --bg: #070a0e;\n --bg2: #0e1218;\n --ink: #e9eef5;\n --muted: #8b98a8;\n --line: rgba(255, 255, 255, 0.12);\n --panel: #161b22;\n --panel-solid: #161b22;\n --accent: #3ee8c5;\n --accent2: #a78bfa;\n --warm: #ff9f43;\n --gold: #fbbf24;\n --shadow: 0 28px 90px rgba(0, 0, 0, 0.55);\n --bar-bg: rgba(255, 255, 255, 0.08);\n --glow: color-mix(in oklab, #3ee8c5 20%, transparent);\n --glass: rgba(22, 27, 34, 0.88);\n --glass-border: rgba(255, 255, 255, 0.1);\n --accent-grad: linear-gradient(125deg, var(--accent), var(--accent2));\n}\n\n:root[data-theme=\"light\"] {\n --bg: #f4f1ea;\n --bg2: #e8e2d6;\n --ink: #141a1f;\n --muted: #5c6670;\n --line: #d4cdc2;\n --panel: #fffcf7;\n --panel-solid: #fffcf7;\n --accent: #0f6b5c;\n --accent2: #5b4fc7;\n --warm: #c45c2a;\n --gold: #b8860b;\n --shadow: 0 18px 50px rgba(20, 26, 31, 0.08);\n --bar-bg: #e5dfd4;\n --glow: color-mix(in oklab, #0f6b5c 18%, transparent);\n --glass: rgba(255, 252, 247, 0.82);\n --glass-border: rgba(20, 26, 31, 0.1);\n --accent-grad: linear-gradient(125deg, var(--accent), var(--accent2));\n}\n\n\n/* 01-kca-base.css */\n/* kca \uB9AC\uC14B\u00B7\uD0C0\uC774\uD3EC\u00B7\uBAA8\uC158 */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n overflow-x: clip;\n max-width: 100%;\n}\n\nbody {\n margin: 0;\n overflow-x: clip;\n max-width: 100%;\n background:\n radial-gradient(1200px 600px at 8% -12%, var(--glow), transparent 58%),\n radial-gradient(900px 480px at 96% 0%, color-mix(in oklab, var(--accent2) 14%, transparent), transparent 48%),\n linear-gradient(180deg, var(--bg), var(--bg2));\n color: var(--ink);\n font-family: var(--kca-font-sans);\n font-size: var(--font-size-1);\n line-height: var(--font-lineheight-3);\n transition:\n background 0.28s var(--ease-out),\n color 0.2s var(--ease-out);\n}\n\n.skip-link {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.skip-link:focus {\n position: fixed;\n left: var(--size-3);\n top: var(--size-3);\n width: auto;\n height: auto;\n margin: 0;\n clip: auto;\n z-index: 10000;\n padding: var(--size-2) var(--size-3);\n border-radius: var(--radius-2);\n background: var(--accent);\n color: var(--gray-0);\n font-weight: var(--font-weight-8);\n font-size: var(--font-size-0);\n box-shadow: var(--shadow-3);\n}\n\nmain {\n margin: 0 auto;\n overflow-x: clip;\n max-width: 100%;\n}\n\nh1 {\n margin: 0;\n font-size: clamp(var(--font-size-5), 4.2vw, var(--font-size-8));\n line-height: var(--font-lineheight-00);\n letter-spacing: var(--font-letterspacing-0);\n font-weight: var(--font-weight-8);\n}\n\nh2 {\n margin: 0 0 var(--size-2);\n font-size: var(--font-size-3);\n font-weight: var(--font-weight-7);\n letter-spacing: var(--font-letterspacing-0);\n}\n\na {\n color: var(--accent);\n}\n\n@keyframes kca-fade-up {\n from {\n opacity: 0;\n transform: translateY(var(--size-3));\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes kca-ring-in {\n from {\n transform: scale(0.92);\n opacity: 0.75;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.anim-enter {\n animation: kca-fade-up 0.52s var(--ease-out) forwards;\n opacity: 0;\n animation-delay: var(--enter-delay, 0s);\n}\n\n.rh-wrap.anim-ring {\n animation: kca-ring-in 0.65s var(--ease-out) forwards;\n}\n\n.anim-enter:target {\n opacity: 1 !important;\n transform: none !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n html {\n scroll-behavior: auto;\n }\n .anim-enter,\n .rh-wrap.anim-ring {\n animation: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n}\n\n\n/* 02-kca-components.css */\n .card {\n background: var(--panel);\n border: 1px solid var(--line);\n border-radius: var(--radius-card);\n padding: 18px 20px;\n box-shadow: var(--shadow);\n transition: box-shadow 0.22s ease, transform 0.22s ease, border-color 0.2s ease;\n }\n .card:hover {\n border-color: var(--accent);\n box-shadow: 0 22px 56px rgba(20, 26, 31, 0.11);\n transform: translateY(-2px);\n }\n :root[data-theme=\"dark\"] .card:hover {\n box-shadow: 0 28px 72px rgba(0, 0, 0, 0.45);\n }\n .fact-hero-strip {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 10px;\n margin: 0 0 14px;\n }\n @media (max-width: 560px) { .fact-hero-strip { grid-template-columns: 1fr; } }\n .fact-hero-cell {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(15, 107, 92, 0.08), transparent);\n }\n .fact-hero-cell b {\n display: block;\n font-size: 11px;\n font-weight: 750;\n color: var(--muted);\n margin-bottom: 4px;\n letter-spacing: 0.02em;\n }\n .fact-hero-cell span {\n font-size: clamp(22px, 4vw, 28px);\n font-weight: 900;\n letter-spacing: -0.03em;\n font-variant-numeric: tabular-nums;\n color: var(--ink);\n }\n .glossary {\n margin-top: 18px;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n font-size: 13px;\n line-height: 1.55;\n color: var(--muted);\n }\n .glossary > summary {\n cursor: pointer;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n }\n .glossary > summary::-webkit-details-marker { display: none; }\n .glossary dl { margin: 12px 0 0; display: grid; gap: 10px; }\n .glossary dt { font-weight: 750; color: var(--ink); font-size: 12px; }\n .glossary dd { margin: 2px 0 0; padding: 0; font-size: 12px; }\n .chart-stack { display: flex; flex-direction: column; gap: 14px; }\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin-bottom: 18px;\n padding: 10px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n box-shadow: var(--shadow);\n }\n.toolbar-label { font-size: 12px; font-weight: 700; color: var(--muted); margin-right: 4px; }\n .theme-btn {\n font: inherit;\n font-size: 12px;\n font-weight: 650;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: transparent;\n color: var(--ink);\n cursor: pointer;\n }\n .theme-btn:hover { border-color: var(--accent); color: var(--accent); }\n .hero { display: grid; gap: 20px; grid-template-columns: 1.35fr 1fr; align-items: stretch; padding-bottom: 28px; }\n h1 { margin: 0; font-size: clamp(28px, 4.2vw, 48px); line-height: 1.08; letter-spacing: -0.03em; font-weight: 800; }\n .room-title {\n margin: 10px 0 0;\n font-size: clamp(18px, 2.8vw, 26px);\n line-height: 1.25;\n font-weight: 750;\n letter-spacing: -0.02em;\n color: var(--accent);\n word-break: break-word;\n }\n .sub { margin: 12px 0 0; color: var(--muted); line-height: 1.65; font-size: 15px; max-width: 52ch; }\n .badge-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }\n .badge { font-size: 12px; padding: 6px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel); color: var(--muted); }\n .side-card { display: flex; flex-direction: column; gap: 10px; justify-content: center; }\n .side-card p { margin: 0; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .side-card strong { color: var(--ink); }\n h2 { margin: 0 0 12px; font-size: 17px; font-weight: 750; letter-spacing: -0.02em; }\n .grid { display: grid; gap: 14px; }\n .two { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .three { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n .highlights { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }\n .highlights li { padding: 12px 14px; border-radius: 10px; background: linear-gradient(120deg, rgba(15,107,92,0.08), rgba(196,92,42,0.06)); border: 1px solid rgba(15,107,92,0.15); font-size: 14px; line-height: 1.55; }\n .highlights strong { color: var(--accent); font-weight: 750; }\n .bars { display: grid; gap: 8px; }\n .bar-row { display: grid; grid-template-columns: minmax(72px, 1fr) minmax(0, 2.2fr) 52px; gap: 10px; align-items: center; min-height: 22px; }\n .bar-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }\n .bar-track { height: 9px; background: var(--bar-bg); border-radius: 999px; overflow: hidden; }\n .bar-fill {\n display: block;\n height: 100%;\n min-width: 2px;\n background: linear-gradient(90deg, var(--accent), #1a9d87);\n border-radius: inherit;\n }\n .bar-value { text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12px; }\n .chart-hint { margin: 0 0 10px; font-size: 12px; color: var(--muted); line-height: 1.45; }\n .chart-hint strong { color: var(--ink); font-weight: 700; }\n .calendar {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(44px, 1fr));\n gap: 5px;\n width: 100%;\n box-sizing: border-box;\n }\n .day {\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n min-width: 0;\n aspect-ratio: 1;\n padding: 4px 2px;\n font-weight: 650;\n border: 1px solid var(--line);\n }\n .day-k { font-size: 9px; line-height: 1.15; font-weight: 750; letter-spacing: -0.02em; }\n .day-n { font-size: 11px; line-height: 1; font-weight: 800; font-variant-numeric: tabular-nums; }\n .day-burst { box-shadow: inset 0 0 0 2px #e85d04; position: relative; }\n .pace-ribbon {\n display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;\n margin: 0 0 14px; padding: 12px 14px; border-radius: 12px;\n background: linear-gradient(120deg, rgba(232,93,4,0.1), rgba(15,107,92,0.08));\n border: 1px solid rgba(232,93,4,0.22);\n }\n .pace-ribbon strong { font-size: 15px; font-weight: 800; }\n .pace-ribbon span { font-size: 13px; color: var(--muted); line-height: 1.45; }\n .arc-strip { display: flex; flex-wrap: wrap; gap: 10px; margin: 12px 0 0; }\n .arc-chip {\n flex: 1 1 140px; min-width: 120px; padding: 10px 12px; border-radius: 10px;\n background: var(--panel); border: 1px solid var(--line);\n }\n .arc-chip b { display: block; font-size: 18px; font-weight: 850; color: var(--accent); }\n .arc-chip small { font-size: 11px; color: var(--muted); }\n .pulse-mini { margin-top: 12px; }\n .pulse-mini h4 { margin: 0 0 6px; font-size: 12px; font-weight: 750; color: var(--muted); }\n .pulse-row { display: flex; align-items: flex-end; gap: 3px; height: 52px; overflow-x: auto; padding-bottom: 4px; }\n .pulse-bar {\n flex: 0 0 10px; min-height: 4px; border-radius: 3px 3px 1px 1px;\n background: linear-gradient(180deg, #ea580c 55%, #0f6b5c 100%);\n opacity: 0.85;\n }\n .hours-wrap { display: flex; flex-direction: column; gap: 8px; }\n .hours-split { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n @media (max-width: 560px) { .hours-split { grid-template-columns: 1fr; } }\n .hours-half { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n .hours-band {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n padding: 4px 8px;\n border-radius: 6px;\n text-align: center;\n }\n .hours-band-am { color: #0c4a6e; background: rgba(8, 145, 178, 0.14); }\n .hours-band-pm { color: #9a3412; background: rgba(234, 88, 12, 0.14); }\n :root[data-theme=\"dark\"] .hours-band-am { color: #7dd3fc; background: rgba(8, 145, 178, 0.22); }\n :root[data-theme=\"dark\"] .hours-band-pm { color: #fdba74; background: rgba(234, 88, 12, 0.2); }\n .hours-bars { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 3px; align-items: end; height: 120px; }\n .hour {\n min-width: 0;\n width: 100%;\n align-self: end;\n border-radius: 4px 4px 0 0;\n }\n .hour-am { background: linear-gradient(180deg, #22d3ee, #0891b2); }\n .hour-pm { background: linear-gradient(180deg, #fb923c, #ea580c); }\n .hours-labels {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n gap: 2px;\n font-size: 9px;\n line-height: 1.15;\n color: var(--muted);\n text-align: center;\n font-variant-numeric: tabular-nums;\n }\n .hours-labels span { min-width: 0; }\n .table { width: 100%; border-collapse: collapse; font-size: 13px; }\n .table-rank { width: 100%; max-width: 100%; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; table-layout: fixed; }\n .table-rank thead th {\n color: var(--muted);\n font-weight: 700;\n font-size: 11px;\n padding: 10px 8px;\n background: var(--bar-bg);\n border-bottom: 2px solid var(--line);\n }\n .table-rank tbody tr { border-bottom: 1px solid var(--line); }\n .table-rank tbody tr:last-child { border-bottom: none; }\n .table-rank tbody tr:nth-child(even) { background: rgba(15, 107, 92, 0.04); }\n :root[data-theme=\"dark\"] .table-rank tbody tr:nth-child(even) { background: rgba(255, 255, 255, 0.03); }\n .table-rank td { padding: 10px 8px; }\n .table-rank td:first-child { font-weight: 700; color: var(--ink); }\n .table th, .table td { text-align: left; border-bottom: 1px solid var(--line); padding: 9px 6px; }\n .table th { color: var(--muted); font-weight: 650; font-size: 11px; text-transform: none; }\n .table td.num { text-align: right; font-variant-numeric: tabular-nums; }\n .kw-note {\n margin: 0 0 10px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--line);\n background: rgba(15, 107, 92, 0.06);\n font-size: 12px;\n line-height: 1.55;\n color: var(--muted);\n }\n .topic-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n gap: 12px;\n margin-top: 12px;\n }\n .topic-card {\n border: 1px solid var(--line);\n border-radius: 12px;\n padding: 12px 14px;\n background: var(--bar-bg);\n }\n .topic-card header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n font-size: 14px;\n }\n .topic-badge {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n padding: 2px 7px;\n border-radius: 999px;\n }\n .topic-badge.theme { background: rgba(15, 107, 92, 0.15); color: var(--accent); }\n .topic-badge.period { background: rgba(196, 92, 42, 0.15); color: var(--warm); }\n .topic-pct { margin-left: auto; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }\n .topic-chips { display: flex; flex-wrap: wrap; gap: 6px; }\n .topic-chip {\n font-size: 12px;\n padding: 4px 9px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: rgba(255, 255, 255, 0.5);\n color: var(--ink);\n }\n :root[data-theme=\"dark\"] .topic-chip { background: rgba(255, 255, 255, 0.06); }\n .self-serve {\n margin-top: 14px;\n border: 1px dashed rgba(15, 107, 92, 0.38);\n border-radius: 12px;\n padding: 16px 18px;\n background: linear-gradient(135deg, rgba(15, 107, 92, 0.06), rgba(196, 92, 42, 0.04));\n font-size: 13px;\n line-height: 1.6;\n color: var(--muted);\n }\n .self-serve h2 { margin: 0 0 10px; font-size: 16px; font-weight: 750; color: var(--ink); letter-spacing: -0.02em; }\n .self-serve p { margin: 0 0 8px; }\n .self-serve ol { margin: 0 0 10px; padding-left: 1.25rem; }\n .self-serve li { margin: 4px 0; }\n .self-serve code { font-size: 11.5px; background: var(--bar-bg); padding: 1px 5px; border-radius: 4px; color: var(--ink); }\n .self-serve .cmd {\n margin: 10px 0 12px;\n padding: 11px 13px;\n border-radius: 8px;\n background: var(--bar-bg);\n border: 1px solid var(--line);\n font-family: ui-monospace, \"Cascadia Code\", \"Consolas\", monospace;\n font-size: 12px;\n line-height: 1.45;\n color: var(--ink);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n max-width: 100%;\n }\n .self-serve .links { margin: 10px 0 0; font-size: 12px; }\n .self-serve .links a { font-weight: 650; }\n .insight-hero { position: relative; overflow: hidden; }\n .insight-hero::before {\n content: \"\";\n position: absolute;\n inset: -40% 40% auto -20%;\n height: 120%;\n background: radial-gradient(closest-side, var(--glow), transparent 70%);\n pointer-events: none;\n }\n .insight-head { display: flex; flex-wrap: wrap; gap: 20px; justify-content: space-between; align-items: flex-start; position: relative; z-index: 1; }\n .insight-lede { margin: 8px 0 0; color: var(--muted); font-size: 14px; line-height: 1.65; max-width: 62ch; }\n .insight-grid {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 10px;\n margin-top: 18px;\n position: relative;\n z-index: 1;\n }\n @media (min-width: 1080px) {\n .insight-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n }\n @media (max-width: 720px) { .insight-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n .ins-metric {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(255,255,255,0.04), transparent);\n }\n .ins-m-label { display: block; font-size: 11px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 6px; }\n .ins-m-val { font-size: 22px; font-weight: 850; letter-spacing: -0.03em; line-height: 1.1; }\n .ins-m-sub { display: block; font-size: 11px; color: var(--muted); margin-top: 6px; }\n .insight-split { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 22px; position: relative; z-index: 1; }\n @media (max-width: 900px) { .insight-split { grid-template-columns: 1fr; } }\n .insight-sub { margin: 0 0 6px; font-size: 14px; font-weight: 750; color: var(--ink); }\n .daypart-bar { display: flex; height: 14px; border-radius: 999px; overflow: hidden; border: 1px solid var(--line); }\n .dp-seg { min-width: 2px; height: 100%; transition: opacity 0.2s; }\n .dp-seg:hover { opacity: 0.85; }\n .daypart-legend { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px 16px; font-size: 12px; color: var(--muted); }\n .daypart-legend li { display: flex; align-items: center; gap: 6px; }\n .daypart-legend i { width: 10px; height: 10px; border-radius: 2px; flex-shrink: 0; }\n .rh-wrap { position: relative; width: 108px; height: 108px; flex-shrink: 0; }\n .rh-ring {\n width: 108px;\n height: 108px;\n border-radius: 50%;\n background: conic-gradient(from -90deg, var(--accent) calc(var(--p) * 1%), var(--bar-bg) 0);\n display: grid;\n place-items: center;\n box-shadow: 0 0 0 1px var(--line) inset;\n }\n .rh-ring span {\n width: 74px;\n height: 74px;\n border-radius: 50%;\n background: var(--panel);\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--line);\n }\n .rh-cap {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n font-size: 11px;\n color: var(--muted);\n font-weight: 700;\n }\n .rh-cap span { font-size: 22px; font-weight: 900; color: var(--ink); letter-spacing: -0.04em; }\n .rh-cap small { font-size: 11px; font-weight: 700; color: var(--muted); margin-left: 1px; }\n .sc-plot {\n position: relative;\n width: 100%;\n max-width: 100%;\n margin-top: 4px;\n padding: 32px 8px 36px 8px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background-color: var(--panel);\n background-image:\n linear-gradient(to right, color-mix(in srgb, var(--line) 55%, transparent) 1px, transparent 1px),\n linear-gradient(to bottom, color-mix(in srgb, var(--line) 55%, transparent) 1px, transparent 1px);\n background-size: 25% 25%;\n overflow: hidden;\n }\n @media (min-width: 560px) {\n .sc-plot {\n aspect-ratio: 5 / 4;\n min-height: 240px;\n max-height: 380px;\n padding: 28px 12px 40px 12px;\n }\n }\n .sc-grid-label {\n position: absolute;\n font-size: 10px;\n font-weight: 700;\n color: var(--muted);\n letter-spacing: 0.02em;\n pointer-events: none;\n line-height: 1.2;\n }\n .sc-lbl-top { left: 50%; top: 6px; transform: translateX(-50%); }\n .sc-lbl-bottom { left: 50%; bottom: 8px; transform: translateX(-50%); }\n .sc-lbl-left { left: 6px; top: 50%; transform: translateY(-50%) rotate(-90deg); transform-origin: left center; }\n .sc-lbl-right { right: 6px; top: 50%; transform: translateY(-50%) rotate(90deg); transform-origin: right center; }\n .sc-quadrant {\n position: absolute;\n font-size: 9px;\n font-weight: 650;\n color: color-mix(in srgb, var(--muted) 75%, transparent);\n pointer-events: none;\n }\n .sc-q-tl { left: 12%; top: 14%; }\n .sc-q-tr { right: 10%; top: 14%; }\n .sc-q-bl { left: 12%; bottom: 18%; }\n .sc-q-br { right: 10%; bottom: 18%; }\n .bubble-node {\n position: relative;\n display: flex;\n align-items: flex-start;\n gap: 0;\n max-width: 100%;\n z-index: 1;\n }\n @media (min-width: 560px) {\n .bubble-node {\n position: absolute;\n transform: translate(-50%, -50%) scale(var(--bubble-scale, 1));\n max-width: min(34%, 140px);\n }\n }\n .bubble-shape {\n flex-shrink: 0;\n width: 10px;\n height: 10px;\n margin-top: 12px;\n background: hsl(var(--bubble-hue, 168) 62% 42%);\n border-radius: 0 0 0 3px;\n clip-path: polygon(0 0, 100% 50%, 0 100%);\n }\n @media (min-width: 560px) {\n .bubble-shape {\n position: absolute;\n inset: 0;\n width: auto;\n height: auto;\n margin: 0;\n clip-path: none;\n border-radius: 14px 14px 14px 4px;\n background: hsl(var(--bubble-hue, 168) 48% 94%);\n border: 2px solid hsl(var(--bubble-hue, 168) 58% 40%);\n opacity: 0.98;\n z-index: 0;\n }\n :root[data-theme=\"dark\"] .bubble-shape {\n background: hsl(var(--bubble-hue, 168) 35% 22%);\n border-color: hsl(var(--bubble-hue, 168) 55% 48%);\n }\n }\n .bubble-content {\n flex: 1;\n min-width: 0;\n padding: 8px 11px;\n border-radius: 14px;\n border: 2px solid hsl(var(--bubble-hue, 168) 58% 40%);\n background: hsl(var(--bubble-hue, 168) 48% 96%);\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n }\n :root[data-theme=\"dark\"] .bubble-content {\n background: hsl(var(--bubble-hue, 168) 35% 20%);\n border-color: hsl(var(--bubble-hue, 168) 55% 48%);\n }\n @media (min-width: 560px) {\n .bubble-content {\n position: relative;\n z-index: 1;\n text-align: center;\n border: none;\n background: transparent;\n box-shadow: none;\n padding: 6px 8px;\n }\n }\n .bubble-content strong {\n display: block;\n font-size: 11px;\n font-weight: 800;\n color: var(--ink);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .bubble-content .bubble-pct {\n display: block;\n font-size: 15px;\n font-weight: 900;\n letter-spacing: -0.03em;\n color: hsl(var(--bubble-hue, 168) 55% 32%);\n font-variant-numeric: tabular-nums;\n }\n :root[data-theme=\"dark\"] .bubble-content .bubble-pct {\n color: hsl(var(--bubble-hue, 168) 70% 72%);\n }\n .bubble-content small {\n display: block;\n margin-top: 2px;\n font-size: 9px;\n color: var(--muted);\n font-weight: 650;\n }\n .sc-plot-list {\n display: grid;\n gap: 10px;\n }\n @media (min-width: 560px) {\n .sc-plot-list { display: block; position: absolute; inset: 0; }\n .sc-plot-list .bubble-node { margin: 0; }\n }\n .fact-card { margin-bottom: 14px; padding: 14px 16px; }\n .fact-card h2 { margin: 0 0 6px; font-size: 15px; }\n .fact-hint { margin: 0 0 10px; font-size: 11px; color: var(--muted); line-height: 1.45; }\n .fact-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(118px, 1fr));\n gap: 5px 7px;\n }\n .fact-cell {\n padding: 5px 7px;\n border-radius: 8px;\n border: 1px solid var(--line);\n background: linear-gradient(145deg, rgba(255, 255, 255, 0.04), transparent);\n min-height: 42px;\n }\n .fact-cell b {\n display: block;\n color: var(--muted);\n font-size: 9px;\n font-weight: 750;\n letter-spacing: 0.03em;\n line-height: 1.15;\n margin-bottom: 2px;\n }\n .fact-cell span {\n font-weight: 850;\n font-size: 12.5px;\n font-variant-numeric: tabular-nums;\n letter-spacing: -0.02em;\n }\n footer { margin-top: 28px; color: var(--muted); font-size: 11px; line-height: 1.5; }\n @media (max-width: 900px) {\n .hero, .two, .three { grid-template-columns: 1fr; }\n }\n\n\n/* 03-kca-story.css */\n#s-wrapped, #s-personas, #s-chapters, #s-calendar { scroll-margin-top: 76px; }\n .story-headline {\n margin: 0 0 14px;\n font-size: clamp(17px, 2.5vw, 21px);\n line-height: 1.55;\n font-weight: 650;\n color: var(--ink);\n max-width: 48ch;\n }\n .wrapped-section { margin-bottom: 20px; }\n .wrapped-section h2 { margin: 0 0 6px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; }\n .wrapped-lede { margin: 0 0 14px; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .wrapped-deck {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));\n padding: 0;\n }\n .wrapped-card {\n border-radius: 18px;\n border: 1px solid var(--line);\n padding: 22px 20px;\n min-height: 200px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n background: linear-gradient(155deg, rgba(15, 107, 92, 0.14), rgba(196, 92, 42, 0.08));\n box-shadow: var(--shadow);\n position: relative;\n overflow: hidden;\n }\n .wrapped-card::before {\n content: attr(data-emoji);\n position: absolute;\n top: 12px;\n right: 14px;\n font-size: 2.4rem;\n opacity: 0.35;\n line-height: 1;\n }\n .wrapped-card-kicker {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--muted);\n margin: 0 0 6px;\n }\n .wrapped-card-stat {\n margin: 0;\n font-size: clamp(32px, 6vw, 44px);\n font-weight: 900;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--ink);\n word-break: break-word;\n }\n .wrapped-card-sub {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--muted);\n }\n .persona-grid {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n .persona-chip {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n .persona-chip strong {\n display: block;\n font-size: 14px;\n color: var(--ink);\n margin-bottom: 4px;\n }\n .persona-chip em {\n display: block;\n font-style: normal;\n font-size: 12px;\n font-weight: 800;\n color: var(--accent);\n margin-bottom: 4px;\n }\n .persona-chip span { font-size: 11px; color: var(--muted); line-height: 1.4; }\n .chapter-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }\n .chapter-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n gap: 10px 14px;\n align-items: center;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n @media (max-width: 560px) {\n .chapter-item { grid-template-columns: auto 1fr; }\n .chapter-item .chapter-stat { grid-column: 1 / -1; text-align: left; }\n }\n .chapter-badge {\n font-size: 12px;\n font-weight: 900;\n color: var(--accent);\n min-width: 2.5rem;\n }\n .chapter-meta { font-size: 13px; line-height: 1.45; color: var(--ink); }\n .chapter-meta small { display: block; color: var(--muted); font-size: 11px; margin-top: 4px; }\n .chapter-stat { text-align: right; font-size: 13px; font-weight: 750; color: var(--muted); font-variant-numeric: tabular-nums; }\n\n /* GitHub contribution graph (\uC794\uB514) */\n :root {\n --gh-cell-size: 11px;\n --gh-cell-gap: 3px;\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n @media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n }\n :root[data-theme=\"dark\"] {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n :root[data-theme=\"light\"] {\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n .gh-contrib {\n position: relative;\n border: 1px solid var(--line);\n border-radius: 12px;\n padding: 16px 18px 14px;\n background: var(--panel);\n }\n .gh-cal-tooltip {\n position: absolute;\n z-index: 20;\n transform: translate(-50%, -100%);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 650;\n line-height: 1.35;\n white-space: nowrap;\n color: #fff;\n background: #24292f;\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.12s ease;\n }\n .gh-contrib.gh-tip-on .gh-cal-tooltip { opacity: 1; }\n :root[data-theme=\"dark\"] .gh-cal-tooltip {\n background: #f0f6fc;\n color: #0d1117;\n }\n @media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) .gh-cal-tooltip {\n background: #f0f6fc;\n color: #0d1117;\n }\n }\n .gh-contrib-summary {\n margin: 0 0 12px;\n font-size: 14px;\n line-height: 1.4;\n color: var(--muted);\n }\n .gh-contrib-summary strong {\n font-weight: 600;\n color: var(--ink);\n font-variant-numeric: tabular-nums;\n }\n .gh-contrib-span {\n display: block;\n margin-top: 4px;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-scroll {\n overflow-x: auto;\n overflow-y: hidden;\n max-width: 100%;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 2px;\n }\n .gh-cal-graph {\n display: grid;\n grid-template-areas:\n \". months\"\n \"days weeks\";\n grid-template-columns: max-content max-content;\n column-gap: 8px;\n row-gap: 4px;\n width: max-content;\n min-width: min(100%, max-content);\n }\n .gh-cal-days {\n grid-area: days;\n display: grid;\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n align-items: center;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n padding-right: 2px;\n }\n .gh-cal-days span {\n height: var(--gh-cell-size);\n display: flex;\n align-items: center;\n }\n .gh-cal-days span:empty { visibility: hidden; }\n .gh-cal-months {\n grid-area: months;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n height: 14px;\n align-items: end;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n }\n .gh-cal-month {\n grid-column: span 1;\n white-space: nowrap;\n overflow: visible;\n }\n .gh-cal-weeks {\n grid-area: weeks;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n grid-auto-flow: column;\n }\n .gh-cal-cell {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n background: var(--gh-cell-0);\n display: block;\n padding: 0;\n margin: 0;\n appearance: none;\n font: inherit;\n cursor: default;\n transition: transform 0.1s ease, box-shadow 0.1s ease, outline 0.1s ease;\n }\n .gh-cal-cell[data-date] {\n cursor: pointer;\n }\n .gh-cal-cell[data-date]:hover,\n .gh-cal-cell[data-date]:focus-visible {\n transform: scale(1.45);\n z-index: 5;\n position: relative;\n outline: 2px solid var(--accent);\n outline-offset: 1px;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--panel) 80%, transparent);\n }\n .gh-cal-cell[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-cell[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-cell[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-cell[data-level=\"4\"] { background: var(--gh-cell-4); }\n .gh-cal-cell[data-level=\"0\"] { background: var(--gh-cell-0); border: 1px solid color-mix(in srgb, var(--line) 70%, transparent); }\n .gh-cal-cell--pad {\n pointer-events: none;\n border: none;\n }\n .gh-cal-legend {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n margin-top: 12px;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-legend-scale {\n display: inline-flex;\n gap: var(--gh-cell-gap);\n align-items: center;\n margin: 0 2px;\n }\n .gh-cal-legend-scale i {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n display: block;\n font-style: normal;\n background: var(--gh-cell-0);\n }\n .gh-cal-legend-scale i[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-legend-scale i[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-legend-scale i[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-legend-scale i[data-level=\"4\"] { background: var(--gh-cell-4); }\n\n\n/* 04-kca-charts.css */\n.viz-hero {\n margin: 0 0 18px;\n padding: 20px 22px;\n border-radius: 20px;\n border: 1px solid var(--glass-border);\n background: var(--glass);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n box-shadow: var(--shadow);\n }\n .viz-hero h2 {\n margin: 0 0 6px;\n font-size: 22px;\n font-weight: 850;\n letter-spacing: -0.03em;\n background: var(--accent-grad);\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n }\n .viz-hero p { margin: 0; font-size: 13px; color: var(--muted); line-height: 1.55; }\n .viz-grid {\n display: grid;\n gap: 14px;\n grid-template-columns: repeat(12, 1fr);\n }\n .viz-card {\n grid-column: span 12;\n container-type: inline-size;\n container-name: kca-viz;\n border-radius: 18px;\n border: 1px solid var(--glass-border);\n background: var(--glass);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n padding: 16px 16px 12px;\n box-shadow: var(--shadow);\n }\n @media (min-width: 900px) {\n .viz-card.span-6 { grid-column: span 6; }\n .viz-card.span-8 { grid-column: span 8; }\n .viz-card.span-4 { grid-column: span 4; }\n }\n .viz-card h3 {\n margin: 0 0 4px;\n font-size: 15px;\n font-weight: 800;\n letter-spacing: -0.02em;\n }\n .viz-card .viz-hint {\n margin: 0 0 10px;\n font-size: 11px;\n color: var(--muted);\n line-height: 1.45;\n }\n .chart-box {\n width: 100%;\n min-height: 280px;\n height: min(42vh, 360px);\n }\n .chart-box.tall { height: min(52vh, 440px); min-height: 320px; }\n .chart-box.compact { height: 240px; min-height: 220px; }\n .kw-table-wrap {\n max-height: 520px;\n overflow: auto;\n border: 1px solid var(--line);\n border-radius: 12px;\n }\n .kw-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n }\n .kw-table thead th {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--panel-solid);\n text-align: left;\n padding: 8px 10px;\n font-size: 11px;\n color: var(--muted);\n border-bottom: 1px solid var(--line);\n }\n .kw-table td {\n padding: 7px 10px;\n border-bottom: 1px solid var(--line);\n }\n .kw-table tbody tr:nth-child(even) { background: rgba(94, 234, 212, 0.04); }\n .kw-table .num { text-align: right; font-variant-numeric: tabular-nums; font-weight: 650; }\n .kw-rank { color: var(--muted); width: 2.5rem; }\n\n\n/* 05-kca-ux.css */\n/* \uC139\uC158 \uB124\uBE44 \u2014 \uB9AC\uD329\uD130 \uC2DC \uC0AD\uC81C\uB410\uB358 \uAE30\uBCF8 \uADDC\uCE59 \uBCF5\uAD6C */\n.deck-nav {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 10px;\n margin-bottom: 0;\n padding: 10px 12px;\n border-radius: 0;\n border: none;\n background: transparent;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n box-shadow: none;\n}\n\n.deck-nav-h {\n font-size: 11px;\n font-weight: 800;\n color: var(--muted);\n margin-right: 4px;\n letter-spacing: 0.04em;\n flex: 0 0 auto;\n}\n\n.deck-nav a {\n font-size: 12px;\n font-weight: 700;\n padding: 6px 11px;\n border-radius: var(--radius-pill);\n border: 1px solid var(--line);\n background: var(--panel-solid);\n color: var(--ink);\n text-decoration: none;\n transition:\n transform 0.18s var(--ease-out),\n border-color 0.18s var(--ease-out),\n background 0.18s var(--ease-out);\n}\n\n.deck-nav a:hover {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 10%, var(--panel-solid));\n color: var(--accent);\n transform: translateY(-1px);\n}\n\n.kca-topbar {\n position: sticky;\n top: 0;\n z-index: 40;\n margin-bottom: 16px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background: var(--glass);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n }\n .kca-progress {\n height: 3px;\n background: var(--line);\n }\n .kca-progress-fill {\n display: block;\n height: 100%;\n width: 0%;\n background: var(--accent-grad);\n transition: width 0.12s ease-out;\n }\n .kca-topbar .toolbar {\n margin: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n border-bottom: 1px solid var(--line);\n }\n .deck-nav-shell > summary {\n display: none;\n cursor: pointer;\n padding: 10px 14px;\n font-size: 13px;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n border-bottom: 1px solid var(--line);\n }\n .deck-nav-shell > summary::-webkit-details-marker { display: none; }\n .deck-nav-shell > summary::after {\n content: \"\u25BE\";\n float: right;\n color: var(--muted);\n font-size: 11px;\n }\n .deck-nav-shell:not([open]) > summary::after { content: \"\u25B8\"; }\n .deck-nav-shell .deck-nav {\n margin: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n position: static;\n }\n .deck-nav a.is-active {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 14%, transparent);\n color: var(--accent);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);\n }\n .theme-btn.is-active {\n border-color: var(--accent);\n background: color-mix(in srgb, var(--accent) 12%, transparent);\n color: var(--accent);\n font-weight: 800;\n }\n .hero-jumps {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 14px;\n }\n .hero-jump {\n font-size: 12px;\n font-weight: 750;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: var(--panel);\n color: var(--ink);\n text-decoration: none;\n transition: border-color 0.15s ease, transform 0.15s ease;\n }\n .hero-jump:hover {\n border-color: var(--accent);\n transform: translateY(-1px);\n }\n .hero-jump strong { color: var(--accent); font-weight: 850; }\n .kca-back-top {\n position: fixed;\n right: max(16px, env(safe-area-inset-right));\n bottom: max(16px, env(safe-area-inset-bottom));\n z-index: 50;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: 1px solid var(--line);\n background: var(--panel-solid);\n color: var(--accent);\n font-size: 18px;\n font-weight: 900;\n cursor: pointer;\n box-shadow: var(--shadow);\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n .kca-back-top:not([hidden]):hover { transform: translateY(-2px); border-color: var(--accent); }\n .kca-back-top[hidden] { display: none; }\n .kw-css-fold {\n margin-bottom: 14px;\n border-radius: 14px;\n border: 1px solid var(--line);\n background: var(--panel);\n overflow: hidden;\n }\n .kw-css-fold > summary {\n cursor: pointer;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 800;\n color: var(--ink);\n list-style: none;\n }\n .kw-css-fold > summary::-webkit-details-marker { display: none; }\n .kw-css-fold > summary small {\n display: block;\n margin-top: 4px;\n font-size: 11px;\n font-weight: 500;\n color: var(--muted);\n }\n .kw-css-fold .kw-css-body { padding: 0 16px 16px; }\n @media (max-width: 720px) {\n .deck-nav-shell > summary { display: block; }\n .deck-nav-shell:not([open]) .deck-nav { display: none; }\n .deck-nav-shell .deck-nav {\n max-height: min(42vh, 280px);\n overflow-y: auto;\n overscroll-behavior: contain;\n }\n main { width: min(1200px, calc(100% - 20px)); padding: 20px 0 48px; }\n }\n @media (hover: none) {\n .card:hover { transform: none; box-shadow: var(--shadow); border-color: var(--line); }\n }\n /* scroll-margin: 06-kca-responsive.css --kca-topbar-offset */\n\n\n/* 06-kca-responsive.css */\n/* kca \uBC18\uC751\uD615 \u2014 \uBAA8\uBC14\uC77C \u00B7 \uD0DC\uBE14\uB9BF \u00B7 \uB370\uC2A4\uD06C\uD1B1 \u00B7 4K + \uCEE8\uD14C\uC774\uB108 \uCFFC\uB9AC */\n:root {\n --kca-content-max: 72rem;\n --kca-gutter: clamp(12px, 2.8vw, 28px);\n --kca-topbar-offset: 112px;\n --kca-section-gap: clamp(14px, 2vw, 22px);\n}\n\n@media (min-width: 600px) {\n :root {\n --kca-topbar-offset: 104px;\n }\n}\n\n@media (min-width: 1024px) {\n :root {\n --kca-content-max: 80rem;\n --kca-topbar-offset: 92px;\n }\n}\n\n@media (min-width: 1440px) {\n :root {\n --kca-content-max: 84rem;\n }\n}\n\n@media (min-width: 1920px) {\n :root {\n --kca-content-max: 92rem;\n --kca-gutter: clamp(20px, 2vw, 40px);\n --kca-section-gap: 24px;\n }\n}\n\n@media (min-width: 2560px) {\n :root {\n --kca-content-max: 100rem;\n }\n}\n\nmain {\n width: min(var(--kca-content-max), calc(100% - var(--kca-gutter) * 2));\n padding-block: clamp(20px, 4vw, 48px) clamp(40px, 6vw, 72px);\n}\n\n#s-story,\n#s-wrapped,\n#s-personas,\n#s-chapters,\n#s-calendar,\n#s-facts,\n#s-hl,\n#s-ai,\n#s-topics,\n#s-viz,\n#s-charts,\n#s-help {\n scroll-margin-top: var(--kca-topbar-offset);\n}\n\n.report-section {\n content-visibility: auto;\n contain-intrinsic-size: auto 520px;\n}\n\n.kca-topbar,\n#s-story,\n#s-wrapped {\n content-visibility: visible;\n}\n\n/* \u2500\u2500 \uCEE8\uD14C\uC774\uB108 \uCFFC\uB9AC: \uCC28\uD2B8 \uCE74\uB4DC \u2500\u2500 */\n.viz-card {\n container-type: inline-size;\n container-name: kca-viz;\n}\n\n@container kca-viz (max-width: 22rem) {\n .chart-box {\n height: min(36vh, 260px);\n min-height: 200px;\n }\n .chart-box.tall {\n height: min(42vh, 300px);\n min-height: 220px;\n }\n .viz-card h3 {\n font-size: 14px;\n }\n}\n\n@container kca-viz (min-width: 22rem) {\n .chart-box.compact {\n height: min(32vh, 280px);\n }\n}\n\n/* \u2500\u2500 \uBAA8\uBC14\uC77C (\u2264599px) \u2500\u2500 */\n@media (max-width: 599px) {\n .hero {\n grid-template-columns: 1fr;\n gap: 16px;\n padding-bottom: 20px;\n }\n\n .hero-jumps {\n flex-direction: column;\n align-items: stretch;\n }\n\n .hero-jump {\n text-align: center;\n justify-content: center;\n }\n\n .badge-row {\n gap: 6px;\n }\n\n .badge {\n font-size: 11px;\n padding: 5px 8px;\n }\n\n .fact-grid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px;\n }\n\n .fact-cell b {\n font-size: 8px;\n }\n\n .fact-cell span {\n font-size: 11px;\n }\n\n .wrapped-deck {\n grid-template-columns: 1fr;\n }\n\n .wrapped-card {\n min-height: 168px;\n padding: 18px 16px;\n }\n\n .wrapped-card-stat {\n font-size: clamp(28px, 10vw, 36px);\n }\n\n .chart-box {\n height: 240px;\n min-height: 200px;\n }\n\n .chart-box.tall {\n height: min(44vh, 300px);\n min-height: 220px;\n }\n\n .viz-hero {\n padding: 16px;\n }\n\n .viz-hero h2 {\n font-size: 18px;\n }\n\n .bar-row {\n grid-template-columns: minmax(56px, 0.9fr) minmax(0, 2fr) 44px;\n gap: 6px;\n }\n\n .deck-nav a {\n font-size: 11px;\n padding: 5px 9px;\n }\n\n .deck-nav-h {\n width: 100%;\n margin-bottom: 2px;\n }\n}\n\n/* \u2500\u2500 \uD0DC\uBE14\uB9BF (600\u20131023px) \u2500\u2500 */\n@media (min-width: 600px) and (max-width: 1023px) {\n .hero {\n grid-template-columns: 1fr;\n }\n\n .wrapped-deck {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .fact-grid {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .insight-grid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .two {\n grid-template-columns: 1fr;\n }\n\n .three {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .chart-box {\n height: min(40vh, 320px);\n }\n}\n\n/* \u2500\u2500 \uB370\uC2A4\uD06C\uD1B1 (1024\u20131919px) \u2500\u2500 */\n@media (min-width: 1024px) {\n .hero {\n grid-template-columns: 1.35fr 1fr;\n }\n\n .wrapped-deck {\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n }\n\n .fact-grid {\n grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));\n }\n}\n\n/* \u2500\u2500 4K / \uC6B8\uD2B8\uB77C\uC640\uC774\uB4DC (\u22651920px) \u2500\u2500 */\n@media (min-width: 1920px) {\n h1 {\n font-size: clamp(2.25rem, 1.6vw + 1rem, 3.25rem);\n }\n\n .room-title {\n font-size: clamp(1.25rem, 0.8vw + 0.75rem, 1.75rem);\n }\n\n .story-headline {\n font-size: clamp(1.1rem, 0.5vw + 0.85rem, 1.35rem);\n max-width: 56ch;\n }\n\n .viz-grid {\n gap: 18px;\n }\n\n .viz-card {\n padding: 18px 20px 14px;\n }\n\n .wrapped-deck {\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: 16px;\n }\n\n .wrapped-card-stat {\n font-size: clamp(36px, 3vw, 48px);\n }\n\n .card {\n padding: 20px 24px;\n }\n\n .deck-nav a {\n font-size: 13px;\n padding: 7px 13px;\n }\n}\n\n/* \uC2A4\uD06C\uB864 \uC9C4\uC785 \uBAA8\uC158 (\uC811\uADFC\uC131: reduced-motion \uC2DC UX \uC2A4\uD06C\uB9BD\uD2B8\uAC00 \uBE44\uD65C\uC131) */\n@media (prefers-reduced-motion: no-preference) {\n .kca-reveal {\n opacity: 0;\n transform: translateY(14px);\n transition:\n opacity 0.55s var(--ease-out),\n transform 0.55s var(--ease-out);\n transition-delay: var(--reveal-delay, 0ms);\n }\n\n .kca-reveal.is-inview {\n opacity: 1;\n transform: none;\n }\n}\n\n/* \uD130\uCE58 \uD0C0\uAE43 */\n@media (hover: none) and (pointer: coarse) {\n .theme-btn,\n .deck-nav a,\n .hero-jump {\n min-height: 44px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .gh-cal-cell {\n min-width: 44px;\n min-height: 44px;\n }\n}\n\n";
|
|
@@ -155,9 +155,7 @@ body {
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
main {
|
|
158
|
-
width: min(var(--size-content-3, 72rem), calc(100% - var(--size-4)));
|
|
159
158
|
margin: 0 auto;
|
|
160
|
-
padding: var(--size-6) 0 var(--size-8);
|
|
161
159
|
overflow-x: clip;
|
|
162
160
|
max-width: 100%;
|
|
163
161
|
}
|
|
@@ -819,7 +817,7 @@ a {
|
|
|
819
817
|
.wrapped-deck {
|
|
820
818
|
display: grid;
|
|
821
819
|
gap: 12px;
|
|
822
|
-
grid-template-columns: repeat(auto-fill, minmax(min(100%,
|
|
820
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));
|
|
823
821
|
padding: 0;
|
|
824
822
|
}
|
|
825
823
|
.wrapped-card {
|
|
@@ -1157,6 +1155,8 @@ a {
|
|
|
1157
1155
|
}
|
|
1158
1156
|
.viz-card {
|
|
1159
1157
|
grid-column: span 12;
|
|
1158
|
+
container-type: inline-size;
|
|
1159
|
+
container-name: kca-viz;
|
|
1160
1160
|
border-radius: 18px;
|
|
1161
1161
|
border: 1px solid var(--glass-border);
|
|
1162
1162
|
background: var(--glass);
|
|
@@ -1414,9 +1414,316 @@ a {
|
|
|
1414
1414
|
@media (hover: none) {
|
|
1415
1415
|
.card:hover { transform: none; box-shadow: var(--shadow); border-color: var(--line); }
|
|
1416
1416
|
}
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1417
|
+
/* scroll-margin: 06-kca-responsive.css --kca-topbar-offset */
|
|
1418
|
+
|
|
1419
|
+
|
|
1420
|
+
/* 06-kca-responsive.css */
|
|
1421
|
+
/* kca 반응형 — 모바일 · 태블릿 · 데스크톱 · 4K + 컨테이너 쿼리 */
|
|
1422
|
+
:root {
|
|
1423
|
+
--kca-content-max: 72rem;
|
|
1424
|
+
--kca-gutter: clamp(12px, 2.8vw, 28px);
|
|
1425
|
+
--kca-topbar-offset: 112px;
|
|
1426
|
+
--kca-section-gap: clamp(14px, 2vw, 22px);
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
@media (min-width: 600px) {
|
|
1430
|
+
:root {
|
|
1431
|
+
--kca-topbar-offset: 104px;
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
@media (min-width: 1024px) {
|
|
1436
|
+
:root {
|
|
1437
|
+
--kca-content-max: 80rem;
|
|
1438
|
+
--kca-topbar-offset: 92px;
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
@media (min-width: 1440px) {
|
|
1443
|
+
:root {
|
|
1444
|
+
--kca-content-max: 84rem;
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
@media (min-width: 1920px) {
|
|
1449
|
+
:root {
|
|
1450
|
+
--kca-content-max: 92rem;
|
|
1451
|
+
--kca-gutter: clamp(20px, 2vw, 40px);
|
|
1452
|
+
--kca-section-gap: 24px;
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
@media (min-width: 2560px) {
|
|
1457
|
+
:root {
|
|
1458
|
+
--kca-content-max: 100rem;
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
main {
|
|
1463
|
+
width: min(var(--kca-content-max), calc(100% - var(--kca-gutter) * 2));
|
|
1464
|
+
padding-block: clamp(20px, 4vw, 48px) clamp(40px, 6vw, 72px);
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
#s-story,
|
|
1468
|
+
#s-wrapped,
|
|
1469
|
+
#s-personas,
|
|
1470
|
+
#s-chapters,
|
|
1471
|
+
#s-calendar,
|
|
1472
|
+
#s-facts,
|
|
1473
|
+
#s-hl,
|
|
1474
|
+
#s-ai,
|
|
1475
|
+
#s-topics,
|
|
1476
|
+
#s-viz,
|
|
1477
|
+
#s-charts,
|
|
1478
|
+
#s-help {
|
|
1479
|
+
scroll-margin-top: var(--kca-topbar-offset);
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
.report-section {
|
|
1483
|
+
content-visibility: auto;
|
|
1484
|
+
contain-intrinsic-size: auto 520px;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
.kca-topbar,
|
|
1488
|
+
#s-story,
|
|
1489
|
+
#s-wrapped {
|
|
1490
|
+
content-visibility: visible;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
/* ── 컨테이너 쿼리: 차트 카드 ── */
|
|
1494
|
+
.viz-card {
|
|
1495
|
+
container-type: inline-size;
|
|
1496
|
+
container-name: kca-viz;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
@container kca-viz (max-width: 22rem) {
|
|
1500
|
+
.chart-box {
|
|
1501
|
+
height: min(36vh, 260px);
|
|
1502
|
+
min-height: 200px;
|
|
1503
|
+
}
|
|
1504
|
+
.chart-box.tall {
|
|
1505
|
+
height: min(42vh, 300px);
|
|
1506
|
+
min-height: 220px;
|
|
1507
|
+
}
|
|
1508
|
+
.viz-card h3 {
|
|
1509
|
+
font-size: 14px;
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
@container kca-viz (min-width: 22rem) {
|
|
1514
|
+
.chart-box.compact {
|
|
1515
|
+
height: min(32vh, 280px);
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
/* ── 모바일 (≤599px) ── */
|
|
1520
|
+
@media (max-width: 599px) {
|
|
1521
|
+
.hero {
|
|
1522
|
+
grid-template-columns: 1fr;
|
|
1523
|
+
gap: 16px;
|
|
1524
|
+
padding-bottom: 20px;
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
.hero-jumps {
|
|
1528
|
+
flex-direction: column;
|
|
1529
|
+
align-items: stretch;
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
.hero-jump {
|
|
1533
|
+
text-align: center;
|
|
1534
|
+
justify-content: center;
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
.badge-row {
|
|
1538
|
+
gap: 6px;
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
.badge {
|
|
1542
|
+
font-size: 11px;
|
|
1543
|
+
padding: 5px 8px;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
.fact-grid {
|
|
1547
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1548
|
+
gap: 6px;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
.fact-cell b {
|
|
1552
|
+
font-size: 8px;
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
.fact-cell span {
|
|
1556
|
+
font-size: 11px;
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1559
|
+
.wrapped-deck {
|
|
1560
|
+
grid-template-columns: 1fr;
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
.wrapped-card {
|
|
1564
|
+
min-height: 168px;
|
|
1565
|
+
padding: 18px 16px;
|
|
1566
|
+
}
|
|
1567
|
+
|
|
1568
|
+
.wrapped-card-stat {
|
|
1569
|
+
font-size: clamp(28px, 10vw, 36px);
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
.chart-box {
|
|
1573
|
+
height: 240px;
|
|
1574
|
+
min-height: 200px;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
.chart-box.tall {
|
|
1578
|
+
height: min(44vh, 300px);
|
|
1579
|
+
min-height: 220px;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
.viz-hero {
|
|
1583
|
+
padding: 16px;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
.viz-hero h2 {
|
|
1587
|
+
font-size: 18px;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
.bar-row {
|
|
1591
|
+
grid-template-columns: minmax(56px, 0.9fr) minmax(0, 2fr) 44px;
|
|
1592
|
+
gap: 6px;
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
.deck-nav a {
|
|
1596
|
+
font-size: 11px;
|
|
1597
|
+
padding: 5px 9px;
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
.deck-nav-h {
|
|
1601
|
+
width: 100%;
|
|
1602
|
+
margin-bottom: 2px;
|
|
1603
|
+
}
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
/* ── 태블릿 (600–1023px) ── */
|
|
1607
|
+
@media (min-width: 600px) and (max-width: 1023px) {
|
|
1608
|
+
.hero {
|
|
1609
|
+
grid-template-columns: 1fr;
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
.wrapped-deck {
|
|
1613
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1616
|
+
.fact-grid {
|
|
1617
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
.insight-grid {
|
|
1621
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
.two {
|
|
1625
|
+
grid-template-columns: 1fr;
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1628
|
+
.three {
|
|
1629
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
.chart-box {
|
|
1633
|
+
height: min(40vh, 320px);
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
/* ── 데스크톱 (1024–1919px) ── */
|
|
1638
|
+
@media (min-width: 1024px) {
|
|
1639
|
+
.hero {
|
|
1640
|
+
grid-template-columns: 1.35fr 1fr;
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1643
|
+
.wrapped-deck {
|
|
1644
|
+
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
.fact-grid {
|
|
1648
|
+
grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
|
|
1649
|
+
}
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
/* ── 4K / 울트라와이드 (≥1920px) ── */
|
|
1653
|
+
@media (min-width: 1920px) {
|
|
1654
|
+
h1 {
|
|
1655
|
+
font-size: clamp(2.25rem, 1.6vw + 1rem, 3.25rem);
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
.room-title {
|
|
1659
|
+
font-size: clamp(1.25rem, 0.8vw + 0.75rem, 1.75rem);
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1662
|
+
.story-headline {
|
|
1663
|
+
font-size: clamp(1.1rem, 0.5vw + 0.85rem, 1.35rem);
|
|
1664
|
+
max-width: 56ch;
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
.viz-grid {
|
|
1668
|
+
gap: 18px;
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1671
|
+
.viz-card {
|
|
1672
|
+
padding: 18px 20px 14px;
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1675
|
+
.wrapped-deck {
|
|
1676
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
1677
|
+
gap: 16px;
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
.wrapped-card-stat {
|
|
1681
|
+
font-size: clamp(36px, 3vw, 48px);
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
.card {
|
|
1685
|
+
padding: 20px 24px;
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
.deck-nav a {
|
|
1689
|
+
font-size: 13px;
|
|
1690
|
+
padding: 7px 13px;
|
|
1691
|
+
}
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
/* 스크롤 진입 모션 (접근성: reduced-motion 시 UX 스크립트가 비활성) */
|
|
1695
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
1696
|
+
.kca-reveal {
|
|
1697
|
+
opacity: 0;
|
|
1698
|
+
transform: translateY(14px);
|
|
1699
|
+
transition:
|
|
1700
|
+
opacity 0.55s var(--ease-out),
|
|
1701
|
+
transform 0.55s var(--ease-out);
|
|
1702
|
+
transition-delay: var(--reveal-delay, 0ms);
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
.kca-reveal.is-inview {
|
|
1706
|
+
opacity: 1;
|
|
1707
|
+
transform: none;
|
|
1708
|
+
}
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
/* 터치 타깃 */
|
|
1712
|
+
@media (hover: none) and (pointer: coarse) {
|
|
1713
|
+
.theme-btn,
|
|
1714
|
+
.deck-nav a,
|
|
1715
|
+
.hero-jump {
|
|
1716
|
+
min-height: 44px;
|
|
1717
|
+
display: inline-flex;
|
|
1718
|
+
align-items: center;
|
|
1719
|
+
justify-content: center;
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
.gh-cal-cell {
|
|
1723
|
+
min-width: 44px;
|
|
1724
|
+
min-height: 44px;
|
|
1725
|
+
}
|
|
1726
|
+
}
|
|
1420
1727
|
|
|
1421
1728
|
`;
|
|
1422
1729
|
//# sourceMappingURL=report-styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-styles.js","sourceRoot":"","sources":["../../src/report-styles.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"report-styles.js","sourceRoot":"","sources":["../../src/report-styles.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8rD5B,CAAC"}
|
package/dist/src/report-ux.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReportData } from "./types.js";
|
|
2
2
|
/** 리포트 HTML용 UX 레이어 (진행률·스크롤 스파이·모바일 네비·맨 위로) */
|
|
3
3
|
/** @deprecated styles live in src/report/css — bundled via report-styles.ts */
|
|
4
|
-
export declare const REPORT_UX_SCRIPT = "\n (function () {\n var fill = document.querySelector(\".kca-progress-fill\");\n var backTop = document.querySelector(\".kca-back-top\");\n var navLinks = document.querySelectorAll(\".deck-nav a[data-kca-jump]\");\n var sections = [];\n navLinks.forEach(function (a) {\n var id = a.getAttribute(\"data-kca-jump\");\n var el =
|
|
4
|
+
export declare const REPORT_UX_SCRIPT = "\n (function () {\n var fill = document.querySelector(\".kca-progress-fill\");\n var backTop = document.querySelector(\".kca-back-top\");\n var topbar = document.querySelector(\".kca-topbar\");\n var navLinks = document.querySelectorAll(\".deck-nav a[data-kca-jump], .hero-jump[data-kca-jump]\");\n var sections = [];\n navLinks.forEach(function (a) {\n var id = a.getAttribute(\"data-kca-jump\");\n if (!id) return;\n var el = document.getElementById(id);\n if (!el) return;\n if (sections.some(function (s) { return s.el === el; })) return;\n sections.push({ el: el, link: a });\n });\n function topbarOffset() {\n return topbar ? topbar.getBoundingClientRect().height + 10 : 112;\n }\n function onScroll() {\n var st = window.scrollY || document.documentElement.scrollTop;\n var max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n if (fill) fill.style.width = Math.min(100, (st / max) * 100) + \"%\";\n if (backTop) backTop.hidden = st < 480;\n if (!sections.length) return;\n var probe = st + topbarOffset();\n var current = sections[0];\n for (var i = 0; i < sections.length; i += 1) {\n if (sections[i].el.offsetTop <= probe) current = sections[i];\n }\n sections.forEach(function (s) {\n var on = s === current;\n s.link.classList.toggle(\"is-active\", on);\n if (on) s.link.setAttribute(\"aria-current\", \"location\");\n else s.link.removeAttribute(\"aria-current\");\n });\n }\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n onScroll();\n if (backTop) {\n backTop.addEventListener(\"click\", function () {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n });\n }\n var shell = document.querySelector(\".deck-nav-shell\");\n if (shell) {\n shell.addEventListener(\"toggle\", function () {\n setTimeout(function () {\n onScroll();\n window.dispatchEvent(new Event(\"resize\"));\n }, 60);\n });\n }\n var reduce = window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (!reduce && typeof IntersectionObserver !== \"undefined\") {\n var reveal = new IntersectionObserver(\n function (entries) {\n entries.forEach(function (en) {\n if (en.isIntersecting) {\n en.target.classList.add(\"is-inview\");\n reveal.unobserve(en.target);\n }\n });\n },\n { rootMargin: \"0px 0px -5% 0px\", threshold: 0.05 },\n );\n var ri = 0;\n document.querySelectorAll(\".card, .wrapped-card, .viz-card, .fact-card\").forEach(function (el) {\n el.classList.add(\"kca-reveal\");\n el.style.setProperty(\"--reveal-delay\", Math.min(ri * 35, 280) + \"ms\");\n ri += 1;\n reveal.observe(el);\n });\n }\n function syncThemeButtons() {\n var mode = document.documentElement.getAttribute(\"data-theme\") || \"system\";\n document.querySelectorAll(\".theme-btn\").forEach(function (btn) {\n var v = btn.getAttribute(\"data-theme-set\") || \"system\";\n var on = mode === \"system\" ? v === \"system\" : v === mode;\n btn.classList.toggle(\"is-active\", on);\n btn.setAttribute(\"aria-pressed\", on ? \"true\" : \"false\");\n });\n }\n var obs = new MutationObserver(function () {\n syncThemeButtons();\n setTimeout(function () { window.dispatchEvent(new Event(\"resize\")); }, 40);\n });\n obs.observe(document.documentElement, { attributes: true, attributeFilter: [\"data-theme\"] });\n syncThemeButtons();\n })();\n";
|
|
5
5
|
export declare function renderHeroQuickJumps(): string;
|
|
6
6
|
export declare function renderTopChrome(_data: ReportData, sectionNavHtml: string): string;
|
|
7
7
|
export declare function topicNavLink(data: ReportData): string;
|
package/dist/src/report-ux.js
CHANGED
|
@@ -4,20 +4,27 @@ export const REPORT_UX_SCRIPT = `
|
|
|
4
4
|
(function () {
|
|
5
5
|
var fill = document.querySelector(".kca-progress-fill");
|
|
6
6
|
var backTop = document.querySelector(".kca-back-top");
|
|
7
|
-
var
|
|
7
|
+
var topbar = document.querySelector(".kca-topbar");
|
|
8
|
+
var navLinks = document.querySelectorAll(".deck-nav a[data-kca-jump], .hero-jump[data-kca-jump]");
|
|
8
9
|
var sections = [];
|
|
9
10
|
navLinks.forEach(function (a) {
|
|
10
11
|
var id = a.getAttribute("data-kca-jump");
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
if (!id) return;
|
|
13
|
+
var el = document.getElementById(id);
|
|
14
|
+
if (!el) return;
|
|
15
|
+
if (sections.some(function (s) { return s.el === el; })) return;
|
|
16
|
+
sections.push({ el: el, link: a });
|
|
13
17
|
});
|
|
18
|
+
function topbarOffset() {
|
|
19
|
+
return topbar ? topbar.getBoundingClientRect().height + 10 : 112;
|
|
20
|
+
}
|
|
14
21
|
function onScroll() {
|
|
15
22
|
var st = window.scrollY || document.documentElement.scrollTop;
|
|
16
23
|
var max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);
|
|
17
24
|
if (fill) fill.style.width = Math.min(100, (st / max) * 100) + "%";
|
|
18
25
|
if (backTop) backTop.hidden = st < 480;
|
|
19
26
|
if (!sections.length) return;
|
|
20
|
-
var probe = st +
|
|
27
|
+
var probe = st + topbarOffset();
|
|
21
28
|
var current = sections[0];
|
|
22
29
|
for (var i = 0; i < sections.length; i += 1) {
|
|
23
30
|
if (sections[i].el.offsetTop <= probe) current = sections[i];
|
|
@@ -30,21 +37,56 @@ export const REPORT_UX_SCRIPT = `
|
|
|
30
37
|
});
|
|
31
38
|
}
|
|
32
39
|
window.addEventListener("scroll", onScroll, { passive: true });
|
|
40
|
+
window.addEventListener("resize", onScroll, { passive: true });
|
|
33
41
|
onScroll();
|
|
34
42
|
if (backTop) {
|
|
35
43
|
backTop.addEventListener("click", function () {
|
|
36
44
|
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
37
45
|
});
|
|
38
46
|
}
|
|
47
|
+
var shell = document.querySelector(".deck-nav-shell");
|
|
48
|
+
if (shell) {
|
|
49
|
+
shell.addEventListener("toggle", function () {
|
|
50
|
+
setTimeout(function () {
|
|
51
|
+
onScroll();
|
|
52
|
+
window.dispatchEvent(new Event("resize"));
|
|
53
|
+
}, 60);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
var reduce = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
57
|
+
if (!reduce && typeof IntersectionObserver !== "undefined") {
|
|
58
|
+
var reveal = new IntersectionObserver(
|
|
59
|
+
function (entries) {
|
|
60
|
+
entries.forEach(function (en) {
|
|
61
|
+
if (en.isIntersecting) {
|
|
62
|
+
en.target.classList.add("is-inview");
|
|
63
|
+
reveal.unobserve(en.target);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
{ rootMargin: "0px 0px -5% 0px", threshold: 0.05 },
|
|
68
|
+
);
|
|
69
|
+
var ri = 0;
|
|
70
|
+
document.querySelectorAll(".card, .wrapped-card, .viz-card, .fact-card").forEach(function (el) {
|
|
71
|
+
el.classList.add("kca-reveal");
|
|
72
|
+
el.style.setProperty("--reveal-delay", Math.min(ri * 35, 280) + "ms");
|
|
73
|
+
ri += 1;
|
|
74
|
+
reveal.observe(el);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
39
77
|
function syncThemeButtons() {
|
|
40
78
|
var mode = document.documentElement.getAttribute("data-theme") || "system";
|
|
41
79
|
document.querySelectorAll(".theme-btn").forEach(function (btn) {
|
|
42
80
|
var v = btn.getAttribute("data-theme-set") || "system";
|
|
43
|
-
|
|
44
|
-
btn.
|
|
81
|
+
var on = mode === "system" ? v === "system" : v === mode;
|
|
82
|
+
btn.classList.toggle("is-active", on);
|
|
83
|
+
btn.setAttribute("aria-pressed", on ? "true" : "false");
|
|
45
84
|
});
|
|
46
85
|
}
|
|
47
|
-
var obs = new MutationObserver(
|
|
86
|
+
var obs = new MutationObserver(function () {
|
|
87
|
+
syncThemeButtons();
|
|
88
|
+
setTimeout(function () { window.dispatchEvent(new Event("resize")); }, 40);
|
|
89
|
+
});
|
|
48
90
|
obs.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
|
|
49
91
|
syncThemeButtons();
|
|
50
92
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-ux.js","sourceRoot":"","sources":["../../src/report-ux.ts"],"names":[],"mappings":"AAEA,iDAAiD;AACjD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"report-ux.js","sourceRoot":"","sources":["../../src/report-ux.ts"],"names":[],"mappings":"AAEA,iDAAiD;AACjD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0F/B,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;SAKA,CAAC;AACV,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,cAAsB;IACvE,OAAO;;;;;;;;;;QAUD,cAAc;;;oFAG8D,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,uDAAuD,CAAC;AACjE,CAAC"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
2
|
-
export declare const USER_AGENT = "kakaotalk-chat-analyzer/0.
|
|
1
|
+
export declare const VERSION = "0.11.0";
|
|
2
|
+
export declare const USER_AGENT = "kakaotalk-chat-analyzer/0.11.0";
|
package/dist/src/version.js
CHANGED
package/package.json
CHANGED