    /* ── Plan Themes ──────────────────────────────────────── */
    [data-plan="kids"] {
      --tn-bg:        #EFF6FF;
      --tn-bg-2:      #DBEAFE;
      --tn-surface:   #FFFFFF;
      --tn-surface-2: #F0FDF4;
      --tn-border:    rgba(59,130,246,0.2);
      --tn-text:          #1E3A5F;
      --tn-text-sub:      #3B82F6;
      --tn-text-muted:    #64748B;
      --tn-text-on-dark:  #1E3A5F;
      --tn-primary:       #F97316;
      --tn-primary-dark:  #EA580C;
      --tn-primary-light: #FB923C;
      --tn-accent:        #10B981;
      --tn-shadow-md:     0 4px 20px rgba(59,130,246,0.12);
      --tn-shadow-glow:   0 0 32px rgba(249,115,22,0.25);
      --tn-grad-primary:  linear-gradient(135deg, #F97316 0%, #FBBF24 100%);
      --tn-grad-hero:     linear-gradient(160deg, #EFF6FF 0%, #DBEAFE 50%, #EFF6FF 100%);
      --tn-grad-card:     linear-gradient(145deg, #FFFFFF 0%, #F8FAFC 100%);
    }

    /* ── Layout ──────────────────────────────────────────── */
    body { overflow-y: auto; }

    .tn-app {
      min-height: 100vh;
      background: var(--tn-bg);
      display: flex;
      flex-direction: column;
    }

    /* ── Header ──────────────────────────────────────────── */
    .tn-header {
      position: sticky; top: 0; z-index: var(--tn-z-nav);
      display: flex; align-items: center; justify-content: space-between;
      padding: 0 var(--tn-space-8);
      height: 64px;
      background: rgba(11,16,32,0.85);
      backdrop-filter: blur(16px);
      border-bottom: 1px solid var(--tn-border);
    }
    [data-plan="kids"] .tn-header {
      background: rgba(255,255,255,0.9);
    }
    .tn-logo {
      display: flex; align-items: center; gap: var(--tn-space-3);
      font-family: var(--tn-font-heading);
      font-weight: 800;
      font-size: 1.25rem;
      letter-spacing: -0.5px;
    }
    .tn-logo-mark {
      width: 32px; height: 32px;
      background: var(--tn-grad-primary);
      border-radius: var(--tn-radius-sm);
      display: flex; align-items: center; justify-content: center;
      font-size: 1rem; font-weight: 900;
      color: #fff;
    }
    [data-plan="kids"] .tn-logo-mark { font-size: 1.2rem; }
    .tn-logo-name { color: var(--tn-text-on-dark); }
    .tn-logo-plan-badge {
      font-size: 0.6rem; font-weight: 700; letter-spacing: 1px;
      padding: 2px 8px;
      border-radius: var(--tn-radius-full);
      background: var(--tn-grad-accent);
      color: #fff;
    }
    .tn-plan-badge--hidden { display: none; }
    .tn-plan-badge--visible { display: inline-flex; }

    .tn-header-right {
      display: flex; align-items: center; gap: var(--tn-space-4);
    }
    .tn-profile-chip {
      display: none; align-items: center; gap: var(--tn-space-3);
      padding: var(--tn-space-2) var(--tn-space-4);
      background: rgba(255,255,255,0.06);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-full);
    }
    .tn-profile-chip--visible { display: flex; }
    [data-plan="kids"] .tn-profile-chip {
      background: rgba(59,130,246,0.08);
    }
    .tn-profile-name {
      font-weight: 600; font-size: 0.85rem;
      color: var(--tn-text);
    }
    .tn-profile-rank {
      font-family: var(--tn-font-mono);
      font-size: 0.72rem; font-weight: 600;
      color: var(--tn-primary); letter-spacing: 0.5px;
    }
    .tn-icon-btn {
      width: 36px; height: 36px;
      background: rgba(255,255,255,0.06);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-sm);
      display: flex; align-items: center; justify-content: center;
      color: var(--tn-text-sub); font-size: 1rem;
      transition: all var(--tn-dur-normal) var(--tn-ease-out);
    }
    .tn-icon-btn:hover {
      background: rgba(79,107,255,0.15);
      color: var(--tn-text);
    }
    [data-plan="kids"] .tn-icon-btn {
      background: rgba(59,130,246,0.08);
    }

    /* ── Main ────────────────────────────────────────────── */
    .tn-main {
      flex: 1;
      padding: var(--tn-space-12) var(--tn-space-8) var(--tn-space-16);
      max-width: 1000px;
      width: 100%;
      margin: 0 auto;
    }

    /* ── Hero ────────────────────────────────────────────── */
    .tn-hero {
      text-align: center;
      margin-bottom: var(--tn-space-12);
      animation: tn-fade-up 0.6s var(--tn-ease-out) both;
    }
    .tn-hero-greeting {
      font-size: var(--tn-text-sm);
      color: var(--tn-primary);
      font-weight: 600; letter-spacing: 1px;
      margin-bottom: var(--tn-space-2);
    }
    [data-plan="kids"] .tn-hero-greeting {
      font-size: var(--tn-text-md);
    }
    .tn-hero-title {
      font-family: var(--tn-font-heading);
      font-size: var(--tn-text-3xl);
      font-weight: 900;
      line-height: 1.15;
      letter-spacing: -1px;
      color: var(--tn-text-on-dark);
      margin-bottom: var(--tn-space-4);
    }
    [data-plan="kids"] .tn-hero-title {
      font-size: clamp(2rem, 1.5rem + 3vw, 3rem);
    }
    .tn-hero-accent { color: var(--tn-primary); }
    .tn-hero-sub {
      font-size: var(--tn-text-sm);
      color: var(--tn-text-muted);
    }

    /* Stats row */
    .tn-stats-row {
      display: flex; justify-content: center; gap: var(--tn-space-6);
      margin-bottom: var(--tn-space-10);
      flex-wrap: wrap;
      animation: tn-fade-up 0.6s 0.1s var(--tn-ease-out) both;
    }
    .tn-stat-chip {
      display: flex; align-items: center; gap: var(--tn-space-3);
      padding: var(--tn-space-3) var(--tn-space-6);
      background: var(--tn-grad-card);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-full);
    }
    .tn-stat-icon { font-size: 1.1rem; }
    .tn-stat-val {
      font-family: var(--tn-font-mono);
      font-size: 1rem; font-weight: 600;
      color: var(--tn-text);
    }
    .tn-stat-label {
      font-size: 0.72rem;
      color: var(--tn-text-muted);
    }

    /* ── Module Cards ─────────────────────────────────────── */
    .tn-modules {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
      gap: var(--tn-space-6);
      animation: tn-fade-up 0.6s 0.2s var(--tn-ease-out) both;
    }
    .tn-module-card {
      position: relative;
      background: var(--tn-grad-card);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-xl);
      padding: var(--tn-space-8);
      cursor: pointer;
      transition: transform var(--tn-dur-normal) var(--tn-ease-out),
                  box-shadow var(--tn-dur-normal) var(--tn-ease-out),
                  border-color var(--tn-dur-normal) var(--tn-ease-out);
      overflow: hidden;
    }
    .tn-module-card::before {
      content: '';
      position: absolute; inset: 0;
      background: linear-gradient(135deg, rgba(79,107,255,0.04) 0%, transparent 60%);
      opacity: 0;
      transition: opacity var(--tn-dur-normal) var(--tn-ease-out);
    }
    .tn-module-card:hover {
      transform: translateY(-4px);
      box-shadow: var(--tn-shadow-lg), var(--tn-shadow-glow);
      border-color: var(--tn-primary);
    }
    .tn-module-card:hover::before { opacity: 1; }
    .tn-module-card:active { transform: translateY(-2px); }

    .tn-card-icon-wrap {
      width: 56px; height: 56px;
      border-radius: var(--tn-radius-lg);
      background: rgba(79,107,255,0.12);
      display: flex; align-items: center; justify-content: center;
      margin-bottom: var(--tn-space-5);
      font-size: 1.6rem;
      transition: background var(--tn-dur-normal) var(--tn-ease-out);
    }
    [data-plan="kids"] .tn-card-icon-wrap {
      width: 64px; height: 64px;
      font-size: 2rem;
      border-radius: var(--tn-radius-xl);
    }
    .tn-module-card:hover .tn-card-icon-wrap {
      background: rgba(79,107,255,0.2);
    }
    .tn-card-title {
      font-family: var(--tn-font-heading);
      font-size: var(--tn-text-lg);
      font-weight: 700;
      color: var(--tn-text-on-dark);
      margin-bottom: var(--tn-space-2);
    }
    [data-plan="kids"] .tn-card-title {
      font-size: var(--tn-text-xl);
    }
    .tn-card-desc {
      font-size: var(--tn-text-sm);
      color: var(--tn-text-muted);
      line-height: 1.6;
      margin-bottom: var(--tn-space-6);
    }
    .tn-card-footer {
      display: flex; align-items: center; justify-content: space-between;
    }
    .tn-card-badge {
      font-family: var(--tn-font-mono);
      font-size: 0.72rem; font-weight: 600; letter-spacing: 0.5px;
      padding: 4px 10px;
      border-radius: var(--tn-radius-full);
    }
    .tn-card-badge--primary {
      background: rgba(79,107,255,0.15);
      color: var(--tn-primary-light);
    }
    .tn-card-badge--accent {
      background: rgba(0,229,200,0.12);
      color: var(--tn-accent);
    }
    .tn-card-badge--warning {
      background: rgba(255,181,71,0.15);
      color: var(--tn-warning);
    }
    [data-plan="kids"] .tn-card-badge {
      font-size: 0.8rem; padding: 5px 12px;
    }
    .tn-card-arrow {
      width: 28px; height: 28px;
      border-radius: var(--tn-radius-sm);
      background: rgba(255,255,255,0.06);
      border: 1px solid var(--tn-border);
      display: flex; align-items: center; justify-content: center;
      color: var(--tn-text-muted); font-size: 0.8rem;
      transition: all var(--tn-dur-fast) var(--tn-ease-out);
    }
    .tn-module-card:hover .tn-card-arrow {
      background: var(--tn-primary);
      border-color: var(--tn-primary);
      color: #fff;
    }

    /* Rank card color accent */
    .tn-module-card--rank { border-color: rgba(255,181,71,0.25); }
    .tn-module-card--rank .tn-card-icon-wrap { background: rgba(255,181,71,0.12); }
    .tn-module-card--rank:hover {
      border-color: var(--tn-warning);
      box-shadow: var(--tn-shadow-lg), 0 0 32px rgba(255,181,71,0.25);
    }
    .tn-module-card--rank:hover .tn-card-icon-wrap { background: rgba(255,181,71,0.22); }
    .tn-module-card--rank:hover .tn-card-arrow { background: var(--tn-warning); border-color: var(--tn-warning); }

    .tn-module-card--cert { border-color: rgba(0,229,200,0.25); }
    .tn-module-card--cert .tn-card-icon-wrap { background: rgba(0,229,200,0.1); }
    .tn-module-card--cert:hover {
      border-color: var(--tn-accent);
      box-shadow: var(--tn-shadow-lg), var(--tn-shadow-teal);
    }
    .tn-module-card--hidden { display: none; }
    .tn-module-card--cert:hover .tn-card-icon-wrap { background: rgba(0,229,200,0.2); }
    .tn-module-card--cert:hover .tn-card-arrow { background: var(--tn-accent); border-color: var(--tn-accent); color: #000; }

    /* Kids plan card extras */
    [data-plan="kids"] .tn-module-card {
      border-radius: 24px;
      border-width: 2px;
    }
    [data-plan="kids"] .tn-module-card--rank { border-color: #FCD34D; }
    [data-plan="kids"] .tn-module-card--cert { border-color: #6EE7B7; }

    /* ── Password Modal ────────────────────────────────────── */
    .tn-modal-overlay {
      display: none;
      position: fixed; inset: 0; z-index: var(--tn-z-modal);
      background: rgba(0,0,0,0.7);
      backdrop-filter: blur(8px);
      align-items: center; justify-content: center;
    }
    .tn-modal-overlay.is-open { display: flex; }
    .tn-modal {
      background: var(--tn-surface);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-xl);
      padding: var(--tn-space-10);
      width: 90%; max-width: 400px;
      text-align: center;
      animation: tn-modal-in 0.3s var(--tn-ease-out) both;
    }
    @keyframes tn-modal-in {
      from { opacity: 0; transform: scale(0.94) translateY(10px); }
      to   { opacity: 1; transform: scale(1) translateY(0); }
    }
    [data-plan="kids"] .tn-modal { border-radius: 28px; border-width: 2px; background: #fff; }
    .tn-modal-icon { font-size: 2rem; margin-bottom: var(--tn-space-4); }
    .tn-modal-title {
      font-family: var(--tn-font-heading);
      font-size: var(--tn-text-xl); font-weight: 700;
      color: var(--tn-text-on-dark);
      margin-bottom: var(--tn-space-2);
    }
    .tn-modal-sub {
      font-size: var(--tn-text-sm); color: var(--tn-text-muted);
      margin-bottom: var(--tn-space-6);
    }
    .tn-modal-actions { display: flex; gap: var(--tn-space-3); }
    .tn-btn-modal-primary {
      flex: 1; padding: var(--tn-space-3);
      background: var(--tn-grad-primary);
      border: none; border-radius: var(--tn-radius-md);
      color: #fff; font-weight: 700; font-size: var(--tn-text-sm);
      transition: opacity var(--tn-dur-fast);
    }
    .tn-btn-modal-primary:hover { opacity: 0.88; }
    .tn-btn-modal-cancel {
      flex: 1; padding: var(--tn-space-3);
      background: transparent;
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-md);
      color: var(--tn-text-muted); font-weight: 600; font-size: var(--tn-text-sm);
    }
    .tn-btn-modal-cancel:hover { border-color: var(--tn-text-muted); }

    /* ── Settings Drawer ────────────────────────────────────── */
    .tn-settings-overlay {
      display: none;
      position: fixed; inset: 0; z-index: var(--tn-z-modal);
      background: rgba(0,0,0,0.6);
      backdrop-filter: blur(8px);
      align-items: flex-end; justify-content: center;
    }
    .tn-settings-overlay.is-open { display: flex; }
    .tn-settings-panel {
      background: var(--tn-surface);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-xl) var(--tn-radius-xl) 0 0;
      padding: var(--tn-space-8);
      width: 100%; max-width: 480px;
      animation: tn-slide-up 0.3s var(--tn-ease-out) both;
    }
    @keyframes tn-slide-up {
      from { transform: translateY(100%); }
      to   { transform: translateY(0); }
    }
    [data-plan="kids"] .tn-settings-panel { background: #fff; }
    .tn-settings-title {
      font-family: var(--tn-font-heading);
      font-size: var(--tn-text-md); font-weight: 700;
      color: var(--tn-text-on-dark);
      margin-bottom: var(--tn-space-6);
    }
    .tn-setting-row {
      display: flex; align-items: center; justify-content: space-between;
      padding: var(--tn-space-4) 0;
      border-bottom: 1px solid var(--tn-border-subtle);
    }
    .tn-setting-row:last-of-type { border-bottom: none; }
    .tn-setting-label {
      font-size: var(--tn-text-sm); color: var(--tn-text); font-weight: 500;
    }
    .tn-toggle {
      position: relative; width: 44px; height: 24px;
      background: rgba(255,255,255,0.1);
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-full); cursor: pointer;
      transition: background var(--tn-dur-fast) var(--tn-ease-out);
    }
    .tn-toggle.active {
      background: var(--tn-primary);
      border-color: var(--tn-primary);
    }
    .tn-toggle::after {
      content: '';
      position: absolute; top: 2px; left: 2px;
      width: 18px; height: 18px;
      background: #fff; border-radius: 50%;
      transition: transform var(--tn-dur-fast) var(--tn-ease-out);
    }
    .tn-toggle.active::after { transform: translateX(20px); }
    .tn-volume-row { display: flex; align-items: center; gap: var(--tn-space-3); }
    .tn-volume-slider {
      -webkit-appearance: none; appearance: none;
      width: 100px; height: 4px;
      background: rgba(255,255,255,0.15);
      border-radius: 2px; outline: none;
    }
    [data-plan="kids"] .tn-volume-slider { background: rgba(0,0,0,0.1); }
    .tn-volume-slider::-webkit-slider-thumb {
      -webkit-appearance: none;
      width: 14px; height: 14px; border-radius: 50%;
      background: var(--tn-primary); cursor: pointer;
    }
    .tn-volume-val {
      font-family: var(--tn-font-mono);
      font-size: 0.75rem; color: var(--tn-primary);
      min-width: 36px; text-align: right;
    }
    .tn-settings-close {
      margin-top: var(--tn-space-6); width: 100%;
      padding: var(--tn-space-3);
      background: transparent;
      border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-md);
      color: var(--tn-text-muted); font-weight: 600;
      transition: border-color var(--tn-dur-fast), color var(--tn-dur-fast);
    }
    .tn-settings-close:hover { border-color: var(--tn-text-muted); color: var(--tn-text); }

    /* ── Footer ──────────────────────────────────────────── */
    .tn-footer {
      padding: var(--tn-space-5) var(--tn-space-8);
      border-top: 1px solid var(--tn-border-subtle);
      display: flex; align-items: center; justify-content: space-between;
      font-size: var(--tn-text-xs); color: var(--tn-text-muted);
    }
    .tn-footer-logout {
      font-size: var(--tn-text-xs); font-weight: 600;
      color: var(--tn-text-muted);
      background: none; border: none; padding: 0;
      transition: color var(--tn-dur-fast);
    }
    .tn-footer-logout:hover { color: var(--tn-danger); }

    /* ── UI Theme Overrides ──────────────────────────────── */
    [data-theme="kids"] {
      --primary: #ff6b6b;
      --bg: #fff9f0;
      font-size: 1rem;
    }
    [data-theme="senior"] {
      font-size: 1.2rem;
      --primary: #2c5282;
      line-height: 1.8;
    }
    [data-theme="standard"] {
      /* デフォルトスタイルと同じ */
    }
    /* Senior theme: larger text throughout the UI */
    [data-theme="senior"] .tn-card-title { font-size: var(--tn-text-xl); }
    [data-theme="senior"] .tn-card-desc  { font-size: var(--tn-text-base); line-height: 1.8; }
    [data-theme="senior"] .tn-card-badge { font-size: 0.85rem; padding: 5px 14px; }
    [data-theme="senior"] .tn-stat-val   { font-size: 1.15rem; }
    [data-theme="senior"] .tn-stat-label { font-size: 0.8rem; }
    [data-theme="senior"] .tn-profile-name { font-size: 1rem; }

    /* ── Class Dashboard ──────────────────────────────────── */
    .tn-class-dashboard {
      display: none; margin-top: var(--tn-space-10); padding-top: var(--tn-space-8);
      border-top: 1px solid var(--tn-border);
    }
    .tn-class-dashboard--visible { display: block; }
    .tn-dashboard-head { margin-bottom: var(--tn-space-5); }
    .tn-dashboard-title {
      color: var(--tn-text-on-dark); font-family: var(--tn-font-heading);
      font-size: var(--tn-text-xl); font-weight: 700;
    }
    .tn-dashboard-sub { color: var(--tn-text-muted); font-size: var(--tn-text-xs); margin-top: 4px; }
    .tn-dashboard-grid {
      display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(240px, 0.7fr);
      gap: var(--tn-space-6);
    }
    .tn-dashboard-panel {
      min-width: 0; overflow: hidden; border: 1px solid var(--tn-border);
      border-radius: var(--tn-radius-md); background: var(--tn-grad-card);
    }
    .tn-dashboard-panel-title {
      padding: var(--tn-space-4); border-bottom: 1px solid var(--tn-border);
      color: var(--tn-text); font-size: var(--tn-text-sm); font-weight: 700;
    }
    .tn-dashboard-scroll { overflow-x: auto; }
    .tn-dashboard-table { width: 100%; border-collapse: collapse; font-size: var(--tn-text-xs); }
    .tn-dashboard-table th, .tn-dashboard-table td {
      padding: 10px 12px; border-bottom: 1px solid var(--tn-border-subtle);
      color: var(--tn-text-sub); text-align: left; white-space: nowrap;
    }
    .tn-dashboard-table th { color: var(--tn-text-muted); font-size: 0.68rem; }
    .tn-dashboard-table tr:last-child td { border-bottom: none; }
    .tn-homework-list { display: grid; gap: var(--tn-space-3); padding: var(--tn-space-4); }
    .tn-homework-item { padding-bottom: var(--tn-space-3); border-bottom: 1px solid var(--tn-border-subtle); }
    .tn-homework-item:last-child { padding-bottom: 0; border-bottom: 0; }
    .tn-homework-title { color: var(--tn-text); font-size: var(--tn-text-sm); font-weight: 700; }
    .tn-homework-meta { color: var(--tn-text-muted); font-size: var(--tn-text-xs); margin: 4px 0 8px; }
    .tn-homework-link { color: var(--tn-primary-light); font-size: var(--tn-text-xs); font-weight: 700; text-decoration: none; }

    /* ── Animations ──────────────────────────────────────── */
    @keyframes tn-fade-up {
      from { opacity: 0; transform: translateY(16px); }
      to   { opacity: 1; transform: translateY(0); }
    }

    /* ── Responsive ──────────────────────────────────────── */
    @media (max-width: 600px) {
      .tn-header { padding: 0 var(--tn-space-4); }
      .tn-main { padding: var(--tn-space-8) var(--tn-space-4) var(--tn-space-12); }
      .tn-modules { grid-template-columns: 1fr; }
      .tn-stats-row { gap: var(--tn-space-3); }
      .tn-stat-chip { padding: var(--tn-space-2) var(--tn-space-4); }
      .tn-dashboard-grid { grid-template-columns: 1fr; }
    }
