// ==================================================================== // Shell — SketchApp ラッパー(Tweaks 機能は削除済み、必要なら git history を参照) // ==================================================================== const { useEffect: useEffectShell } = React; // サイト既定値(旧 Tweaks の defaults と同じ) const SITE_DEFAULTS = { density: "comfy", showAutoBadge: true, heroVariant: "A", komaLayout: "tall", fontPair: "mono", sketchAccent: "terra", }; const SKETCH_ACCENTS = { terra: "#c0532a", forest: "#3b6b46", plum: "#8a3b6b", indigo: "#2a4a8a", }; // 旧 Tweaks の localStorage 残骸を一度だけクリア try { localStorage.removeItem("octopachi-tweaks-v2"); } catch {} function applyDefaults() { const root = document.documentElement; const t = SITE_DEFAULTS; root.setAttribute("data-density", t.density); root.setAttribute("data-auto-badge", t.showAutoBadge ? "on" : "off"); root.setAttribute("data-hero", t.heroVariant); root.setAttribute("data-koma", t.komaLayout); root.setAttribute("data-font-pair", t.fontPair); const densityMap = { tight: 0.85, comfy: 1, airy: 1.18 }; root.style.setProperty("--tw-density", densityMap[t.density] ?? 1); root.style.setProperty("--tw-auto-badge", t.showAutoBadge ? "inline-flex" : "none"); if (SKETCH_ACCENTS[t.sketchAccent]) { root.style.setProperty("--tw-sketch-accent", SKETCH_ACCENTS[t.sketchAccent]); } } // レイアウト系 CSS(density / auto-badge / sketch accent / font-pair / 4コマレイアウト) function injectSiteStyles() { if (document.getElementById("__site_styles")) return; const s = document.createElement("style"); s.id = "__site_styles"; s.textContent = ` /* density — scale padding/gap utilities */ html[data-density="tight"] .p-5 { padding: 12px !important; } html[data-density="tight"] .p-4 { padding: 10px !important; } html[data-density="tight"] .p-3 { padding: 8px !important; } html[data-density="tight"] .gap-5 { gap: 12px !important; } html[data-density="tight"] .mb-8 { margin-bottom: 16px !important; } html[data-density="tight"] .mt-10, html[data-density="tight"] .mt-12 { margin-top: 20px !important; } html[data-density="airy"] .p-5 { padding: 32px !important; } html[data-density="airy"] .p-4 { padding: 24px !important; } html[data-density="airy"] .gap-5 { gap: 32px !important; } html[data-density="airy"] .mb-8 { margin-bottom: 48px !important; } html[data-density="airy"] .mt-10 { margin-top: 64px !important; } /* auto-badge — kill chips marked with data-auto-badge-chip */ html[data-auto-badge="off"] [data-auto-badge-chip="1"] { display: none !important; } /* sketch accent variable swap */ html { --accent: var(--tw-sketch-accent) !important; } .squiggle { background-image: none !important; border-bottom: 2px wavy var(--tw-sketch-accent) !important; } /* font pairs — data-screen-label 配下全体に適用 */ html[data-font-pair="serif"] [data-screen-label], html[data-font-pair="serif"] [data-screen-label] * { font-family: 'Kaisei Decol','Noto Serif JP',serif !important; } html[data-font-pair="mono"] [data-screen-label], html[data-font-pair="mono"] [data-screen-label] * { font-family: 'JetBrains Mono','Noto Sans JP',monospace !important; } /* koma layout — home hero mini-koma */ html[data-koma="1x4"] .grid.grid-cols-2.gap-2, html[data-koma="1x4"] .grid.grid-cols-2.gap-3 { grid-template-columns: repeat(4, 1fr) !important; max-width: none !important; } html[data-koma="tall"] .grid.grid-cols-2.gap-2, html[data-koma="tall"] .grid.grid-cols-2.gap-3 { grid-template-columns: 1fr !important; max-width: 320px !important; } /* 4コマ panel の native アスペクトは Trickster tmpl_4koma の 1x4縦ストリップを分割した 928/288 (≈3.22:1)。 */ /* 1x4: 4パネルを横一列。狭い画面では縦積みに折り返す */ html[data-koma="1x4"] .sk-manga-page { max-width: 1040px !important; } html[data-koma="1x4"] .sk-manga-grid { grid-template-columns: repeat(4, 1fr) !important; } html[data-koma="1x4"] .sk-manga-panel { aspect-ratio: var(--panel-aspect, 928/288) !important; border-bottom: none !important; } html[data-koma="1x4"] .sk-manga-panel:not(:last-child) { border-right: 2px solid var(--ink) !important; } html[data-koma="1x4"] .sk-manga-panel:last-child { border-right: none !important; } @media (max-width: 720px) { html[data-koma="1x4"] .sk-manga-grid { grid-template-columns: 1fr !important; } html[data-koma="1x4"] .sk-manga-panel { border-right: none !important; } html[data-koma="1x4"] .sk-manga-panel:not(:last-child) { border-bottom: 2px solid var(--ink) !important; } } /* 2x2: 2列×2段 */ html[data-koma="2x2"] .sk-manga-page { max-width: 720px !important; } html[data-koma="2x2"] .sk-manga-grid { grid-template-columns: 1fr 1fr !important; } html[data-koma="2x2"] .sk-manga-panel { aspect-ratio: var(--panel-aspect, 928/288) !important; border-bottom: none !important; border-right: none !important; } html[data-koma="2x2"] .sk-manga-panel:nth-child(1), html[data-koma="2x2"] .sk-manga-panel:nth-child(2) { border-bottom: 2px solid var(--ink) !important; } html[data-koma="2x2"] .sk-manga-panel:nth-child(1), html[data-koma="2x2"] .sk-manga-panel:nth-child(3) { border-right: 2px solid var(--ink) !important; } @media (max-width: 560px) { html[data-koma="2x2"] .sk-manga-grid { grid-template-columns: 1fr !important; } html[data-koma="2x2"] .sk-manga-panel { border-right: none !important; } html[data-koma="2x2"] .sk-manga-panel:nth-child(3) { border-right: none !important; } } /* tall: 1列×4段(既定、横長帯をそのまま積む) */ html[data-koma="tall"] .sk-manga-page { max-width: 640px !important; } html[data-koma="tall"] .sk-manga-grid { grid-template-columns: 1fr !important; } html[data-koma="tall"] .sk-manga-panel { aspect-ratio: var(--panel-aspect, 928/288) !important; border-right: none !important; } html[data-koma="tall"] .sk-manga-panel:not(:last-child) { border-bottom: 2px solid var(--ink) !important; } html[data-koma="tall"] .sk-manga-panel:last-child { border-bottom: none !important; } `; document.head.appendChild(s); } function Shell() { useEffectShell(() => { injectSiteStyles(); applyDefaults(); }, []); const Comp = window.SketchApp; return Comp ? :
Loading SketchApp…
; } setTimeout(() => { ReactDOM.createRoot(document.getElementById("root")).render(); }, 50);