/*
 * base.css — 新デザイン（Claude Design v1）の共通スタイル。
 *
 * 出所: dc.html の helmet 442行（renewal/data/helmet-raw.css）。
 * 抽出方針と根拠は renewal/TK-BASE-PLAN.md を参照。
 *
 * ## 読み込み範囲 — 全ページではない
 *
 * functions.php の tektome_template_assets() で、**新デザインのテンプレートにだけ**
 * 割り当てる。グローバル enqueue（functions.php:352-357）には足さないこと。
 * 既存118ページは新デザインの部品を1つも使っておらず、載せても利得が無い一方で、
 * 要素セレクタが既存の見た目を壊す危険だけが乗るため。
 *
 * ## 元から落としたもの（戻さないこと）
 *
 *   helmet:46   nav > div { padding:0 20px !important }
 *               既存 header.php の .tk-nav__item ×3 と footer.php の
 *               .tk-footer__sitemap に !important で当たり、打ち消せない。
 *   helmet:313-317  .tk-lang 系5行
 *               .tk-lang a (0,1,1) が既存 nav.css:261 .tk-lang__link (0,1,0) に
 *               常に勝つ。読み込み順を変えても救えない。
 *   helmet:4    a { text-decoration:none; color:inherit }
 *               同ファイル :128 に後勝ちされる no-op。
 *   helmet:128-129  a / a:hover
 *               design-system.css:279-286 と同値。重複させない。
 *   helmet:281,284  @keyframes tk-bar と .tk-bar
 *               --tk-bar がどこにも宣言されておらず、利用箇所も0件の死にコード。
 *
 * ## 書き換えたもの
 *
 *   a:focus-visible を12セレクタの並びから外した（既存の素の a に当たるため）。
 *   footer 起点のセレクタを .tkb-footer 起点にした（新フッターのクラスに合わせる）。
 *
 * ## 既知の課題
 *
 *   @keyframes tk-scan が2回定義されている（横スキャンと縦スキャン）。
 *   後勝ちで縦が適用される。デザイナー確認待ち（TK-BASE-PLAN.md U6）。
 */

    *, *::before, *::after { box-sizing: border-box; }
    body { margin: 0; padding: 0; }
    button { font-family: inherit; border: none; cursor: pointer; }
    img { display: block; }

    /* Nav dropdown */


    /* Side colors — semantic: one accent per site area (tweakable) */
    .tk-tile-cta { color: #5156BE; }
    .tk-kcat { color: #5156BE; }
    .tk-klink-row { color: #5156BE; }
    .tk-chip-a { background: #ECECFC; color: #5156BE; }
    .tk-newshead { border-bottom-color: #101010; }
    .sc-sem .tk-sec-sol  { --acc:#0FAAC7; --acc-ink:#0F7C93; --acc-tint:#E6F6FB; }
    .sc-sem .tk-sec-case { --acc:#1DBF73; --acc-ink:#137A4E; --acc-tint:#E9F8F1; }
    .sc-sem .tk-sec-know { --acc:#E5A058; --acc-ink:#9A5C00; --acc-tint:#FFF5E6; }
    .sc-sem .tk-sec-co   { --acc:#E46292; --acc-ink:#B03A66; --acc-tint:#FCEBF1; }
    .sc-sem [class*="tk-sec-"] .tk-tile { background: var(--acc-tint); }
    .sc-sem [class*="tk-sec-"] .tk-tile:hover { background: #fff; border-color: var(--acc); }
    .sc-sem [class*="tk-sec-"] .tk-tile-cta { color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-chip-a { background: var(--acc-tint); color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-kcat { color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-klink-row { color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .ew { color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-btn-g { border-color: var(--acc); color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-btn-g:hover { background: var(--acc-tint); border-color: var(--acc); }
    .sc-sem [class*="tk-sec-"] .tk-link { color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-carobtn:hover { border-color: var(--acc); color: var(--acc-ink); }
    .sc-sem [class*="tk-sec-"] .tk-card-c:hover { border-color: var(--acc); }
    .sc-sem [class*="tk-sec-"] .tk-newshead { border-bottom-color: var(--acc); }
    /* Nav responsive: keep the row inside the content box */
    nav .tk-navbtn.tk-navmob { display: none; }
    @media (max-width: 999px) {
      nav .tk-navbtn.tk-navmob { display: inline-flex; }
    }
    .tk-mobpanel { position: absolute; top: 100%; left: 0; right: 0; background: #fff; border-bottom: 1px solid #EAEAEA; box-shadow: 0 24px 48px -24px rgba(16,16,16,0.28); opacity: 0; pointer-events: none; transform: translateY(-6px); transition: opacity 200ms cubic-bezier(.2,.8,.2,1), transform 200ms cubic-bezier(.2,.8,.2,1); z-index: 200; }
    .tk-mobpanel-open { opacity: 1; pointer-events: auto; transform: translateY(0); }

    /* Nav buttons */

    /* Buttons — one interaction vocabulary
       fill: darkens + lifts | outline: border & text turn purple | surface: purple border + shadow */
    /*
     * 🚨 ボタン系クラスは <a> にも当たる。
     *
     * プロトタイプは画面遷移がJSなので全部 <button>。<button> に下線は付かないので
     * 元のCSSは text-decoration を書いていない。WordPress 側は実URLがあるので
     * <a> で書いており、**そのままだとブラウザ既定の下線が出る**。
     * 2026-09-17 にオーナーが「ボタンに全部下線がついている」と指摘して判明。
     *
     * 個々のテンプレートで打ち消さず、ここでまとめて落とす。新しくボタンを
     * <a> で書いても自動的に正しくなる。
     */
    .tk-btn-p, .tk-btn-g, .tk-btn-t, .tk-btn-w,
    a.tk-btn-p, a.tk-btn-g, a.tk-btn-t, a.tk-btn-w { text-decoration: none; }

    .tk-btn-p {
      display: inline-flex; align-items: center; justify-content: center; gap: 8px;
      min-height: 44px; padding: 11px 22px; background: #5156BE; color: #fff;
      border-radius: 6px; font-size: 14px; font-weight: 500;
      transition: background 120ms cubic-bezier(.2,.8,.2,1), box-shadow 120ms cubic-bezier(.2,.8,.2,1);
      border: none; cursor: pointer; font-family: inherit;
    }
    .tk-btn-p:hover { background: #3D3EC9; box-shadow: 0 8px 20px -8px rgba(81,86,190,0.6); }
    .tk-btn-p:active { background: #33349F; box-shadow: none; }
    .tk-btn-g {
      display: inline-flex; align-items: center; justify-content: center; gap: 8px;
      min-height: 44px; padding: 11px 22px; background: #fff; color: #101010;
      border: 1px solid #C6C7E6; border-radius: 6px;
      font-size: 14px; font-weight: 500;
      transition: background 120ms cubic-bezier(.2,.8,.2,1), border-color 120ms cubic-bezier(.2,.8,.2,1), color 120ms cubic-bezier(.2,.8,.2,1);
      cursor: pointer; font-family: inherit;
    }
    .tk-btn-g:hover { background: #F3F3FC; border-color: #5156BE; color: #5156BE; box-shadow: 0 8px 20px -10px rgba(20,30,70,0.4); }
    .tk-btn-g:active { background: #E9E9F8; box-shadow: none; }

    /* Tinted variant — for use inside white cards */
    .tk-btn-t {
      display: inline-flex; align-items: center; justify-content: center; gap: 8px;
      min-height: 44px; padding: 11px 22px; background: #ECECFC; color: #3D3EC9;
      border: 1px solid #AAA6F0; border-radius: 6px;
      font-size: 14px; font-weight: 500;
      transition: background 120ms cubic-bezier(.2,.8,.2,1), border-color 120ms cubic-bezier(.2,.8,.2,1), box-shadow 120ms cubic-bezier(.2,.8,.2,1);
      cursor: pointer; font-family: inherit;
    }
    .tk-btn-t:hover { background: #DEDEF9; border-color: #5156BE; box-shadow: 0 8px 20px -10px rgba(81,86,190,0.5); }
    .tk-btn-t:active { background: #D3D3F5; box-shadow: none; }
    .tk-btn-t:focus-visible { outline: 3px solid rgba(81,86,190,0.25); outline-offset: 2px; }
    .tk-btn-gi {
      display: inline-flex; align-items: center; justify-content: center; gap: 8px;
      min-height: 44px; padding: 11px 22px; background: transparent; color: #fff;
      border: 1px solid rgba(255,255,255,0.28); border-radius: 6px;
      font-size: 14px; font-weight: 500;
      transition: background 120ms cubic-bezier(.2,.8,.2,1), border-color 120ms cubic-bezier(.2,.8,.2,1);
      cursor: pointer; font-family: inherit;
    }
    .tk-btn-gi:hover { background: rgba(255,255,255,0.18); border-color: #fff; color: #fff; }
    .tk-btn-gi:active { background: rgba(255,255,255,0.28); }

    /* On Arch Purple bands — white fill (primary) pairs with .tk-btn-gi (outline) */
    .tk-btn-w {
      display: inline-flex; align-items: center; justify-content: center; gap: 8px;
      min-height: 44px; padding: 11px 22px; background: #fff; color: #101010;
      border: 1px solid #fff; border-radius: 6px; font-size: 14px; font-weight: 600;
      transition: background 120ms cubic-bezier(.2,.8,.2,1), color 120ms cubic-bezier(.2,.8,.2,1), box-shadow 120ms cubic-bezier(.2,.8,.2,1);
      cursor: pointer; font-family: inherit; white-space: nowrap;
    }
    .tk-btn-w:hover { background: #ECECFC; color: #3D3EC9; box-shadow: 0 10px 26px -10px rgba(16,16,16,0.5); }
    .tk-btn-w:active { background: #DEDEF9; box-shadow: none; }
    .tk-btn-w:focus-visible { outline: 3px solid rgba(255,255,255,0.7); outline-offset: 2px; }

    /* Inline text links */
    .tk-link {
      display: inline-flex; align-items: center; gap: 6px;
      background: none; border: 0; padding: 0; cursor: pointer; font-family: inherit;
      color: #5156BE; font-weight: 600;
      text-decoration: underline; text-decoration-thickness: 1px;
      text-decoration-color: transparent; text-underline-offset: 4px;
      transition: color 120ms cubic-bezier(.2,.8,.2,1), text-decoration-color 120ms cubic-bezier(.2,.8,.2,1);
    }
    .tk-link:hover {
      color: #3D3EC9;
      text-decoration-thickness: 2px; text-decoration-color: currentColor;
    }
    .tk-link svg { transition: transform 150ms cubic-bezier(.2,.8,.2,1); }

    /*
     * 常時下線つきのテキストリンク（.tk-inlink）。
     *
     * .tk-link との違いは**休止時の見た目だけ** — こちらは薄い下線が最初から
     * 出ていて、.tk-link は下線を透明で持っておきホバーで出す。v3 が
     * トップの「Tektomeについて詳しく見る」だけこの形にしている（prototype 732）。
     *
     * 🚨 v3 のホバー指定は `style-hover="..."` という**プロトタイプ専用の属性**で
     *   CSS ではない。移植時に data-todo-hover に置き換えただけで実装されず、
     *   ホバーしても何も起きない状態だった（2026-09-19 オーナー指摘）。
     *   同じ形の未実装マーカーは `grep -rn data-todo-hover` で探せる。
     *
     * 色と下線の変化は v3 の指定どおり（どちらも #3D3EC9）。矢印の 4px スライドは
     * v3 には無いが、サイト内の他のテキストリンク（.tk-link）が全部やっている
     * 動きなので揃えた。**オーナーの指示は「他のページに合わせる」。**
     */
    .tk-inlink {
      display: inline-flex; align-items: center; gap: 8px;
      font-size: 15px; font-weight: 500; color: #5156DB;
      text-decoration: none;
      border-bottom: 1px solid rgba(81,86,219,0.3);
      padding-bottom: 3px;
      transition: color 120ms cubic-bezier(.2,.8,.2,1), border-color 120ms cubic-bezier(.2,.8,.2,1);
    }
    .tk-inlink:hover { color: #3D3EC9; border-bottom-color: #3D3EC9; }
    .tk-inlink svg { transition: transform 150ms cubic-bezier(.2,.8,.2,1); }
    .tk-inlink:hover svg { transform: translateX(4px); }

    /*
     * トップ「最新ニュース」の3行（.tk-newsrow / front-page.php）。
     *
     * .dd-item:hover は色＋2px下線を持っているが、この行のインライン style が
     * text-decoration:none と color:inherit を指定していて**インラインが勝つ**ため
     * 効いていなかった。オーナー指示で下線ではなく背景を敷く形にした（2026-09-19）。
     *
     * 背景色 #F5F5FA は v3 の .tk-megacard:hover と同じ値。行ホバーの地色として
     * 既に使われているので揃えた。
     *
     * 左右 12px は「地色を文字にぴったり付けない」ため。負のマージンで相殺して
     * いるので**文字の位置は動かない**。カードの内側余白が 20px あるので、
     * 12px なら枠からはみ出さない（20px を超える値にしないこと）。
     * 副作用として区切り線も左右 12px ずつ伸びる。
     *
     * ⚠️ 縦の 14px もここで持つこと。テンプレート側に padding:14px 0 の
     *   ショートハンドを戻すと、**左右 0 も一緒に指定されて 12px が消える**
     *   （インラインの勝ち）。一度それで地色が文字に張り付いた。
     *
     * ⚠️ セレクタを `.dd-item.tk-newsrow` にしてあるのも必要。`.dd-item` は
     *   このファイルの後ろのほうで padding:12px と width:100% を持っており、
     *   同じ詳細度（0,1,0）だと**後勝ちで .tk-newsrow が負ける**。width:100% が
     *   残ると負のマージンが幅に反映されず、行が左へ 12px ずれるだけで
     *   右側が 12px 足りない、という非対称になる。
     */
    .dd-item.tk-newsrow {
      width: auto;
      padding: 14px 12px;
      margin-left: -12px; margin-right: -12px;
      border-radius: 6px;
      transition: background 120ms cubic-bezier(.2,.8,.2,1);
    }
    .dd-item.tk-newsrow:hover { background: #F5F5FA; text-decoration: none; }
    .tk-link:hover svg, .tk-card-c:hover .tk-link svg { transform: translateX(4px); }
    .tk-card-c:hover .tk-link { color: #3D3EC9; text-decoration-thickness: 2px; text-decoration-color: currentColor; }
    .tk-link-b { min-height: 44px; }
    .dd-item { text-decoration: none; }

    /* Banner links — full-width clickable surfaces */
    /* Mega-menu feature block — whole tinted panel is the link */

    /*
     * 帯は v3 では <button>（下線なし）で、移植で <a> になった時点で
     * design-system.css の `a { text-decoration: underline }` を拾う。
     * PROGRESS.md の「ボタン全種に下線」と同じ型で、.dd-item（上）が同じ
     * 理由で同じ1行を持っている。
     *
     * 該当は3箇所（sections-data / sections-law / sections-bim）。
     * ⚠️ インラインで1枚ずつ消さないこと。law だけ `text-decoration:none;` を
     *   付けて他2枚が下線のまま残っていた（2026-09-19 まで）。
     * (0,1,0) 対 `a` の (0,0,1) なので読み込み順に関係なく勝つ。
     */
    .tk-banner {
      text-decoration: none;
      background: #E8EFFC; border: 1px solid #D6E2FA;
      transition: background 150ms cubic-bezier(.2,.8,.2,1), border-color 150ms cubic-bezier(.2,.8,.2,1), box-shadow 150ms cubic-bezier(.2,.8,.2,1);
    }
    .tk-banner:hover { background: #DEE9FB; border-color: #5156BE; box-shadow: 0 10px 28px -12px rgba(20,30,70,0.35); }

    /*
     * 帯全体がリンクの締めCTA（.tk-ctaband / front-page.php）。
     *
     * 紫グラデーションの上なので .tk-banner の淡色ホバーは使えない。押せることは
     * 中の白ボタン（.tk-btn-w）を光らせて示す。帯のどこに乗せても反応する。
     *
     * .tk-btn-w:hover と同じ値を使っているので、ボタン上に直接乗せても
     * 帯の端に乗せても**同じ見え方**になる。片方だけ変えないこと。
     */
    /*
     * text-decoration はクラス側に置くこと。帯の中身は <h2> と <p> で、
     * <a> に下線が付くと**中の見出しと本文まで下線が引かれる**（下線は子孫に
     * 引き継がれて描かれる）。2026-09-19 まで front-page.php がインラインで
     * 1箇所だけ打ち消しており、2枚目の帯を作るたびに同じ1行が要る状態だった。
     */
    /*
     * .tk-bandlink = 「帯まるごとがリンク」の**挙動だけ**。見た目（グラデーション・
     * 角丸・余白・列組み）は持たない。帯ごとに地色も余白も違うため。
     *
     * .tk-ctaband はこれに 600px 以下のレイアウト上書きを足したもの。あちらの
     * padding は `!important` で、front-page / platform の**インライン**指定に
     * 勝つために必要。ソリューション詳細の帯にはインラインが無く、独自の
     * `36px 28px`（sol-detail.css）を持っているので、.tk-ctaband を付けると
     * その余白が黙って 44px に変わる。だから新しい帯は .tk-bandlink だけを使う。
     */
    .tk-bandlink, .tk-ctaband { text-decoration: none; transition: box-shadow 150ms cubic-bezier(.2,.8,.2,1); }
    .tk-ctaband { display: grid; }
    .tk-bandlink:hover, .tk-ctaband:hover { box-shadow: 0 16px 40px -18px rgba(20,30,70,0.5); }
    .tk-bandlink .tk-btn-w, .tk-ctaband .tk-btn-w {
      transition: background 120ms cubic-bezier(.2,.8,.2,1), color 120ms cubic-bezier(.2,.8,.2,1), box-shadow 120ms cubic-bezier(.2,.8,.2,1);
    }
    .tk-bandlink:hover .tk-btn-w, .tk-ctaband:hover .tk-btn-w {
      background: #ECECFC; color: #3D3EC9;
      box-shadow: 0 10px 26px -10px rgba(16,16,16,0.5);
    }
    .tk-bandlink:focus-visible, .tk-ctaband:focus-visible { outline: 3px solid rgba(255,255,255,0.7); outline-offset: 3px; border-radius: 12px; }

    /*
     * 狭い画面では1列に畳む。
     *
     * v3 は `1fr auto` をインラインで持つだけでブレークポイントが無く、375px では
     * 算出値が **30px / 186px** になる。ボタン側が white-space:nowrap で 186px から
     * 縮まないぶん、見出しの列が 30px に潰れて「各種お問い合わせはこちら」が
     * 1行1文字で落ちていた（2026-09-19 実測。帯をリンク化する前からの症状）。
     *
     * 左右の余白も 56px → 28px。335px の帯で 56px は幅の 1/3 を余白に使うことになる。
     * インラインに勝つ必要があるので !important。
     */
    @media (max-width: 600px) {
      .tk-ctaband {
        grid-template-columns: minmax(0, 1fr) !important;
        padding: 44px 28px !important;
      }
    }
    .tk-banner:active { background: #D3E1F8; box-shadow: none; }

    /*
     * 帯は `1fr auto` をインラインで持つだけで、v3 にブレークポイントが無い。
     * 狭い画面では右の「詳しく見る›」が nowrap で縮まず、本文側の列が潰れる。
     * オーナー指示（2026-09-19「詳しく見る＞はリード文章の下に置いてほしい」）＝
     * 1列に畳むこと。インラインに勝つ必要があるので !important。
     *
     * 以前は sol-detail.css に .tk-sold スコープで置いてあり、「base.css に
     * 置くと workspace / platform が巻き添えになる」と注記していた。
     * その巻き添えこそ今回の指示なので、ここへ移した。余白の詰めだけは
     * ソリューション詳細に固有なので sol-detail.css に残してある。
     */
    @media (max-width: 600px) {
      .tk-banner { grid-template-columns: minmax(0, 1fr) !important; }
    }

    /* Focus — keyboard users are first-class */
    .tk-btn-p:focus-visible, .tk-btn-g:focus-visible, .tk-btn-gi:focus-visible, .tk-link:focus-visible,
    .tk-banner:focus-visible, .tk-card-c:focus-visible, a.tk-card:focus-visible, .dd-item:focus-visible, .tk-navbtn:focus-visible,
    .tk-tab:focus-visible, .tk-fchip:focus-visible, .ws-tab:focus-visible {
      outline: 3px solid rgba(81,86,190,0.25); outline-offset: 2px; border-radius: 6px;
    }

    /* Filter chips */
    .tk-fchip {
      min-height: 44px; padding: 6px 16px; font-size: 13px; font-family: inherit;
      border: 1px solid #DADAE0; border-radius: 999px;
      background: #fff; color: #3A3A45; cursor: pointer;
      transition: all 150ms ease;
    }
    .tk-fchip:hover { border-color: #5156BE; color: #5156BE; }
    .tk-fchip[data-active="true"] {
      background: #5156BE; border-color: #5156BE; color: #fff;
    }

    /* Knowledge center hub */
    .kc-thumb { height: 132px; display: flex; align-items: flex-end; justify-content: space-between; padding: 14px 18px; overflow: hidden; }
    .kc-thumb[data-t="1"] { background: #5156BE; }
    .kc-thumb[data-t="2"] { background: #AAA6F0; }
    .kc-thumb[data-t="3"] { background: #CECDF5; }
    .kc-thumb[data-t="4"] { background: #3D3EC9; }
    .kc-wm { font-family: 'Noto Sans Mono', monospace; font-size: 30px; font-weight: 300; letter-spacing: -0.02em; line-height: 1; color: rgba(255,255,255,0.66); }
    .kc-num { font-family: 'Noto Sans Mono', monospace; font-size: 11px; letter-spacing: 0.14em; color: rgba(255,255,255,0.9); }
    .kc-thumb[data-t="2"] .kc-num, .kc-thumb[data-t="3"] .kc-num { color: #3A3A45; }
    .kc-thumb[data-t="2"] .kc-wm, .kc-thumb[data-t="3"] .kc-wm { color: rgba(16,16,16,0.34); }
    .kc-badge { display: inline-flex; align-items: center; gap: 6px; font-family: 'Noto Sans Mono', monospace; font-size: 10.5px; letter-spacing: 0.14em; color: #5156BE; background: #ECECFC; border-radius: 999px; padding: 4px 10px; }
    .kc-card { transition: border-color 150ms cubic-bezier(0.2,0.8,0.2,1), transform 150ms cubic-bezier(0.2,0.8,0.2,1); }
    .kc-card:hover { border-color: #5156BE; transform: translateY(-3px); }
    .kc-bar { position: sticky; top: 64px; z-index: 20; background: #fff; border-top: 1px solid #EAEAEA; border-bottom: 1px solid #EAEAEA; }
    .kc-jump { display: inline-flex; align-items: center; min-height: 46px; padding: 0 14px; font-size: 13px; color: #3A3A45; text-decoration: none; white-space: nowrap; border-bottom: 2px solid transparent; }
    .kc-jump:hover { color: #5156BE; border-bottom-color: #5156BE; }
    .kc-anchor { scroll-margin-top: 120px; }
    .kc-row { display: block; width: 100%; text-align: left; background: none; border: 0; border-top: 1px solid #EAEAEA; padding: 16px 0; font-family: inherit; cursor: pointer; }
    .kc-rt { font-size: 14.5px; font-weight: 600; color: #101010; line-height: 1.6; margin-bottom: 6px; text-wrap: pretty; transition: color 120ms ease; }
    .kc-rd { font-size: 13px; line-height: 1.75; color: #3A3A45; margin-bottom: 8px; text-wrap: pretty; }
    .kc-rd:empty { display: none; }
    .kc-rm { display: flex; gap: 10px; font-family: 'Noto Sans Mono', monospace; font-size: 11px; color: #7A7A85; }
    .kc-row:hover .kc-rt, .kc-mrow:hover .kc-rt { color: #5156BE; }
    .kc-mrow { display: grid; grid-template-columns: 108px minmax(0,1fr); gap: 18px; width: 100%; text-align: left; background: none; border: 0; border-top: 1px solid #EAEAEA; padding: 20px 0; font-family: inherit; cursor: pointer; align-items: start; }
    .kc-mini { height: 84px; display: flex; align-items: flex-end; padding: 10px; border-radius: 4px; }
    .kc-mini[data-t="1"] { background: #5156BE; }
    .kc-mini[data-t="2"] { background: #AAA6F0; }
    .kc-mini[data-t="3"] { background: #CECDF5; }
    .kc-mini[data-t="4"] { background: #3D3EC9; }
    .kc-mini[data-t="2"] .kc-wm, .kc-mini[data-t="3"] .kc-wm { color: rgba(16,16,16,0.4); }
    .kc-promo { display: flex; flex-direction: column; align-items: flex-start; background: #ECECFC; border-radius: 8px; padding: 28px; cursor: pointer; transition: background 150ms ease; }
    .kc-promo:hover { background: #E3E3FA; }
    .kc-band { display: grid; grid-template-columns: minmax(0,300px) minmax(0,1fr); background: #ECECFC; border-radius: 8px; overflow: hidden; cursor: pointer; transition: background 150ms ease; }
    .kc-band:hover { background: #E3E3FA; }
    .kc-rank { display: flex; align-items: baseline; gap: 12px; width: 100%; text-align: left; background: none; border: 0; padding: 11px 0; font-family: inherit; font-size: 13.5px; line-height: 1.6; color: #101010; cursor: pointer; border-bottom: 1px solid #EAEAEA; }
    .kc-rank:hover { color: #5156BE; }
    .kc-rnum { font-family: 'Noto Sans Mono', monospace; font-size: 11px; color: #AAA6F0; flex: none; }
    .kc-nrow { display: grid; grid-template-columns: 96px 108px minmax(0,1fr); gap: 20px; align-items: center; width: 100%; text-align: left; background: none; border: 0; border-top: 1px solid #EAEAEA; padding: 18px 0; font-family: inherit; cursor: pointer; }
    .kc-nrow:hover .kc-rt { color: #5156BE; }
    .kc-nrow .kc-badge { justify-self: start; }
    .kc-ndate { font-family: 'Noto Sans Mono', monospace; font-size: 12px; color: #7A7A85; }
    @media (max-width: 700px) { .kc-nrow { grid-template-columns: minmax(0,1fr); gap: 8px; } }
    .kc-arrow { width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #DADAE0; border-radius: 999px; background: #fff; color: #101010; cursor: pointer; transition: all 150ms ease; }
    .kc-arrow:hover { border-color: #5156BE; color: #5156BE; }
    .kc-entry { display: flex; flex-direction: column; gap: 10px; padding: 26px; background: #fff; border: 1px solid #EAEAEA; border-radius: 8px; text-align: left; font-family: inherit; cursor: pointer; transition: border-color 150ms ease, background 150ms ease; text-decoration: none; }
    .kc-entry:hover { border-color: #5156BE; background: #FAFAFE; }
    @media (max-width: 1000px) {
      .kc-shelf { grid-template-columns: minmax(0,1fr) !important; gap: 0 !important; }
      .kc-promo { margin-top: 28px; }
      .kc-entries { grid-template-columns: repeat(2, minmax(0,1fr)) !important; }
    }
    @media (max-width: 900px) {
      .kc-grid { grid-template-columns: repeat(2, minmax(0,1fr)) !important; }
      .kc-feat, .kc-mgrid, .kc-band { grid-template-columns: minmax(0,1fr) !important; }
      .kc-feat { gap: 44px !important; }
    }
    @media (max-width: 620px) {
      .kc-grid, .kc-entries { grid-template-columns: minmax(0,1fr) !important; }
      .kc-mrow { grid-template-columns: 76px minmax(0,1fr); }
    }

    /* Segmented control */
    .tk-seg-wrap { display: inline-flex; background: #F4F4F4; border: 1px solid #EAEAEA; border-radius: 9px; padding: 4px; }
    .tk-seg { padding: 9px 24px; font-size: 14px; font-weight: 500; font-family: inherit; border: none; background: transparent; color: #7A7A85; border-radius: 6px; cursor: pointer; transition: background 150ms ease, color 150ms ease; }
    .tk-seg:hover { color: #101010; }
    .tk-seg[data-active="true"] { background: #fff; color: #101010; box-shadow: 0 1px 3px rgba(16,16,16,0.1); }

    /* Cards */
    /*
     * 🚨 カードは <a> で書かれることが多い（v3 は全部 <button>）。
     *   design-system.css:286 の `a { text-decoration: underline }` を拾うので、
     *   ここで落とす。.tk-btn-* / .dd-item / .tk-banner / .tk-ctaband と同じ型で、
     *   オーナー指摘（2026-09-19「カード形式のリンクの下線を全部消して」）の本体。
     *
     *   対象は9テンプレート・17URL・19インスタンス。.tk-card-c / .tk-soli__card /
     *   .tk-sold__backcard / __prodcard / __othercard は全て .tk-card と併記
     *   されているので、この1行で全部片付く。
     *   ⚠️ 個々のテンプレートにインラインで書き足さないこと。
     */
    .tk-card {
      text-decoration: none;
      background: #fff; border: 1px solid #EAEAEA; border-radius: 8px;
      transition: box-shadow 200ms cubic-bezier(.2,.8,.2,1), border-color 200ms cubic-bezier(.2,.8,.2,1);
    }
    /*
     * 🚨 押せるカードは .tk-card だけでは**ホバーしても何も起きない**。
     *   枠色と影は .tk-card-c の仕事で、.tk-card 単体には一切ない。
     *   オーナー指摘（2026-09-19「マウスオーバーした時のインタラクションが
     *   異なる」・指摘表157行）は比較ページの話だったが、数えると
     *   **`<a class="tk-card">` が10個・4テンプレート**あった
     *   （platform 3 / vs-general 3 / dataspace 2 / workspace 2）。
     *
     *   `<div class="tk-card">` 34個は静的なカードで、無反応が正しい。
     *   だから .tk-card に足さず **a.tk-card** で押せるものだけを拾う。
     *   ⚠️ 10箇所に tk-card-c を手で足さないこと（1つ足し忘れても気づけない）。
     */
    .tk-card-c, button.tk-card, a.tk-card { cursor: pointer; }
    .tk-card-c:hover, button.tk-card:hover, a.tk-card:hover { border-color: #5156BE; box-shadow: 0 10px 28px -12px rgba(20,30,70,0.35); }
    .tk-card-c:active, button.tk-card:active, a.tk-card:active { box-shadow: none; }
    /* .tk-card と同じ理由。front-page.php のタイルが <a> なので下線を落とす。 */
    .tk-tile { text-decoration: none; }
    .tk-tile { background:#F1F5FE; border:1px solid transparent; border-radius:8px; cursor:pointer; transition: background 200ms cubic-bezier(.2,.8,.2,1), border-color 200ms cubic-bezier(.2,.8,.2,1); }
    .tk-tile:hover { background:#fff; border-color:#5156BE; }
    .tk-tile:hover .tk-tile-a { transform: translateX(4px); }
    .tk-tile-a { transition: transform 150ms cubic-bezier(.2,.8,.2,1); }
    .tk-carobtn { width:44px; height:44px; display:inline-flex; align-items:center; justify-content:center; background:#fff; border:1px solid #EAEAEA; border-radius:6px; color:#3A3A45; transition: background 120ms, border-color 120ms, color 120ms; }
    .tk-carobtn:hover { background:#F4F4F4; border-color:#5156BE; color:#5156BE; }
    .tk-marquee { overflow: hidden; position: relative; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
    .tk-marquee-track { display: flex; gap: 48px; width: max-content; animation: tk-marq 34s linear infinite; }
    @keyframes tk-planshift { from { transform: translate3d(0,0,0); } to { transform: translate3d(-80px,0,0); } }
    @keyframes tk-knode { 0%,100% { opacity:.3; } 50% { opacity:1; } }
    @keyframes tk-klink { from { stroke-dashoffset: 900; } to { stroke-dashoffset: 0; } }
    .tk-planshift { animation: tk-planshift 46s linear infinite alternate; }
    .tk-knode { animation: tk-knode 5s ease-in-out infinite; }
    .tk-klink { stroke-dasharray: 900; animation: tk-klink 3s cubic-bezier(.2,.8,.2,1) both; }
    @keyframes tk-scan { 0% { transform: translateX(0); opacity:0; } 8% { opacity:.85; } 92% { opacity:.85; } 100% { transform: translateX(1180px); opacity:0; } }
    @keyframes tk-roomglow { 0%,100% { opacity:.18; } 50% { opacity:.6; } }
    @keyframes tk-rise { from { opacity:0; transform: translateY(8px); } to { opacity:1; transform: translateY(0); } }
    @keyframes tk-orb { 0%,100% { transform: translate3d(0,0,0) scale(1); } 50% { transform: translate3d(-24px,-18px,0) scale(1.08); } }
    .tk-scan { animation: tk-scan 9s cubic-bezier(.45,0,.55,1) infinite; }
    .tk-roomglow { animation: tk-roomglow 7s ease-in-out infinite; }
    .tk-rise { animation: tk-rise 700ms cubic-bezier(.2,.8,.2,1) both; }
    .tk-orb { animation: tk-orb 18s ease-in-out infinite; }
    @keyframes tk-float2 { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
    @keyframes tk-cardin { from { opacity:0; transform: translateY(14px) scale(.985); } to { opacity:1; transform: translateY(0) scale(1); } }
    .tk-hcard { animation: tk-cardin 760ms cubic-bezier(.2,.8,.2,1) both; }
    .tk-hcard-in { animation: tk-float2 8s ease-in-out infinite; }
    .tk-hero-cta { box-shadow: 0 14px 34px -14px rgba(81,86,219,0.7); }
    .tk-hero-cta:hover { box-shadow: 0 18px 40px -14px rgba(61,62,201,0.75); }
    .tk-marquee:hover .tk-marquee-track { animation-play-state: paused; }
    @keyframes tk-marq { from { transform: translateX(0); } to { transform: translateX(calc(-50% - 24px)); } }
    @media (prefers-reduced-motion: reduce) { .tk-marquee-track { animation: none; } }

    /* Eyebrow */
    .ew {
      font-family: 'Noto Sans Mono', monospace;
      font-size: 11px; letter-spacing: 0.18em;
      color: #5156BE;
    }

    /* Dropdown items */
    .dd-item {
      display: flex; align-items: flex-start; gap: 10px; padding: 12px; min-height: 44px;
      border-radius: 6px; color: #3A3A45; font-size: 13px; font-weight: 500;
      transition: color 120ms; text-align: left; background: transparent;
      border: none; cursor: pointer; font-family: inherit; width: 100%;
    }
    .dd-item:hover { color: #5156BE; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 4px; }
    .tkb-footer .dd-item { transition: color 120ms cubic-bezier(0.2,0.8,0.2,1); min-height: 0; padding: 3px 0; line-height: 1.65; align-items: center; }
    .tkb-footer .dd-item[style*="13px"] { padding-left: 13px; }
    .tkb-footer .dd-item:hover { color: #5156BE !important; text-decoration: none; }
    .tkb-footer a:hover { color: #5156BE; }

    /* Language switch */

    /*
     * 汎用テキストページの見出し枠（template-parts/v1-page-head.php）。
     * 寸法は Contact 画面のヒーロー（prototype 7101-7106）そのまま。
     * 他の v3 ページはインライン style で同じ値を持っているが、この枠は
     * partial で使い回すのでクラスにしてある。
     */
    .v1-pagehead { padding: 72px 0 56px; background: #fff; }
    .v1-pagehead .tk-crumb { margin-bottom: 16px; }
    .v1-pagehead__title { font-weight: 300; font-size: clamp(25px, 2.9vw, 36px); line-height: 1.25; letter-spacing: -0.025em; margin: 0; }
    .v1-pagehead__lead { font-size: 16px; line-height: 1.7; color: #3A3A45; margin: 18px 0 0; max-width: 780px; text-wrap: pretty; }

    /* Breadcrumb */
    .tk-crumb { display: flex; align-items: center; gap: 8px; font-family: 'Noto Sans Mono', monospace; font-size: 11px; letter-spacing: 0.08em; color: #7A7A85; flex-wrap: wrap; }
    /*
     * プロトタイプはパンくずを <button> で書いている（画面遷移がJSのため）。
     * WordPress 側は実URLがあるので <a> で書く。**両方に同じ見た目を当てること。**
     * a を足さないと、ブラウザ既定の下線が出たままになり、ホバーで太くなる
     * 設計（下線色 transparent → currentColor）が効かない。
     * 2026-09-17 実測で trust-security / vs-general / knowledge-center の3本が
     * この状態だった。renewal/PHASE2-SPEC.md §9 が先に警告していたもの。
     */
    .tk-crumb button,
    .tk-crumb a { background: none; border: 0; padding: 4px 0; font-family: inherit; font-size: inherit; letter-spacing: inherit; color: #5156BE; cursor: pointer; text-decoration: underline; text-decoration-color: transparent; text-decoration-thickness: 1px; text-underline-offset: 4px; transition: color 120ms, text-decoration-color 120ms; }
    .tk-crumb button:hover,
    .tk-crumb a:hover { color: #3D3EC9; text-decoration-color: currentColor; text-decoration-thickness: 2px; }
    .tk-crumb span[aria-current] { color: #101010; }
    .tk-crumb .sep { color: #C7C7D0; }

    /* Mega-menu row list */

    /* Tabs */
    .tk-tab { padding: 7px 15px; background: transparent; color: #7A7A85; font-size: 14px; font-weight: 500; border-radius: 6px; border: none; cursor: pointer; font-family: inherit; transition: background 120ms, color 120ms; white-space: nowrap; }
    .tk-tab:hover { background: #F4F4F4; color: #101010; }
    .tk-tab[data-active="true"] { background: #ECECFC; color: #5156BE; }

    /* Page transition */
    .tk-pg { animation: tk-in 220ms cubic-bezier(.2,.8,.2,1); }
    @keyframes tk-in { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: translateY(0); } }

    /* Checklist items */
    .ck { display: flex; align-items: center; gap: 10px; font-size: 14px; color: #3A3A45; }

    /* WorkSpace tabs */
    .ws-tab {
      display: flex; align-items: center; gap: 11px; width: 100%; text-align: left;
      background: transparent; border: 1px solid #EAEAEA; border-radius: 8px;
      padding: 14px 16px; font-family: inherit; font-size: 14px; color: #3A3A45;
      cursor: pointer; transition: background 120ms, border-color 120ms, color 120ms;
    }
    .ws-tab:hover { background: #F4F4F4; }
    .ws-tab[data-active="true"] { background: #ECECFC; border-color: #5156BE; color: #101010; font-weight: 600; }
    .ws-dot { width: 8px; height: 8px; border-radius: 999px; background: #C7C7D0; flex-shrink: 0; transition: background 120ms; }
    .ws-tab[data-active="true"] .ws-dot { background: #5156BE; }
    .ws-fade { animation: tk-in 240ms cubic-bezier(.2,.8,.2,1); }

    /* DataSpace product-UI walkthrough */
    .ds-step { display:flex; gap:16px; width:100%; text-align:left; background:#fff; border:1px solid #EAEAEA; border-radius:10px; padding:18px 20px; cursor:pointer; font-family:inherit; transition:background 160ms, border-color 160ms, box-shadow 160ms; align-items:flex-start; }
    .ds-step:hover { background:#F4F4F4; }
    .ds-step[data-active="true"] { background:#ECECFC; border-color:#5156BE; box-shadow:0 10px 26px -12px rgba(81,86,190,0.45); }
    .ds-num { font-family:'Noto Sans Mono',monospace; font-size:13px; font-weight:500; color:#A6A6B0; letter-spacing:0.04em; line-height:1; padding-top:3px; flex-shrink:0; }
    .ds-step[data-active="true"] .ds-num { color:#5156BE; }
    .bw { background:#fff; border:1px solid #E2E6EE; border-radius:12px; overflow:hidden; box-shadow:0 34px 80px -38px rgba(20,30,70,0.5); }
    .bw-bar { display:flex; align-items:center; gap:14px; padding:11px 15px; background:#F4F6FA; border-bottom:1px solid #E8EBF2; }
    .bw-dot { width:11px; height:11px; border-radius:50%; }
    .bw-url { flex:1; background:#fff; border:1px solid #E4E8F0; border-radius:6px; padding:5px 12px; font-family:'Noto Sans Mono',monospace; font-size:11px; color:#8A8A95; letter-spacing:0.02em; }
    .app-ico { width:36px; height:36px; border-radius:8px; display:flex; align-items:center; justify-content:center; color:#9A9AA2; }
    .app-ico[data-active="true"] { background:#ECECFC; color:#5156BE; }
    .src-row { display:flex; align-items:center; gap:14px; padding:14px 16px; border:1px solid #EDEFF4; border-radius:9px; background:#fff; }
    .src-row.new { border-color:#5156BE; background:#F7F7FE; }
    .pill-ok { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:600; color:#1F8A5B; background:#E7F5EE; border-radius:999px; padding:4px 11px; white-space:nowrap; }
    .pill-sync { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:600; color:#5156BE; background:#ECECFC; border-radius:999px; padding:4px 11px; white-space:nowrap; }
    .gnode { position:absolute; transform:translate(-50%,-50%); background:#fff; border:1.5px solid #C9D2EA; border-radius:8px; padding:6px 11px; font-size:11.5px; font-weight:500; color:#2B3A66; white-space:nowrap; box-shadow:0 5px 14px -7px rgba(20,30,70,0.3); }
    .gnode.acc { background:#5156BE; border-color:#5156BE; color:#fff; box-shadow:0 10px 24px -8px rgba(81,86,190,0.55); }
    .gnode.sky { background:#E8EFFC; border-color:#C9D7F4; color:#3A4A7A; }

    /* FAQ accordion */
    .faq-d { border-bottom:1px solid #EAEAEA; }
    .faq-d summary { list-style:none; cursor:pointer; padding:22px 24px; display:flex; justify-content:space-between; align-items:center; gap:16px; font-size:15px; font-weight:500; color:#101010; }
    .faq-d summary::-webkit-details-marker { display:none; }
    .faq-d summary:hover { color:#5156BE; }
    .faq-d[open] summary { color:#5156BE; }
    .faq-chev { flex-shrink:0; transition:transform 200ms cubic-bezier(.2,.8,.2,1); }
    .faq-d[open] .faq-chev { transform:rotate(180deg); }
    .faq-ans { padding:0 24px 24px; font-size:14.5px; line-height:1.78; color:#3A3A45; max-width:860px; }

    /* Section wrappers */
    /*
     * 🚨 **width:100% は飾りではない。消すと4ページのヒーローが潰れる。**
     *
     * .sec-w は flex / grid の子になることがある（製品3ページと /services/ の
     * ヒーローが `display:flex; flex-direction:column` の section）。
     * そこでは **`margin:0 auto` が交差軸の auto マージンとして働き、
     * align-items:stretch を無効にする**ので、中身幅まで縮む。
     * 実測（2026-09-24・1440px）:
     *   /products/tektome/      840px と 757px（本来1200px）
     *   /products/tektome/ai-agent/  785px と 758px
     *   /services/              638px
     * この結果 /products/tektome/ と /ai-agent/ の**ヒーロー画像の枠が
     * 1080px 指定なのに 677px** しか無く、画面写真が小さく見えていた
     * （オーナー指摘）。1920px にしても 677px のままなのが見分け方。
     *
     * ⚠️ **v3 プロトタイプも同じ（あちらの .sec-w にも width が無い）。**
     *    つまりこれは移植ミスではなく、v3 から持っている不具合。直すと v3 とは
     *    見た目が変わるが、書いた人の意図（max-width:1080px）はこちらが正。
     *
     * 通常フローのブロック要素には width:100% は無影響なので、
     * 残り169箇所の .sec-w は1pxも動かない（前後比較で実測）。
     */
    .sec-w { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 40px; }

    /*
     * 狭い画面で左右の余白を 40px → 20px に詰める。
     *
     * ⚠️ v3 には無い指定（プロトタイプの .sec-w は 40px 固定で、横幅の
     *    ブレークポイントを1つも持たない）。**意図的に v3 から外している。**
     *
     * 375px では左右 40px ＝ 合計 80px が画面幅の 21% を占め、本文の箱が
     * 295px しか残らない。これが「カード内寸 61px」「本文が 1行5文字」といった
     * 潰れの土台になっていた（2026-09-19 実測、オーナー指示で変更）。
     * 20px にすると本文の箱は 295px → 335px（+13.6%）になる。
     *
     * .tk-gutter は .sec-w を使わずインラインで同じ 40px ガターを作っている
     * 7箇所（front-page のヒーロー／A-201帯／CTA帯、platform・workspace・
     * dataspace・innovation の CTA帯）に付けるための掴み。**片方だけ縮めると
     * ヒーローだけ 20px 内側にずれる**ので、必ず一緒に動かすこと。
     * インライン style に勝つ必要があるのでそちらだけ !important。
     *
     * 601px 以上は 40px のまま。デスクトップ・タブレットは変えていない。
     */
    @media (max-width: 600px) {
      .sec-w { padding-left: 20px; padding-right: 20px; }
      .tk-gutter { padding-left: 20px !important; padding-right: 20px !important; }

      /*
       * 🚫 **直さないと決めた箇所（オーナー判断 2026-09-19）。触らないこと。**
       *
       * /products/tektome/intelligence-platform/ の .ds-pane 内 .src-row は
       * アイコン38px＋本文＋「アップロード済み」バッジの3点並び。375px で
       * 本文の列が 19px に潰れ「現場写真・スキャン画像」が切れる。
       *
       * **この .ds-pane は後日まるごと画像に差し替える予定**なので、CSSで
       * 直す意味がない。検査ツールに引っかかっても、これは既知・放置。
       *
       * 参考（画像化しないことになった場合のために残す）。効かなかった手:
       *   .src-row { flex-wrap: wrap }  → 本文側の flex:1 は flex-basis:0 を
       *     含み幅を要求しないので、折り返しのきっかけにならない
       *   .pill-ok { white-space: normal } → バッジを縮めても本文は広がらない
       *   効くのは本文列に min-width / flex-basis を与えること。ただし
       *   .src-row の中間子を位置で狙うので、テンプレート側にクラスが要る。
       */
    }
    .sec-sky { background: #E8EFFC; }
    .sec-lt { background: #F4F4F4; }

    /* Intelligence loop ring */
    @keyframes tk-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

    /* Hero visual */
    @keyframes tk-scan { 0% { top: 8%; opacity: 0; } 12% { opacity: 1; } 88% { opacity: 1; } 100% { top: 92%; opacity: 0; } }
    @keyframes tk-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
    @keyframes tk-pulse { 0%,100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.45); opacity: 0.35; } }
    .hero-pin { position: absolute; width: 11px; height: 11px; border-radius: 50%; }
    .hero-pin::after { content: ''; position: absolute; inset: -5px; border-radius: 50%; border: 1.5px solid currentColor; animation: tk-pulse 2.6s ease-in-out infinite; }
    .loop-node {
      position: absolute; transform: translate(-50%,-50%);
      background: #fff; border: 1px solid #DADAE0; border-radius: 999px;
      padding: 7px 14px; box-shadow: 0 2px 12px rgba(16,16,16,0.08);
      display: flex; align-items: center; gap: 7px; white-space: nowrap;
      font-size: 12px; font-weight: 600; color: #101010;
    }
    .loop-num { font-family: 'Noto Sans Mono', monospace; font-size: 10px; letter-spacing: 0.06em; color: #5156BE; }
    @keyframes tkStep { 0%, 72%, 100% { background:#ECECFC; color:#5156BE; } 12%, 26% { background:#5156BE; color:#fff; } }
    .step-num { transition: background 320ms cubic-bezier(.2,.8,.2,1), color 320ms cubic-bezier(.2,.8,.2,1), border-color 320ms cubic-bezier(.2,.8,.2,1), box-shadow 320ms cubic-bezier(.2,.8,.2,1); }
    .step-num.lit { background: #5156BE !important; color: #fff !important; border-color: #5156BE !important; box-shadow: 0 0 0 7px rgba(81,86,219,0.14); }
    @keyframes tkDot { 0%, 80%, 100% { opacity: 0.25; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-2px); } }
    .tk-typing { display:flex; align-items:center; gap:4px; }
    .tk-typing span { width:4px; height:4px; border-radius:50%; background:#5156BE; animation: tkDot 1.3s ease-in-out infinite; }
    @keyframes tk-lawin { from { opacity:0; transform: translateY(10px); } to { opacity:1; transform: translateY(0); } }
    /*
     * 🚨 段差（animation-delay）が無いと**吹き出しが全部同時に出る**。
     *   会話が順に現れる演出が一括フェードインになっていた
     *   （オーナー指摘 2026-09-19・指摘表113/120行）。
     *   順番はマークアップ側が style="--tk-i:1" で渡す。.sol-pulse と同じ方式で、
     *   インライン style だが animation ではないのでメディアクエリが勝つ。
     */
    .law-in { animation: tk-lawin 420ms cubic-bezier(.2,.8,.2,1) calc(var(--tk-i, 0) * 260ms) both; }
    @keyframes tk-flowa { 0% { transform: translateY(0); opacity:0; } 18% { opacity:1; } 78% { opacity:1; } 100% { transform: translateY(26px); opacity:0; } }
    @keyframes tk-flowb { 0% { transform: translateY(0); opacity:0; } 18% { opacity:1; } 78% { opacity:1; } 100% { transform: translateY(24px); opacity:0; } }
    .tk-flowa { animation: tk-flowa 1.9s cubic-bezier(.4,0,.6,1) infinite; }
    .tk-flowb { animation: tk-flowb 1.9s cubic-bezier(.4,0,.6,1) infinite; animation-delay: .55s; }
    @media (prefers-reduced-motion: reduce) { .tk-flowa, .tk-flowb { animation: none; } }
    @media (prefers-reduced-motion: reduce) { .law-in { animation: none; } }
    @keyframes tk-appflow { from { transform: translateY(0); } to { transform: translateY(-50%); } }
    @keyframes tk-dxslot { 0% { opacity: 0; transform: translateY(5px); } 4%, 29% { opacity: 1; transform: none; } 33%, 100% { opacity: 0; transform: none; } }
    @keyframes tk-dxhl { 0% { opacity: 0; } 4%, 29% { opacity: 1; } 33%, 100% { opacity: 0; } }
    .tk-dxs { animation: tk-dxslot 13.5s cubic-bezier(.2,.8,.2,1) infinite; }
    .tk-dxh { animation: tk-dxhl 13.5s cubic-bezier(.2,.8,.2,1) infinite; }
    .tk-dxp2 { animation-delay: 4.5s; }
    .tk-dxp3 { animation-delay: 9s; }
    @media (prefers-reduced-motion: reduce) { .tk-dxs, .tk-dxh { animation: none; } .tk-dxp2, .tk-dxp3 { opacity: 0; } }
    .tk-appflow { animation: tk-appflow 30s linear infinite; }
    @media (prefers-reduced-motion: reduce) { .tk-appflow { animation: none; } }
    .tk-typing span:nth-child(2) { animation-delay: 0.18s; }

/* ============================================================
   v1 追加分 — プロトタイプの helmet には無く、WordPress 実装のために足したもの
   仕様と根拠: renewal/TK-UI-SPEC.md §5-C / §5-D
   ============================================================ */

/*
 * パネルの表示/非表示は el.hidden で行う。
 * v1のパネルはインラインで display:flex を持つ（screens/platform.html の
 * .ws-fade 6件など）ため、!important が無いと hidden が効かない。
 */
[hidden] { display: none !important; }

/*
 * スクリーンリーダー専用テキスト。
 * aria-live の通知先や、アイコンだけのボタンのラベルに使う。
 * テーマ全体に sr-only 相当のユーティリティが1つも無かったため新設。
 */

/*
 * フォーカスリング。
 * 新しい部品で outline:none を単独で書かないこと。消すなら box-shadow
 * などの代替を必ず同時に置く。キーボード利用者が現在位置を失う。
 */
.ds-step:focus-visible,
.tk-seg:focus-visible,
.tk-carobtn:focus-visible,
.kc-arrow:focus-visible,
.kc-row:focus-visible,
.kc-entry:focus-visible {
  outline: 3px solid rgba(81,86,190,0.25);
  outline-offset: 2px;
}

/*
 * 「導入の流れ」ステップ番号のパルス。
 * プロトタイプは _lightSteps() がインラインで style.animation を書いていたため
 * prefers-reduced-motion が構造的に効かなかった。CSSに移してJSを不要にする。
 * マークアップ側は style="--tk-i:2" で順番を渡す（インラインstyleだが
 * animation ではないのでメディアクエリが勝つ）。
 */
.sol-pulse .step-num {
  animation: tkStep 4.8s calc(var(--tk-i, 0) * .55s) cubic-bezier(.2,.8,.2,1) infinite;
}

/*
 * 動きを減らす設定への包括的な安全網。
 * 個別の @media ブロックは5箇所あるが、適用20件のうち7セレクタしか覆えておらず、
 * screens/*.html にインラインで焼き付いた animation には届かない。
 *
 * ⚠️ これは安全網であって代替ではない。
 * タイマーでDOMを出し入れする挙動はCSSでは止まらないので、JS側は
 * tkUI.loop() で「タイマー自体を起動しない」対応が別途必須（TK-UI-SPEC §5-A）。
 *
 * ⚠️ このファイルをグローバル enqueue に足さないこと。
 * 足すと既存118ページのホバー transition まで殺してしまう。
 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .sol-pulse .step-num { animation: none; }
}

/*
 * ヘッダー／フッター関連のクラス（.tk-navbtn .tk-navlinks .tk-dd .tk-panel
 * .tk-megacard .tk-megarow .tk-sr）は assets/css/nav.css へ移した。
 * ヘッダーは全ページに出るが base.css はテンプレート限定でしか読まれないため。
 * ここに書き戻すと、v1テンプレートでだけ二重定義になり後勝ちで挙動が変わる。
 */
