/* ============================================================
   c90_ModernTheme.css  —  Modern light-theme overlay (dev only)

   Loaded LAST in <head> (after every page's own CSS) so equal-
   specificity rules win by source order. Overrides ONLY visual
   properties: color / background / border / border-radius /
   box-shadow / font / transition / outline.

   NEVER touch layout (display / grid-template / position /
   width / height / margin / padding) on shared containers —
   page CSS depends on it. EXCEPTION: Section C2 below is an
   intentional, dev-only normalization of the #divTop top-bar
   (one unified height + single-row layout) so the header is
   consistent across login / dashboard / admin and stops the
   dashboard Language box wrapping on mobile.

   Scope: dev.music-manager.jp admin + dashboard + login + analyzer
   pages. The analyzer page (u46html_analyzer.php) renders inside this
   same shell (issue #49); its own visuals are minimally themed via
   cu46_analyzer.css (body.mmp-analyzer scope), not pixel parity with
   the retired a01-a03 dark design.
   ============================================================ */

/* ---- A. Tokens — 3-layer graph: Primitive → Semantic → Component ----
   Foundation = デジタル庁 (色/型/余白/角丸ラダー/Elevation/a11y);
   Surface = Apple Liquid Glass (chrome のガラス層); 値はプロトタイプ
   (ui-prototype.html :root) から原則導出。変数「名」は c91/c92/c93/c96 +
   各 page-CSS 互換のため維持(= 実装戦術)、ただし「値」は全面再設計。
   旧クレイ値(soft-purple accent / off-ladder card radius / rounded-gothic
   face / overshoot spring ease)は破棄。 */
:root{
  /* ============================================================
     Primitive — デジタル庁 Blue ramp (真実の源)
     ============================================================ */
  --da-blue-50:   #e8f1fe;
  --da-blue-600:  #3460fb;
  --da-blue-700:  #264af4;
  --da-blue-800:  #0031d8;
  --da-blue-900:  #0017c1;
  --da-blue-1000: #00118f;
  --da-blue-1100: #000071;
  /* Primitive — デジタル庁 Gray ramp */
  --da-gray-50:  #f2f2f2;
  --da-gray-536: #767676;   /* 白上 AA 最薄 */
  --da-gray-700: #4d4d4d;
  --da-gray-800: #333333;
  --da-gray-900: #1a1a1a;

  /* ============================================================
     Primitive — issue #27 purple/navy re-skin (ADR-0004)。旧デジタル庁
     Blue ramp は残置(参照元)、下の Semantic 層をこの値へ張り替える。
     ============================================================ */
  --mm-primary:        #7748EB;   /* purple primary (白文字 >=4.5:1) */
  --mm-primary-deep:   #5A30CF;   /* pressed / deep text */
  --mm-primary-tint:   #EFEAFD;   /* selection / hover wash */
  --mm-navy:           #18004F;   /* band / footer anchor */
  --mm-func-blue:      #2456D6;   /* functional blue fill */
  --mm-func-blue-deep: #1D47B8;   /* functional blue hover / text */
  --mm-teal:           #0E8074;   /* functional teal */
  --mm-dark:           #3F4147;   /* neutral dark fill */
  --mm-banner:         linear-gradient(100deg,#18004F,#2C0F86,#4A24C4);

  /* ============================================================
     Semantic — accent (issue #27: purple primary + navy chrome)
     ============================================================ */
  --mm-accent:        var(--mm-primary);       /* #7748EB */
  --mm-accent-hover:  var(--mm-primary-deep);  /* #5A30CF */
  --mm-accent-active: #4A24C4;                 /* deepest press */
  --mm-accent-deep:   var(--mm-navy);          /* admin chrome — navy */
  --mm-accent-deep-h: #2C0F86;                 /* navy band hover */

  /* Semantic — surfaces (不透明コンテンツ面はニュートラル) */
  --mm-page-bg:   #F5F5FA;              /* flat page fill */
  --mm-page-bg-2: #EFEFF6;              /* legacy 2nd stop (flat now) */
  --mm-surface:       #ffffff;
  --mm-surface-sunken:#f6f8fc;          /* inner panel / sticky head */
  --mm-surface-alt:   #fafbfe;          /* table zebra */
  --mm-card-bg:   var(--mm-surface);    /* card 面 = 不透明白 */
  --mm-surface-2:     var(--mm-surface-sunken);  /* inputs / alt rows */
  --mm-surface-hover: var(--mm-primary-tint);  /* row hover wash (purple-tinted) */
  --mm-border:        #E6E6F0;              /* hairline */
  --mm-border-strong: #D9D9E8;              /* hairline-strong */
  --mm-divider:       rgba(20,30,60,.10);   /* hairlines */
  --mm-hairline:        var(--mm-border);
  --mm-hairline-strong: var(--mm-border-strong);

  /* Semantic — text (デジタル庁 Gray) */
  --mm-text:      #22223A;              /* primary text */
  --mm-text-soft: #696981;              /* secondary UI (AA on white) */
  --mm-text-aux:  #767676;              /* gray-536 — large / aux (AA on white) */
  --mm-text-3:    var(--mm-text-aux);   /* legacy alias */
  --mm-gray:      #c7ccd9;              /* neutral chip fill base */
  --mm-cyan:      var(--mm-accent);     /* legacy alias → accent */

  /* derived surface/border aliases (consumed by §N dashboard + meta) */
  --mm-tint:         var(--mm-primary-tint);   /* hover/selection wash */
  --mm-input-border: #D9D9E8;                  /* resting form-field outline */

  /* ============================================================
     Component — radius (Apple concentric ladder; off-ladder card radius 破棄)
     ============================================================ */
  --mm-radius-sm:   9px;                /* inputs / small buttons */
  --mm-radius:      12px;               /* inner panels */
  --mm-radius-lg:   14px;               /* cards */
  --mm-radius-xl:   24px;               /* large containers */
  --mm-radius-pill: 9999px;            /* chips / toggles / capsules */
  --mm-topbar-h:    64px;               /* unified #divTop height (Section C2 / 2b fixed topbar) */
  --mm-nav-height:  52px;               /* legacy nav-row chrome (kept for fallbacks) */

  /* Component — BV shell dims (2b fixed sidenav + topbar; プロト準拠) */
  --mm-sidenav:     208px;              /* fixed sidenav width (desktop) */
  --mm-rail:        72px;               /* collapsed icon rail (<=1024) */
  --mm-content-x:   236px;              /* sidenav 208 + 28 gutter — content left inset */
  --mm-content-y:   96px;               /* topbar 64 + 32 gutter — content top inset */

  /* Component — spacing (8px 基底) */
  --mm-space-1: 4px;
  --mm-space-2: 8px;
  --mm-space-3: 16px;
  --mm-space-4: 24px;
  --mm-space-5: 32px;
  --mm-space-6: 48px;
  --mm-space-7: 64px;

  /* ============================================================
     Motion — Apple smooth + restrained flex (clay spring 破棄)
     ============================================================ */
  --mm-ease:        cubic-bezier(0.16,1,0.3,1);  /* smooth, no overshoot */
  --mm-ease-smooth: cubic-bezier(0.16,1,0.3,1);
  --mm-ease-flex:   cubic-bezier(0.34,1.12,0.64,1); /* press feedback only */
  --mm-dur:         300ms;
  --mm-dur-fast:    180ms;
  --mm-transition:  var(--mm-dur) var(--mm-ease);

  /* ============================================================
     Elevation — neutral soft drops (NOT clay; no inset specular)
     ============================================================ */
  --mm-elev-1: 0 1px 2px rgba(15,23,42,.06), 0 1px 1px rgba(15,23,42,.04);
  --mm-elev-2: 0 2px 8px rgba(24,0,79,.05);
  --mm-elev-4: 0 8px 24px rgba(15,23,42,.09);
  --mm-elev-8: 0 18px 48px rgba(15,23,42,.13);
  /* legacy shadow aliases mapped onto the neutral elevation scale */
  --mm-shadow:         var(--mm-elev-2);
  --mm-shadow-hover:   var(--mm-elev-4);
  --mm-shadow-pressed: inset 0 2px 6px rgba(15,23,42,.14);
  --mm-shadow-sm:      var(--mm-elev-1);
  /* primary button — accent glass: soft drop + faint inner top sheen */
  --mm-btn-primary-shadow:
    var(--mm-elev-2),
    inset 0 1px 0 rgba(255,255,255,.28);

  /* ============================================================
     Glass — chrome only (Apple 2層: highlight rim + soft drop)
     ============================================================ */
  --mm-glass-bg:   rgba(255,255,255,.62);
  --mm-glass-blur: 12px;
  --mm-glass-rim:  inset 0 1px 0 rgba(255,255,255,.9);
  /* lensing 近似: 明るい上/左リム + 暗い下/右 */
  --mm-glass-lens:
    inset 0 1px 0 rgba(255,255,255,.92),
    inset 1px 0 0 rgba(255,255,255,.55),
    inset 0 -1px 0 rgba(20,30,60,.06),
    inset -1px 0 0 rgba(20,30,60,.05);

  /* ============================================================
     Type families — Noto Sans JP (丸ゴシック廃止)
     ============================================================ */
  --mm-font: "Noto Sans JP", -apple-system, BlinkMacSystemFont,
             "Hiragino Sans", "Yu Gothic", sans-serif;
  --mm-font-num: "Noto Sans Mono", ui-monospace, monospace;

  /* type rhythm (Stage A) — applied to text leaves only, never
     to layout containers, so page-CSS box-model is untouched */
  --mm-lh:        1.6;   /* comfortable body / card text */
  --mm-lh-tight:  1.35;  /* dense rows, small screens */
  --mm-track:     .01em; /* subtle body tracking */
  --mm-track-cap: .04em; /* table headers / pills */

  /* ============================================================
     Semantic — status (デジタル庁 dual-tone)。色は「強調」専用、
     ステータスは中立面+色文字+アイコンで(色だけに依存しない)。
     旧 action-hue 名(orange/green/blue/yellow/red/pink)は互換維持。
     ============================================================ */
  --mm-success:        #259d63;  --mm-success-strong: #197a4b;
  --mm-error:          #ec0000;  --mm-error-strong:   #ce0000;
  --mm-warning:        #b78f00;  --mm-warning-strong: #927200;
  --mm-info:           var(--mm-accent);

  --mm-orange:   var(--mm-warning);  --mm-orange-h: var(--mm-warning-strong);
  --mm-green:    var(--mm-success);  --mm-green-h:  var(--mm-success-strong);
  --mm-blue:     var(--mm-func-blue);   --mm-blue-h:   var(--mm-func-blue-deep);
  --mm-yellow:   var(--mm-warning);  --mm-yellow-h: var(--mm-warning-strong);
  --mm-red:      var(--mm-error);
  --mm-pink:     #c0186b;

  /* accessible TEXT-on-light variants of the action hues (AA >=4.5:1).
     Use where the hue is the text color, not a fill (line buttons, links). */
  --mm-orange-text: var(--mm-warning-strong);
  --mm-green-text:  var(--mm-success-strong);
  --mm-blue-text:   var(--mm-primary-deep);  /* deep-text links → purple-deep */

  /* pale-fill / dark-ink pairs for the filled Orange/Yellow/Green buttons
     (issue #61). Literal hex, NOT overridden under [data-theme="dark"] —
     the fill must stay legible even where the surrounding UI goes dark, so
     these are theme-fixed (identical contrast in both modes). */
  --mm-warning-fill:   #F7D97A;  --mm-warning-fill-h: #EFC94E;
  --mm-warning-ink:    #3D2E00;
  --mm-success-fill:   #B9EAC8;  --mm-success-fill-h: #9ADCB0;
  --mm-success-ink:    #0C3D1E;
}

/* ============================================================
   Sealed dark theme — values present, light ships (data-theme で封印)。
   ============================================================ */
[data-theme="dark"]{
  --mm-text:      #f2f2f2;
  --mm-text-soft: #d7dbe6;
  --mm-text-aux:  #a3a9ba;
  --mm-text-3:    var(--mm-text-aux);
  --mm-surface:        #14161d;
  --mm-surface-sunken: #0f1117;
  --mm-surface-alt:    #181b24;
  --mm-card-bg:   var(--mm-surface);
  --mm-surface-2: var(--mm-surface-sunken);
  --mm-page-bg:   #0f1117;
  --mm-page-bg-2: #14161d;
  --mm-border:        rgba(255,255,255,.10);
  --mm-border-strong: rgba(255,255,255,.16);
  --mm-divider:       rgba(255,255,255,.10);
  --mm-hairline:        var(--mm-border);
  --mm-hairline-strong: var(--mm-border-strong);
  --mm-glass-bg:  rgba(20,24,34,.58);
  --mm-glass-rim: inset 0 1px 0 rgba(255,255,255,.14);
}

/* ---- B. Base / typography (element level, lowest specificity) ---- */
body{
  background-color: var(--mm-page-bg);
  color: var(--mm-text);
  font-family: var(--mm-font);
  -webkit-font-smoothing: antialiased;       /* crisper text, no layout effect */
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
a{ transition: color var(--mm-transition); }
button{
  font-family: inherit;
  transition: background-color var(--mm-transition),
              border-color var(--mm-transition),
              box-shadow var(--mm-transition),
              transform var(--mm-transition);
}
/* dashboard brand mark (issue #61) is a <button> inside a POST move=top
   form, not a link — reset it to look like the plain img it replaces.
   Not .mmNavBtn, so html102_UserHead.php's inline language-label rewrite
   script (which targets #mmNav .mmNavBtn) leaves it alone. */
.mmNavBrandBtn{ padding: 0; border: 0; background: none; cursor: pointer; display: inline-flex; }

/* ---- C. Top bars ---- */
/* Admin bar: black -> deep purple, modern badge */
#divTop:has(#divTopLine){
  background-color: var(--mm-accent-deep);
  background-image: var(--mm-banner);
  box-shadow: var(--mm-shadow-sm);
}
#divTop:has(#divTopLine) #divTopLine{
  border-top-color: rgba(255,255,255,.18);
  border-bottom-color: rgba(255,255,255,.18);
}
/* page-name badge: drop yellow radial gradient -> white pill */
#divTopLabel{
  background-image: none;
  background-color: var(--mm-card-bg);
  color: var(--mm-primary-deep);
  box-shadow: var(--mm-shadow);
}

/* User bar: accent underline + modern language select */
#divTop:has(.divLanguage){ border-bottom-color: var(--mm-accent); }
#slctLanguage{
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius-sm);
  background: var(--mm-surface-2);
  color: var(--mm-text);
  transition: border-color var(--mm-transition), box-shadow var(--mm-transition);
}
#slctLanguage:hover{ border-color: var(--mm-accent); }

/* ---- C2. Top-bar height normalization (dev layout fix) ----
   The three header variants ship different heights from their base
   CSS — dashboard (c30) ~75px and WRAPS to ~120px on mobile (the
   Language box drops below the logo); admin (c50) 60px; login /
   maintenance (cu00 / c20) 80px. Unify all to --mm-topbar-h, kept on
   ONE row at every width. Discriminated by the same :has() markers as
   Section C. Dev-only: prod never loads c90, so the base files are
   untouched. */

/* dashboard: logo + language on ONE row, fixed height (kills the wrap).
   The :has()+id specificity beats c30's base + its max-width:450 rule. */
#divTop:has(.divLanguage){
  height: var(--mm-topbar-h);
  min-height: var(--mm-topbar-h);
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: 12px;
  padding: 0 15px;            /* matches #mmNavList padding -> edges align */
  box-sizing: border-box;
}
#divTop:has(.divLanguage) #divTopImage{
  margin: 0; width: auto; height: auto; min-width: 0; flex: 0 0 auto;
}
#divTop:has(.divLanguage) #divTopImage > img{ max-height: 44px; width: auto; }
#divTop:has(.divLanguage) .divLanguage{ width: auto; height: auto; flex: 0 0 auto; }
/* Language box: neutralise c30's 75px-era stacking top-margins
   (.divLanguageTitle 10px / .divLanguageSelect 1px) that pushed the
   stacked block past the 64px flex content area, so the select
   crossed the 3px border-bottom divider (issue #8). */
#divTop:has(.divLanguage) .divLanguageTitle,
#divTop:has(.divLanguage) .divLanguageSelect{ margin-top: 0; }

/* admin: same outer height; the bordered #divTopLine centres within it */
#divTop:has(#divTopLine){
  height: var(--mm-topbar-h);
  min-height: var(--mm-topbar-h);
  padding-top: 0;
  display: flex;
  align-items: center;
}

/* admin mobile: c50's #divTopArea is a fixed grid (60+160+1fr+350 = 570px of
   fixed columns) that overflows narrow viewports and pushes the label pill
   off-screen. Switch it to flex and clamp the pill so it stays on-screen. */
@media screen and (max-width: 600px){
  #divTop:has(#divTopLine) #divTopArea{
    display: flex;
    align-items: center;
    gap: 8px;
    max-width: 100%;
    padding: 0 12px;
    box-sizing: border-box;
  }
  #divTop:has(#divTopLine) #divTopTitle{
    width: auto; font-size: 16px; white-space: nowrap;
  }
  #divTop:has(#divTopLine) #divTopLabel{
    width: auto; margin: 0 0 0 auto; max-width: 45vw;
    font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
}

/* login / maintenance: lone logo, centred within the unified height */
#divTop:not(:has(.divLanguage)):not(:has(#divTopLine)){
  height: var(--mm-topbar-h);
  min-height: var(--mm-topbar-h);
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ---- D. Return / alert blocks (visual only, layout untouched) ---- */
#divReturn > div{
  background-color: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius);
  box-shadow: var(--mm-shadow);
}
.divAlert{
  background-color: #fff7d6;
  border: 1px solid #f3e2a0;
  border-radius: var(--mm-radius);
}

/* ---- E. Buttons ---- */
.btnNormal, .btnNormalSquare, .btnLargeSquare{
  box-shadow: var(--mm-shadow-sm);
}
.btnNormal:hover, .btnNormalSquare:hover, .btnLargeSquare:hover{
  box-shadow: var(--mm-shadow-hover);
}

/* corporate purple (c00_CorpStyle) */
.BgcClrCorp,  .BgcClrCorpHover  { background-color: var(--mm-accent); }
.BgcClrCorpHover:hover          { background-color: var(--mm-accent-hover); }
.BrdClrCorp,  .BrdClrCorpHover  { border-color: var(--mm-accent); color: var(--mm-accent-deep); }
.BgcClrCorp2, .BgcClrCorp2Hover { background-color: var(--mm-accent-deep); }
.BgcClrCorp2Hover:hover         { background-color: var(--mm-accent-deep-h); }
.BrdClrCorp2, .BrdClrCorp2Hover { border-color: var(--mm-accent-deep); color: var(--mm-accent-deep); }

/* action colors (c10_BaseStyle) — recolor fill/border, keep hover.
   Orange/Yellow/Green use a pale theme-fixed fill + dark theme-fixed ink
   (issue #61: the prior dark-on-saturated-fill combos dropped under
   4.5:1 in dark mode, and .ClrYellow had no text color at all); the
   status hue itself now lives only on the border. */
.ClrOrange, .ClrOrangeHover { color: var(--mm-warning-ink); background-color: var(--mm-warning-fill); border-color: var(--mm-orange); }
.ClrOrangeHover:hover       { background-color: var(--mm-warning-fill-h); }
.ClrOrangeLine, .ClrOrangeLineHover { color: var(--mm-orange-text); border-color: var(--mm-orange); }

.ClrGreen, .ClrGreenHover   { color: var(--mm-success-ink); background-color: var(--mm-success-fill); border-color: var(--mm-green); }
.ClrGreenHover:hover        { background-color: var(--mm-success-fill-h); }
.ClrGreenLine, .ClrGreenLineHover { color: var(--mm-green-text); border-color: var(--mm-green); }

.ClrBlue, .ClrBlueHover     { background-color: var(--mm-blue); border-color: var(--mm-blue); }
.ClrBlueHover:hover         { background-color: var(--mm-blue-h); }
.ClrBlueLine, .ClrBlueLineHover { color: var(--mm-blue-text); border-color: var(--mm-blue); }

.ClrYellow, .ClrYellowHover { color: var(--mm-warning-ink); background-color: var(--mm-warning-fill); border-color: var(--mm-yellow); }
.ClrYellowHover:hover       { background-color: var(--mm-warning-fill-h); }

/* ---- F. Form controls (login-scoped classes only) ---- */
.inptStyle{ transition: background-color var(--mm-transition); }
.divInput{
  border-radius: var(--mm-radius-sm) var(--mm-radius-sm) 0 0;
  transition: border-color var(--mm-transition), background-color var(--mm-transition);
}
/* placeholders — browser default (~50% opacity) fails AA; pin to a
   readable secondary tone. */
::placeholder{ color: var(--mm-text-soft); opacity: 1; }

/* ---- G. Tables (grid rows: background/shadow/transition only) ---- */
.divTableA{ background-color: var(--mm-card-bg); transition: background-color var(--mm-transition); }
.divTableB{ background-color: var(--mm-surface-2); transition: background-color var(--mm-transition); }
.divTableX{ background-color: var(--mm-accent-deep); color: #ffffff; }
.divTableA:hover, .divTableB:hover{ background-color: var(--mm-tint); }
.divTableX:hover{ background-color: var(--mm-accent-deep-h); }

/* ---- H. Pills (.spn*) — BV badge式: 淡色tint地 + 同系の濃い文字。
   各 .spn* は「静的フォールバック(旧値, >=5.5:1) → color-mix」の順で書き、
   color-mix 非対応ブラウザでも旧値が残り可読（不可視化を防ぐ）。
   暖色(orange/green) は文字を必ず暗くしコントラストを担保。
   インセットリングは廃止（クレイは枠なし）。 ---- */
.spnRed   { color:#B32626; background-color:#FDEAEA; box-shadow:none; }
.spnPink  { color:#5A30CF; background-color:#EFEAFD; box-shadow:none; }  /* pink family → purple chip */
.spnOrange{ color:#9A5B00; background-color:#FDF3E0; box-shadow:none; }
.spnGreen { color:#1D7A3D; background-color:#E5F5EA; box-shadow:none; }
.spnBlue  { color:#1D47B8; background-color:#E8EEFC; box-shadow:none; }
.spnGray  { color:#565666; background-color:#EDEDF2; box-shadow:none; }
.spnRed, .spnPink, .spnOrange,
.spnGreen, .spnBlue, .spnGray{ font-weight:600; }

/* ---- I. State backgrounds — soften, keep meaning ---- */
.divBgClrRed   { background-color: #fdecec; background: color-mix(in srgb, var(--mm-red) 14%, var(--mm-card-bg)); }
.divBgClrGreen { background-color: #eaf8ee; background: color-mix(in srgb, var(--mm-green) 14%, var(--mm-card-bg)); }
.divBgClrYellow{ background-color: #fff3c4; background: color-mix(in srgb, var(--mm-orange) 14%, var(--mm-card-bg)); }

/* ---- J. Footers ---- */
#divFoot{ color: var(--mm-text-soft); }
#divFoot.BgcClrCorp{ background-color: var(--mm-navy); color: #ffffff; }

/* ---- K. Login card ---- */
#divLoginForgot{
  background-color: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius);
  box-shadow: var(--mm-shadow);
  overflow: hidden;            /* clip children to rounded corners */
}

/* ---- L. Accessibility: visible keyboard focus ---- */
a:focus-visible,
button:focus-visible,
select:focus-visible,
.inptStyle:focus-visible{
  outline: 2px solid var(--mm-accent);
  outline-offset: 2px;
  border-radius: var(--mm-radius-sm);
}
/* admin top bar is deep purple — the accent ring is only ~2.9:1 there;
   switch to white so keyboard focus stays visible (AA >=3:1). */
#divTop:has(#divTopLine) a:focus-visible{ outline-color: #ffffff; }

/* ============================================================
   M. Stage-A polish (additive) — typography rhythm, table &
   control refinement, tactile buttons, responsive type.
   Visual / leaf-scoped ONLY. No box-model on layout containers
   (see header rules A–B). Reverting this section reverts Stage A.
   ============================================================ */

/* M1. Card text leaves — readability inside fixed padding:20px
   wrappers, so reflow stays within the card (layout untouched) */
#divReturn > div,
.divAlert > div{
  line-height: var(--mm-lh);
  letter-spacing: var(--mm-track);
}

/* M2. Tables — header emphasis + hairline row separators.
   inset box-shadow draws the divider with zero height change. */
.divTableX{
  letter-spacing: var(--mm-track-cap);
  font-weight: 600;
}
.divTableA, .divTableB{
  box-shadow: inset 0 -1px var(--mm-border);
}

/* M3. Status pills — crisper caps spacing (recolor done in H) */
.spnRed, .spnPink, .spnOrange,
.spnGreen, .spnBlue, .spnGray{
  letter-spacing: var(--mm-track-cap);
}

/* M4. Form controls — hover + focus states (focus-visible ring
   in L). border-color / box-shadow only — no size change. */
#slctLanguage:hover,
.inptStyle:hover{
  border-color: var(--mm-accent);
}
.inptStyle:focus{
  border-color: var(--mm-accent);
  box-shadow: 0 0 0 3px rgba(119,72,235,.16);
}

/* M5. Buttons — tactile press. transform = paint only, no reflow */
.btnNormal:active,
.btnNormalSquare:active,
.btnLargeSquare:active{
  transform: translateY(1px);
  box-shadow: var(--mm-shadow-pressed);
}

/* M6. Responsive TYPE layer — a NEW breakpoint that sets only
   typography + control padding. It must NOT restate c30's
   768/450 grid templates (source order would override them). */
@media screen and (max-width: 600px){
  #divReturn > div,
  .divAlert > div{
    line-height: var(--mm-lh-tight);
  }
  #slctLanguage{
    padding: 8px 10px;              /* larger touch target — control only */
    border-radius: var(--mm-radius-sm);
  }
}

/* ============================================================
   N. Stage-D (dashboard & meta pages) — retire the dated cyan /
   neon / pure-RGB visuals defined by the SHARED per-page CSS
   (cu* / cm*, read-only — overridden here instead). Visual
   properties ONLY, same rules as sections A–M. Selectors that
   also exist on unaudited pages with DIFFERENT styling are
   scoped to a page-unique ancestor or :not() guard (noted
   inline). The cm03/04/05 meta files are shared by dashboard
   (u33–u37) AND admin (a33–a35/a84/a85) meta pages, so these
   overrides fix both sides at once.
   Reverting this section reverts Stage D (dashboard half).
   --mm-tint / --mm-input-border are defined in Section A (tokens).
   ============================================================ */

/* N1. Legacy link patterns — pure blue rgb(0,0,255) + yellow hover.
   .divBackList / .aLink are byte-identical across all defining
   page-CSS files -> deliberate global fix. */
.divBackList{ color: var(--mm-blue-text); }
.divBackList > a:hover{ background-color: var(--mm-tint); }
.aLink:link, .aLink:visited, .aLink:active, .aLink:focus{ color: var(--mm-blue-text); }
.aLink:hover, .aLinkYellow:hover{ background-color: var(--mm-tint); }
#divNewsMore{ color: var(--mm-blue-text); }
#divNewsMore:hover{ color: var(--mm-accent-hover); }

/* N2. Meta status pills (cm03 + identical defs in cm02) — same
   soft-chip treatment as section H (gray / yellow / pink) */
.spnWait { color:#565666; background-color:#EDEDF2;
           box-shadow:none; letter-spacing: var(--mm-track-cap); font-weight:600; }
.spnRetry{ color:#9A5B00; background-color:#FDF3E0;
           box-shadow:none; letter-spacing: var(--mm-track-cap); font-weight:600; }
.spnChild{ color:#5A30CF; background-color:#EFEAFD;
           box-shadow:none; letter-spacing: var(--mm-track-cap); font-weight:600; }

/* N3. Old yellow info banner (cu10 top + cm02 meta top) ->
   .divAlert palette (section D) */
.divYellow{
  background-color: #fff7d6;
  border-color: #f3e2a0;
  border-radius: var(--mm-radius);
}

/* N4. Legacy black-bordered tables & text inputs — the same dated
   pattern repeats on cu20 / cu40 / ca06 / ca17 / ca23 (account,
   payment and mail-template pages). */
.thBase, .thBase1, .thBase2, .thBaseOne{
  background-color: var(--mm-page-bg);
  border-color: var(--mm-border);
}
.tdBase, .tdBase1, .tdBase2, .tdBaseOne{ border-color: var(--mm-border); }
.inptText{
  border-color: var(--mm-input-border);
  border-radius: var(--mm-radius-sm);
  transition: border-color var(--mm-transition), box-shadow var(--mm-transition);
}
.inptText:focus, #inptMessage:focus{
  background-color: var(--mm-card-bg);
  border-color: var(--mm-accent);
  box-shadow: 0 0 0 3px rgba(119,72,235,.16);
}

/* N5. Dashboard top cards (cu10) — scoped under the page's layout
   ids: the admin top (ca10) reuses .divArea borderless with its
   own hover (themed in O2). */
#divLayout1st .divArea, #divLayout2nd .divArea{
  background-color: var(--mm-card-bg);
  border-color: var(--mm-border);
  border-radius: var(--mm-radius);
  box-shadow: var(--mm-shadow);
  transition: border-color var(--mm-transition), box-shadow var(--mm-transition);
}
#divLayout1st .divArea:hover, #divLayout2nd .divArea:hover{
  background-color: var(--mm-card-bg);
  border-color: var(--mm-accent);
  box-shadow: var(--mm-shadow-hover);
}
#divLayout1st .divAreaGlayOut, #divLayout2nd .divAreaGlayOut{
  background-color: var(--mm-surface-2);
  color: var(--mm-text-soft);
  border-color: var(--mm-border);
  border-radius: var(--mm-radius);
}
.trRow:hover{ background-color: var(--mm-tint); }   /* identical orig in cu10 + ca10 */
.tdDate, .tdLabel{ border-bottom-color: var(--mm-border); }

/* N6. News & payment rows — the #divTable scope keeps this off the
   admin meta-list-view (ca82), which defines .divRow without a
   #divTable ancestor. */
#divTable .divRow{ border-bottom-color: var(--mm-border); }
#divTable .divRow:hover{ background-color: var(--mm-tint); }
#divPage{ border-bottom-color: var(--mm-border); }
#divPageUnit > a:hover{ color: var(--mm-accent); background-color: var(--mm-tint); }

/* N7. Analytics select form (cu45) — body-class scoped so the extra
   class beats cu45's bare-id/class rules regardless of source order
   (.divLine is unique to cu45; c20 uses #divLine, a different id). */
body.mmp-analytics #divAnalyticsSelectTitle{
  background-color: var(--mm-card-bg);
  border-color: var(--mm-border);
  border-radius: var(--mm-radius-sm);
  box-shadow: var(--mm-shadow);
  color: var(--mm-navy);
}
body.mmp-analytics .divLine{ border-bottom-color: var(--mm-border); }

/* N8. Meta list (cm03) — both scoped: .divTitle exists in 8+ files
   with other meanings (the id^=divTitle_ pattern is unique to this
   page); a81 meta-list-edit rows carry .divMetaListA/B and have
   their own row hover. */
.divTitle[id^="divTitle_"]{
  border-left-color: var(--mm-accent);
  border-bottom-color: var(--mm-border);
}
.divMetaList:not(.divMetaListA):not(.divMetaListB) > a:hover{
  color: var(--mm-accent);
  background-color: var(--mm-tint);
}

/* N9. Meta overview (cm04 / cm04_2, identical selectors) — neon
   green hovers out, charcoal label columns -> brand deep purple
   (white text kept, matching the section C/G convention). */
.divCate4_3 > a:hover, .divCate2Row > a:hover, .divCate1Row > a:hover,
.divCate4_3_fix > a:hover, .divCate1Row_fix > a:hover,
.divCate1Row_regist > a:hover, .divCate4_link > a:hover{
  background-color: var(--mm-tint);
}
.divCate4Title, .divCate2col, .divCate1DiscTrack{
  background-color: var(--mm-accent-deep);
}
#divCate4, #divPack, #divCate3_1, #divCate4Album, #divCate4Album_link,
.divCate2, .divCate2_fix, .divCate1, .divCate1Row, .divCate1Row_fix,
.divCate1Row_regist, .divCate4_Unsharing, .divCate4_Sharing, .divCateCheck{
  border-color: var(--mm-border);
}
.divCate4_UnsharingTitle{ background-color: var(--mm-tint); }
.divCate4_UnsharingCopy{ background-color: #fbdcee; background: color-mix(in srgb, var(--mm-pink) 18%, var(--mm-card-bg)); }      /* hot pink -> soft pink chip */
.divCate4_UnsharingCopy:hover{ background-color: #f6c9e3; background: color-mix(in srgb, var(--mm-pink) 28%, var(--mm-card-bg)); }
.divCate4_UnsharingUncode{ color: var(--mm-red); }
.divTrackOrder:hover{ background-color: var(--mm-tint); }

/* N10. Meta data form (cm05) — the cyan focus/hover family retired
   in favor of the M4 accent ring. .divMetaTitle is scoped via
   .divMetaForm (ca82 reuses the bare class as a grid cell). */
#divMainTitle{
  background-color: var(--mm-accent-deep);
  border-radius: var(--mm-radius-sm);
}
.divMetaForm .divMetaTitle{
  background-color: var(--mm-tint);
  border-left-color: var(--mm-accent);
}
/* required-field badges stay SOLID on purpose — they must out-
   shout the soft status chips (H/N2) */
.spnMetaRequire{ background-color: var(--mm-red); border-radius: 4px; }
.spnMetaRequireAdmin{ background-color: var(--mm-pink); border-radius: 4px; }

.inptMetaString, .inptMetaStringLang, .inptMetaText,
.inptMetaText_admin, .inptMetaShareAble, .divMetaNumber3{
  border-color: var(--mm-input-border);
}
.inptMetaString, .inptMetaText, .inptMetaText_admin{ border-radius: var(--mm-radius-sm); }
.inptMetaStringLang{ border-radius: var(--mm-radius-sm) 0 var(--mm-radius-sm) var(--mm-radius-sm); } /* keep the docked corner */
.inptMetaShare, .divMetaNumber3,
.divMetaDateTime1, .divMetaDateTime2, .divMetaDateTime3{ border-radius: 6px; } /* tiny ~60px cells: 6px, not 8px */
.divMetaDateTime1, .divMetaDateTime2, .divMetaDateTime3{ border-color: var(--mm-border); }
.slctAddLang, #slctAdd{ border-radius: var(--mm-radius-sm); }

.inptMetaString:focus, .inptMetaStringLang:focus, .inptMetaText:focus,
.inptMetaText_admin:focus, .inptMetaShare:focus{
  background-color: var(--mm-card-bg);
  color: var(--mm-text);
  border-color: var(--mm-accent);
  box-shadow: 0 0 0 3px rgba(119,72,235,.16);
}
.lblMetaCheck:hover, .lblMetaRadio:hover, .inptMetaSelect:hover{
  background-color: var(--mm-tint);
  border-color: var(--mm-accent);
}
.divMetaNumUpDown{ color: var(--mm-text-soft); border-color: var(--mm-input-border); }
.divMetaNumUpDown:hover{
  color: var(--mm-accent);
  background-color: var(--mm-tint);
  border-color: var(--mm-accent);
}
/* sibling-hover highlights — selector lists copied verbatim from cm05 */
.divMetaNumber11:hover ~ .divMetaNumber3, .divMetaNumber12:hover ~ .divMetaNumber3,
.divMetaNumber21:hover ~ .divMetaNumber3, .divMetaNumber22:hover ~ .divMetaNumber3,
.divMetaDateTime11:hover ~ .divMetaDateTime31, .divMetaDateTime21:hover ~ .divMetaDateTime31,
.divMetaDateTime41:hover ~ .divMetaDateTime31, .divMetaDateTime51:hover ~ .divMetaDateTime31,
.divMetaDateTime12:hover ~ .divMetaDateTime33, .divMetaDateTime22:hover ~ .divMetaDateTime33,
.divMetaDateTime42:hover ~ .divMetaDateTime33, .divMetaDateTime52:hover ~ .divMetaDateTime33,
.divMetaDateTime13:hover ~ .divMetaDateTime35, .divMetaDateTime23:hover ~ .divMetaDateTime35,
.divMetaDateTime43:hover ~ .divMetaDateTime35, .divMetaDateTime53:hover ~ .divMetaDateTime35{
  background-color: var(--mm-tint);
  border-color: var(--mm-accent);
}
.inptMetaShareDisable{ background-color: var(--mm-red); border-color: var(--mm-red); }
.divMetaAdminCheckGreen{ background-color: #eaf8ee; background: color-mix(in srgb, var(--mm-green) 14%, var(--mm-card-bg)); }
.divMetaAdminCheckRed{ background-color: #fdecec; background: color-mix(in srgb, var(--mm-red) 14%, var(--mm-card-bg)); }
.divAdd{ background-color: var(--mm-surface-2); border-color: var(--mm-border-strong); }  /* cyan add-panel -> clay tint */

/* ============================================================
   O. Stage-D (admin pages) — top / account lists / account forms.
   Reverting this section reverts Stage D (admin half).
   ============================================================ */

/* O1. c10 charcoal button/bar family -> brand deep purple.
   Completes section E (Orange/Green/Blue/Yellow already themed).
   White text is kept, so no contrast rework is needed. */
.ClrBlack, .ClrBlackHover{ background-color: var(--mm-accent-deep); }
.ClrBlackHover:hover{ background-color: var(--mm-accent-deep-h); }

/* O2. Admin top (ca10) — real markup restyle (issue #27 stage ④). The
   three column icons are now inline line-SVG glyphs (person / monitor /
   gear) in a pale-purple disc; a title block sits above the grid; the
   NEWS heading is a navy pill; and each news row trails a chevron.
   :has(> div) still selects ONLY the admin NEWS box — the dashboard
   #divNewsTitle is a text-only BgcClrCorp bar (already themed). The
   #divAreas scope keeps the disc off the dashboard's .divAreaIcon
   (which §R2′ styles). :has() precedent: section C. */

/* O2a. Column icon discs — pale-purple disc, purple line glyph. */
#divAreas .divAreaIcon{
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background-color: var(--mm-primary-tint);
  color: var(--mm-primary);
  display: grid;
  place-items: center;
  margin: 6px auto 0 auto;
}
#divAreas .divAreaIcon svg{ width: 18px; height: 18px; }

/* O2b. Title block — shield-check disc + navy heading + gray subtitle. */
#mmAdminTitle{
  display: flex;
  align-items: center;
  gap: 14px;
  margin: 0 auto 24px auto;
}
#mmAdminTitle .mmAdminTitleIcon{
  width: 46px;
  height: 46px;
  flex: none;
  border-radius: 50%;
  background-color: var(--mm-primary-tint);
  color: var(--mm-primary);
  display: grid;
  place-items: center;
}
#mmAdminTitle .mmAdminTitleIcon svg{ width: 24px; height: 24px; }
#mmAdminTitle h2{ margin: 0; font-size: 20px; color: var(--mm-navy); }
#mmAdminTitle p{ margin: 2px 0 0 0; font-size: 12px; color: var(--mm-text-soft); }

/* O2c. NEWS heading → navy pill (inner div); outer box drops the circle. */
#divNewsTitle:has(> div){
  width: auto;
  height: auto;
  border: 0;
  border-radius: 0;
  margin: 0 0 12px 0;
}
#divNewsTitle:has(> div) > div{
  display: inline-block;
  margin: 0;
  padding: 2px 12px;
  border-radius: var(--mm-radius-pill);
  background-color: var(--mm-navy);
  color: #ffffff;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .06em;
}

/* O2d. News rows — hover wash, hairline + trailing chevron. The last cell
   is plain <td> on admin; the dashboard's is td.tdLabel (excluded via
   :not), so the shared #divNewsTable id does not collide. */
#divAreas .divArea:hover{ background-color: var(--mm-tint); }
.trRow > td{ border-bottom-color: var(--mm-border); }
#divNewsTable tr.trRow td:last-child:not(.tdLabel){ position: relative; padding-right: 26px; }
#divNewsTable tr.trRow td:last-child:not(.tdLabel)::after{
  content: "";
  position: absolute;
  right: 10px;
  top: 50%;
  width: 7px;
  height: 7px;
  border-right: 2px solid var(--mm-text-soft);
  border-bottom: 2px solid var(--mm-text-soft);
  transform: translateY(-70%) rotate(-45deg);
}

/* O3. Admin account lists (ca21_user_list + identical ca21_list_user).
   The #divTable scope keeps #divFilter / #divPages off other pages. */
#divTableTitle{ border-bottom-color: var(--mm-accent); }  /* no-op on cu40 (no border there) */
#divColItem, #divColItem_meta, .divRow1, .divRow1_meta{ border-bottom-color: var(--mm-border); }
#divColItem > a > div, #divColItem_meta > a > div{ border-right-color: var(--mm-input-border); }
.divColBtmLine{ border-bottom-color: var(--mm-input-border); }
#divTable #divFilter, #divTable #divPages{ background-color: var(--mm-tint); }  /* cyan band out */
#divTable #divPages{ border-bottom-color: var(--mm-border); }
#spnSort, #spnSortBr{ background-color: var(--mm-blue); }
#divPagesValue > a:hover{ color: #ffffff; background-color: var(--mm-accent); }
#divTableTitleLeft:hover{ color: #ffffff; background-color: var(--mm-blue); }  /* base .spnBlue is a soft chip (H) — hover goes solid */

/* O4. Admin / account forms (ca17 / ca23 / cu20 / ca06 share the
   pattern; .thBase / .inptText themselves are themed in N4) */
.divChecked{ background-color: var(--mm-accent); border-color: var(--mm-accent); }
.divUnchecked{ color: var(--mm-text-soft); border-color: var(--mm-input-border); }
#aAccessControl{ color: var(--mm-blue-text); }

/* ============================================================
   P. Control states & native widgets — disabled affordance and
   brand color for browser-rendered controls. Visual-only, same
   rules as sections A–O. Generic <select> borders are left to
   page CSS on purpose (.slctAble / .slctDisable own them).
   Reverting this section reverts the batch.
   ============================================================ */

/* P1. Disabled affordance — ja91/ja93/jm05 toggle the attribute
   but nothing showed it. Also cancels the E hover lift and the
   M5 press so dead controls feel dead. */
button:disabled, select:disabled, input:disabled, textarea:disabled{
  opacity: .70;
  cursor: not-allowed;
  box-shadow: none;
}
button:disabled:hover{ box-shadow: none; }
button:disabled:active{ transform: none; }
label:has(input:disabled){ cursor: not-allowed; }

/* P2. Native widgets pick up the brand */
input[type="checkbox"], input[type="radio"], input[type="range"], progress{
  accent-color: var(--mm-accent);
}
::selection{ background-color: rgba(119,72,235,.22); }

/* P3. File picker (admin/reporting upload — the only visible
   input[type=file]; the xlsx uploaders use hidden inputs) */
input[type="file"]::file-selector-button{
  font-family: inherit;
  color: #ffffff;
  background-color: var(--mm-accent);
  border: 0;
  border-radius: var(--mm-radius-sm);
  padding: 6px 14px;
  margin-right: 10px;
  cursor: pointer;
  transition: background-color var(--mm-transition);
}
input[type="file"]::file-selector-button:hover{
  background-color: var(--mm-accent-hover);
}

/* P4. Scrollbars — thin neutral thumb (inherits to a99's inner
   scrollbox) */
:root{ scrollbar-color: var(--mm-gray) transparent; }

/* ============================================================
   Q. Pagination — pill-shaped page links with a solid accent
   current page. Covers a21/a31 (#divPagesValue > a), a82/a30
   (#divPagesValue > div > a) and u40 (#divPageUnit > a).
   Reverting this section reverts the batch.
   ============================================================ */
#divPagesValue > a, #divPagesValue > div > a, #divPageUnit > a{
  color: var(--mm-blue-text);
  border-radius: 25px;
  transition: color var(--mm-transition), background-color var(--mm-transition);
}
#divPagesValue > div > a:hover{   /* a82 nesting; a21's form is in O3 */
  color: #ffffff;
  background-color: var(--mm-accent);
}

/* current page is <span class="spnBlue"> everywhere — solid
   accent stands out against the soft chips (H) */
#divPagesValue > span.spnBlue, #divPagesValue > div > span.spnBlue,
#divPageUnit > span.spnBlue{
  color: #ffffff;
  background-color: var(--mm-accent);
  box-shadow: none;
}

/* a82/a30 legacy cyan bands — O3's #divTable scope misses them
   (their #divPages sits under #divMetaData) */
#divPagesLabel{ background-color: var(--mm-tint); }  /* no-op on a21 (band color is on #divPages) */
#divPagesValue{ background-color: transparent; }
.spnBackNext{ color: var(--mm-text-soft); }

/* ============================================================
   R. Stage-② dashboard home (issue #27) — decorative components that
   have no semantic markup yet, so they are CSS-generated on the dev
   overlay only (real markup + news categories move to the prod stage,
   see ADR-0004). Every selector here is unique to u10html_top.php
   (#divLayout1st/2nd, #divAccount*, #divNewsTable) so no page-scope
   guard is needed. Reverting this section reverts Stage ② home.
   ============================================================ */

/* R1. Account card — refined waveform watermark (issue #27 stage ⑥). Three
   thin sine strokes at graded opacity (0.9 / 0.6 / 0.4) replace the old single
   5px wave, and a horizontal edge fade is baked INTO the SVG via a
   <linearGradient> driving a <mask> — so the watermark dissolves at both left
   and right edges while page content above the card face stays fully unmasked.
   Light purple over the white §E card face; content stays readable above it. */
#divAccount{
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='70' viewBox='0 0 260 70' fill='none'%3E%3Cdefs%3E%3ClinearGradient id='mmWaveFade' x1='0' y1='0' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='white' stop-opacity='0'/%3E%3Cstop offset='0.22' stop-color='white' stop-opacity='1'/%3E%3Cstop offset='0.78' stop-color='white' stop-opacity='1'/%3E%3Cstop offset='1' stop-color='white' stop-opacity='0'/%3E%3C/linearGradient%3E%3Cmask id='mmWaveMask'%3E%3Crect width='260' height='70' fill='url(%23mmWaveFade)'/%3E%3C/mask%3E%3C/defs%3E%3Cg mask='url(%23mmWaveMask)' stroke='%23E7E2F8' stroke-linecap='round' fill='none'%3E%3Cpath stroke-width='2' opacity='0.9' d='M0 26 Q16 10 32 26 T64 26 T96 26 T128 26 T160 26 T192 26 T224 26 T256 26'/%3E%3Cpath stroke-width='1.5' opacity='0.6' d='M0 40 Q16 24 32 40 T64 40 T96 40 T128 40 T160 40 T192 40 T224 40 T256 40'/%3E%3Cpath stroke-width='1' opacity='0.4' d='M0 52 Q16 42 32 52 T64 52 T96 52 T128 52 T160 52 T192 52 T224 52 T256 52'/%3E%3C/g%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center 14px;
}

/* R2′. Card icon discs — the four card icons are now real inline line-SVG
   glyphs (person / card / bar-chart / music-note) centered in a pale-purple
   disc. c90 (loaded last) supplies the disc face + icon color; the svg strokes
   inherit currentColor. */
#divAccountIcon,
#divPayment .divAreaIcon,
#divAnalytics .divAreaIcon,
#divMeta .divAreaIcon{
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background-color: var(--mm-primary-tint);
  color: var(--mm-primary);
  display: grid;
  place-items: center;
  margin: 18px auto 6px auto;
}
#divAccountIcon svg,
#divPayment .divAreaIcon svg,
#divAnalytics .divAreaIcon svg,
#divMeta .divAreaIcon svg{ width: 24px; height: 24px; }

/* R5. Go-arrow badge — a small purple circle with a white arrow, one per card
   (account + the three feature cards). */
.mmGo{
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background-color: var(--mm-primary);
  color: #ffffff;
  display: grid;
  place-items: center;
  margin: 6px auto 14px auto;
}
.mmGo svg{ width: 13px; height: 13px; }
#divPayment .mmGo,
#divAnalytics .mmGo,
#divMeta .mmGo{ align-self: flex-end; }

/* R3′. NEWS category chips — real per-row markup now (span.mmNewsChip carries
   one of three fixed category classes resolved server-side by
   fnctLoad__cnfNewsCategory). Soft tinted pill + deep text per category; sits
   inline before the label text. */
.mmNewsChip{
  display: inline-block;
  margin-right: 10px;
  padding: 1px 9px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 700;
  vertical-align: middle;
  white-space: nowrap;
}
.mmNewsChip--purple{ background-color: var(--mm-primary-tint); color: var(--mm-primary-deep); }
.mmNewsChip--blue{ background-color: #E8EEFC; color: var(--mm-func-blue-deep); }
.mmNewsChip--gray{ background-color: #EDEDF2; color: #565666; }

/* NEWS row chevron — a hairline caret trailing each row's label cell (mock
   .chev), hinting the row is a link into the news detail. */
#divNewsTable tr.trRow td.tdLabel{ position: relative; padding-right: 20px; }
#divNewsTable tr.trRow td.tdLabel::after{
  content: "";
  position: absolute;
  right: 8px;
  top: 50%;
  width: 7px;
  height: 7px;
  border-right: 2px solid var(--mm-text-soft);
  border-bottom: 2px solid var(--mm-text-soft);
  transform: translateY(-70%) rotate(-45deg);
}

/* NEWS「すべて見る」link — purple text (label set by ju10_top.js innerHTML). */
#divNewsMore{
  color: var(--mm-primary-deep);
  font-size: 12px;
  font-weight: 700;
}

/* R4′. Catch-copy band — a real #divCatchBand element after the feature cards
   (since §U4 it is also the promo link itself). Navy→purple gradient,
   white text, a small waveform mark on the left and a faint decorative waveform
   on the right (hidden ≤760px). Bars are precomputed static SVG (no runtime JS),
   and the band has no animation, so it is reduced-motion safe by construction. */
#divCatchBand{
  display: flex;
  align-items: center;
  gap: 20px;
  position: relative;
  overflow: hidden;
  margin: 24px 0;
  padding: 26px 28px;
  box-sizing: border-box;
  border-radius: var(--mm-radius-lg);
  background-image: var(--mm-banner);
  color: #ffffff;
}
#divCatchBand .mmCatchMark{
  width: 52px;
  height: 52px;
  flex: none;
  border-radius: 13px;
  background-image: linear-gradient(135deg,#8A5CF6,#6432E0);
  display: grid;
  place-items: center;
  box-shadow: 0 4px 14px rgba(0,0,0,.3);
}
#divCatchBand .mmCatchMark svg{ width: 30px; height: 20px; fill: currentColor; }
#divCatchBand .mmCatchCopy{
  margin: 0;
  font-size: 18px;
  font-weight: 800;
  font-style: italic;
  letter-spacing: .04em;
  line-height: 1.5;
}
#divCatchBand .mmCatchWave{
  position: absolute;
  right: 14px;
  top: 0;
  bottom: 0;
  width: 34%;
  color: rgba(255,255,255,.35);
  display: flex;
  align-items: center;
  /* stage ⑥: consistent horizontal edge fade — the decorative waveform now
     dissolves into the band on both sides instead of a hard vertical cut,
     matching the §R1 account watermark's baked-in gradient treatment. */
  -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 26%, #000 86%, transparent 100%);
  mask-image: linear-gradient(to right, transparent 0%, #000 26%, #000 86%, transparent 100%);
}
#divCatchBand .mmCatchWave svg{ display: block; width: 100%; height: 100%; fill: currentColor; }
#divCatchBand .mmCatchCaption{
  position: absolute;
  right: 24px;
  bottom: 10px;
  font-size: 11px;
  letter-spacing: .3em;
  font-weight: 700;
  color: rgba(255,255,255,.85);
}
@media screen and (max-width: 760px){
  #divCatchBand .mmCatchWave{ display: none; }
}

/* ============================================================
   S. Button leading icons (issue #27, stage ④) — a single
   currentColor line-glyph rendered via ::before on any element
   whose class contains "mmIco*". The glyph is a 24x24 stroke SVG
   used as a mask, so it inherits the button's text color (mask
   alpha, not the stub stroke) and one rule set serves every button
   variant. Legacy raster <img> glyphs inside such buttons are
   hidden. jm04_overview_edit.js rewrites the className of
   #btnTsv/#btnImg/#btnImgDownload at runtime, so those can never
   carry an mmIco class — they get their glyph by ID here instead.
   Gated behind @supports so browsers without CSS masks simply show
   the label with no glyph. Reverting §S removes all button icons.
   ============================================================ */
@supports ((-webkit-mask-repeat: no-repeat) or (mask-repeat: no-repeat)){
  [class*="mmIco"]::before,
  #btnTsv::before, #btnImg::before, #btnImgDownload::before{
    content: "";
    display: inline-block;
    width: 14px;
    height: 14px;
    margin-right: 7px;
    vertical-align: -2px;
    background-color: currentColor;
    -webkit-mask: var(--mmIco) center / contain no-repeat;
    mask: var(--mmIco) center / contain no-repeat;
  }
  [class*="mmIco"] > img{ display: none; }
  .mmIcoSolo::before{ margin-right: 0; }
}

/* glyphs — 24x24 stroke line-icons; the stub stroke color is
   irrelevant (mask alpha carries the shape, currentColor the fill).
   The first eight are lifted from the approved mock; the rest are
   drawn to match (same 24x24 grid, round caps/joins). */
.mmIcoLogout{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4H7.5A1.5 1.5 0 0 0 6 5.5v13A1.5 1.5 0 0 0 7.5 20H14M10.5 12H21M17.5 8.5 21 12l-3.5 3.5'/%3E%3C/svg%3E") }
.mmIcoBack{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 12H6M11 6.5 5.5 12l5.5 5.5'/%3E%3C/svg%3E") }
.mmIcoLogin{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 4h6.5A1.5 1.5 0 0 1 18 5.5v13a1.5 1.5 0 0 1-1.5 1.5H10M3 12h10.5M7 8.5 10.5 12 7 15.5'/%3E%3C/svg%3E") }
.mmIcoSave{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z'/%3E%3Cpath d='M17 21v-8H7v8M7 3v5h8'/%3E%3C/svg%3E") }
.mmIcoAdd{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") }
.mmIcoDelete{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M10 11v6M14 11v6'/%3E%3C/svg%3E") }
.mmIcoList{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 6h12M8 12h12M8 18h12M4 6h.01M4 12h.01M4 18h.01'/%3E%3C/svg%3E") }
.mmIcoDownload{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v10M8 10l4 4 4-4M4 19h16'/%3E%3C/svg%3E") }
.mmIcoUpload{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20V10M8 14l4-4 4 4M4 5h16'/%3E%3C/svg%3E") }
.mmIcoSend{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 4 3.6 10.6l5.9 2.2L20 5.5l-7.6 8.3 2 5.7Z'/%3E%3C/svg%3E") }
.mmIcoSearch{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20 20l-4-4'/%3E%3C/svg%3E") }
.mmIcoView{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12c2.5-4.5 6-7 10-7s7.5 2.5 10 7c-2.5 4.5-6 7-10 7s-7.5-2.5-10-7Z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") }
.mmIcoCheck{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5 9.5 18 20 6'/%3E%3C/svg%3E") }
.mmIcoEdit{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m14.5 5.5 4 4L8 20H4v-4Z'/%3E%3Cpath d='m12.5 7.5 4 4'/%3E%3C/svg%3E") }
.mmIcoSetting{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3.2'/%3E%3Cpath d='M12 3.5v2.4M12 18.1v2.4M3.5 12h2.4M18.1 12h2.4M6 6l1.7 1.7M16.3 16.3 18 18M18 6l-1.7 1.7M7.7 16.3 6 18'/%3E%3C/svg%3E") }
.mmIcoDoc{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.5 3.5H7A1.5 1.5 0 0 0 5.5 5v14A1.5 1.5 0 0 0 7 20.5h10a1.5 1.5 0 0 0 1.5-1.5V8.5Z'/%3E%3Cpath d='M13.5 3.5v5h5'/%3E%3C/svg%3E") }

/* jm04 runtime-classed buttons (see §S note): glyph assigned by ID.
   TSV / image-download export → download; image preview → view. */
#btnTsv{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v10M8 10l4 4 4-4M4 19h16'/%3E%3C/svg%3E") }
#btnImgDownload{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v10M8 10l4 4 4-4M4 19h16'/%3E%3C/svg%3E") }
#btnImg{ --mmIco:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12c2.5-4.5 6-7 10-7s7.5 2.5 10 7c-2.5 4.5-6 7-10 7s-7.5-2.5-10-7Z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") }

/* ============================================================
   T. Micro-polish (issue #27, stage ④) — list-table & form-field
   refinement. APPEND-ONLY overrides layered AFTER §N (whose rule
   bodies are left intact); later source order wins. Two new tokens
   are declared in a second :root block (multiple :root are legal —
   later wins). Selector lists are reused from §N (meta / list /
   account screens). Login inputs (.inptStyle) are deliberately
   EXCLUDED — their styling is already correct — as are the generic
   .slctAble / .slctDisable selects (§P leaves those to page CSS).
   The §M / §N accent focus ring is preserved: each :focus rule out-
   specifies the T4 base and does not restate border-width, so the
   1.5px border keeps the purple ring on focus. Reverting §T reverts
   the micro-polish.
   ============================================================ */
:root{
  --mm-th-bg:     #FAFAFD;   /* list-table header face (mock .mt th) */
  --mm-hover-row: #F7F5FE;   /* list-table row hover — lighter than --mm-tint */
}

/* T1. List-table headers — soft gray caps text on the th-bg fill. */
.thBase, .thBase1, .thBase2, .thBaseOne{
  background-color: var(--mm-th-bg);
  color: var(--mm-text-soft);
  font-size: 11px;
  letter-spacing: .05em;
}

/* T2. Row hover — a lighter wash than the §N selection tint. */
.trRow:hover, #divTable .divRow:hover{ background-color: var(--mm-hover-row); }

/* T3. Table data cells — lined-up figures. */
.tdBase, .tdBase1, .tdBase2, .tdBaseOne, .trRow > td{ font-variant-numeric: tabular-nums; }

/* T4. Form fields (account / mail / meta screens; login excluded) — a
   1.5px hairline-strong border at the small radius (mock .fm inputs). */
.inptText, #inptMessage,
.inptMetaString, .inptMetaStringLang, .inptMetaText, .inptMetaText_admin,
.inptMetaShare, .inptMetaShareAble, .inptMetaSelect, .slctAddLang, #slctAdd{
  border: 1.5px solid var(--mm-input-border);
  border-radius: var(--mm-radius-sm);
}

/* ============================================================
   U. a10 function colors + u10 NEWS heading (issue #27, stage ⑤)
   APPEND-ONLY, layered after §T. U1 is a new global teal button
   family (used only on a10 for now; mirrors the §E Clr* pattern).
   U2 is a10-scoped via #divAreas (a10-only id — §O2 precedent);
   .ClrBlueLine is used by 15 templates and must NEVER be
   recolored globally. U3 targets the u10 NEWS heading only:
   u10's #divNewsTitle has no inner <div>, so it is mutually
   exclusive with the a10 pill rule #divNewsTitle:has(> div) in
   §O2c (do not touch that rule). Reverting §U reverts stage ⑤.
   ============================================================ */

/* U1. Teal button family — 各種設定 column (mock o-t / f-t).
   color is explicit: c51 .btnSize1/.btnSize2 set #fff and c90
   loads last, but new classes must not depend on that. */
.ClrTeal, .ClrTealHover{
  color: #fff;
  background-color: var(--mm-teal);
  border: 1px solid var(--mm-teal);
}
.ClrTealHover:hover{ background-color: #0A6B61; }
.ClrTealLine, .ClrTealLineHover{
  color: var(--mm-teal);
  background-color: #fff;
  border: 1px solid #A9D8D2;
}
.ClrTealLineHover:hover{ background-color: #E3F3F1; }

/* U2. a10-scoped outline tuning (pale brand borders, mock o-p/o-b);
   §E maps --mm-blue-text to purple-deep, so restate blue text here.
   The purple-outline hover drops c00's cream wash for the tint. */
#divAreas .BrdClrCorp, #divAreas .BrdClrCorpHover{ border-color: #C9B8F7; }
#divAreas .BrdClrCorpHover:hover{ background-color: var(--mm-primary-tint); }
#divAreas .ClrBlueLine, #divAreas .ClrBlueLineHover{
  color: var(--mm-func-blue-deep);
  border-color: #B9C9F2;
}

/* U3. u10 NEWS heading: purple bar → transparent navy heading
   (mock .news-head h3). .BgcClrCorp qualifier = (1,1,0), beats
   cu10_top2.css #divNewsTitle (1,0,0) and §E .BgcClrCorp (0,1,0). */
#divNewsTitle.BgcClrCorp{
  background-color: transparent;
  color: var(--mm-navy);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: .06em;
  text-align: left;
  padding: 10px 14px;
}

/* U4. u10 promo de-duplication: the catch band is now the ad link
   itself (a#aCatchBand wraps #divCatchBand in u10html_top; the old
   #divBanner banner.png carried the same creative and is gone).
   Keep the link wrapper visually inert. Also: cu10_top2.css fixes
   #divLayout2nd at 185/130/90px, shorter than the redesigned cards,
   so the band painted over the card bottoms at ≤576px — let the
   grid grow with content (same 1-id specificity, c90 loads later). */
a#aCatchBand{
  display: block;
  color: inherit;
  text-decoration: none;
}
#divLayout2nd{ height: auto; }

/* ============================================================
   V. Stage-⑥ content cards (issue #27) — APPEND-ONLY, after §U.
   Each content screen's main block becomes a card FACE: white bg,
   hairline border, 14px radius, soft drop shadow, 24px padding.
   EVERY rule is body.mmp-<route> scoped because the container ids
   (#divTable / .divMainArea / #divOverview / .divMetaForm /
   #content_center) are REUSED across pages — the per-route body
   class stamped by the heads (html102_UserHead / html105_AdminHead
   / p105) keeps each card off the others. Table/form INNER visuals
   stay as themed in §N / §T / §Q; §V only adds the outer container.
   Reverting §V reverts stage-⑥ content cards.
   ============================================================ */

/* V1. Dashboard content screens (mmp-<script> from html102_UserHead). */
body.mmp-account #divTable,
body.mmp-analytics #divTable,
body.mmp-payment #divTable,
body.mmp-news #divTable,
body.mmp-meta .divMainArea,
body.mmp-meta_list .divMainArea,
body.mmp-meta_overview #divOverview,
body.mmp-meta_data .divMetaForm,
/* token-guarded link screens — same containers, CSS presence only
   (reached behind a mail token, not e2e-assertable in-harness). */
body.mmp-meta_overview_link #divOverview,
body.mmp-meta_data_link .divMetaForm,
body.mmp-ilcj_get_shipment #content_center{
  background: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius-lg);
  box-shadow: var(--mm-shadow);
  padding: var(--mm-space-4);
  box-sizing: border-box;
}

/* V2. Admin content screens (mmp-<script> from html105_AdminHead / p105).
   Containers resolved from the rendered DOM: list & form screens → #divTable,
   meta index → #divMeta, in/out setting → #divInOut, key & setout/setin edit
   forms → #divForm, meta list/detail wrappers → .divMainArea, reporting
   dashboard → .reporting-container, meta data/overview detail (m05/m04) →
   .divMetaForm / #divOverview, the log dump → its <pre>. `top` is excluded
   (its cards are §O2). */
body.mmp-accounts #divTable,
body.mmp-accounts_id #divTable,
body.mmp-accounts_new #divTable,
body.mmp-admin_accounts_id #divTable,
body.mmp-admin_accounts_new #divTable,
body.mmp-mail_replace #divTable,
body.mmp-mail_template #divTable,
body.mmp-meta_account #divTable,
body.mmp-meta_account_id .divMainArea,
body.mmp-meta_account_id_data .divMetaForm,
body.mmp-meta_account_id_list .divMainArea,
body.mmp-meta_account_id_overview #divOverview,
body.mmp-meta_change_parent .divMainArea,
body.mmp-meta_data .divMetaForm,
body.mmp-meta_fix_data .divMetaForm,
body.mmp-meta_fix_overview #divOverview,
body.mmp-meta_list_edit .divMainArea,
body.mmp-meta_list_view .divMainArea,
body.mmp-meta_list_view_temp .divMainArea,
body.mmp-meta_overview #divOverview,
body.mmp-meta_setout_edit #divForm,
body.mmp-meta_setout_list #divTable,
body.mmp-meta_setting_key #divForm,
body.mmp-reporting .reporting-container,
body.mmp-reporting_support .divMainArea,
body.mmp-terms #divTable,
body.mmp-log_view pre,
body.mmp-ilcj_output_shipment .divMainArea,
/* remote-CSS (p105) screens — themed on a real dev deploy; rule kept here for
   parity, but their render is fetched from the remote host so it is not
   e2e-probed in the localhost harness (CSS presence proven instead). */
body.mmp-admin_accounts #divTable,
body.mmp-reports_mail #divTable,
body.mmp-meta_setin_list #divTable,
body.mmp-meta_setin_assign_list #divTable,
body.mmp-meta_setin_assign_edit #divTable,
body.mmp-meta_setin_edit #divForm,
body.mmp-setting_mails_send #divTable,
body.mmp-setting_mails_replace_body #divTable,
body.mmp-accounts_id_ac_map #divTable{
  background: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius-lg);
  box-shadow: var(--mm-shadow);
  padding: var(--mm-space-4);
  box-sizing: border-box;
}

/* ============================================================
   W. Stage-⑥b meta hub/list cards (issue #27) — APPEND-ONLY,
   after §V. The two admin hubs (meta / meta_setting) render
   a.mmHubCard nav-cards in an .mmHubGrid under .mmHubHead
   headings; the cards ARE the card faces there, so the §V2
   outer card behind them (the mmp-meta hub's own container and
   the mmp-meta_setting one) is retired from the list above.
   The shared user/admin meta lists (m02html_meta)
   become .mmMetaRow card rows INSIDE the §V .divMainArea card,
   and the jm02-owned empty title divs / ilcj shipment button
   get their glyphs via the §S mask ::before (jm02 rewrites
   their innerHTML, so no child markup is allowed). All new
   classes — no shared-container layout is touched. Reverting
   §W reverts stage ⑥b.
   ============================================================ */

/* W1. Hub heading + responsive 2-col card grid. */
.mmHubHead{
  margin: 40px 0 14px;
  text-align: left;
  font-size: 17px;
  font-weight: 700;
  color: var(--mm-navy);
}
.mmHubGrid{
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}
@media screen and (max-width: 600px){
  .mmHubGrid{ grid-template-columns: minmax(0, 1fr); }
}

/* W2. Nav card: icon disc + label on a card face. */
.mmHubCard{
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px 20px;
  background-color: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius-lg);
  box-shadow: var(--mm-shadow);
  color: var(--mm-text);
  transition: border-color var(--mm-transition), box-shadow var(--mm-transition);
}
.mmHubCard:hover{
  border-color: var(--mm-accent);
  box-shadow: var(--mm-shadow-hover);
}
.mmHubIcon{
  flex: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: var(--mm-primary-tint);
  color: var(--mm-primary);
  display: grid;
  place-items: center;
}
.mmHubIcon::before{
  width: 20px;
  height: 20px;
  margin: 0;
}
.mmHubLabel{
  font-size: 14px;
  font-weight: 600;
}

/* W3. m02 meta list headings — jm02 fills these EMPTY divs with
   text, so the leading glyph is the §S mask ::before (sized up
   here); the heavy black left/bottom bars become one hairline. */
#divTitleList, #divTitlePend, #divTitleNew{
  border-left: 0;
  border-bottom: 1px solid var(--mm-border);
  color: var(--mm-navy);
  font-size: 18px;
  padding-bottom: 8px;
}
#divTitleList::before, #divTitlePend::before, #divTitleNew::before{
  width: 20px;
  height: 20px;
  margin-right: 10px;
  vertical-align: -4px;
}

/* W4. Meta list rows — each anchor becomes a card row. The
   .divMetaList display is page-scoped (class reused elsewhere). */
body.mmp-meta .divMetaList,
body.mmp-meta_account_id .divMetaList{ display: block; }
.mmMetaRow{
  margin-top: 12px;
  background-color: var(--mm-card-bg);
  border: 1px solid var(--mm-border);
  border-radius: var(--mm-radius-lg);
  box-shadow: var(--mm-elev-1);
  transition: border-color var(--mm-transition), box-shadow var(--mm-transition);
}
.mmMetaRow:hover{
  border-color: var(--mm-accent);
  box-shadow: var(--mm-shadow-hover);
}
.mmMetaRow > a{
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  font-size: 15px;
  color: var(--mm-text);
  word-break: break-all;
}
.mmMetaRow .spnWait,
.mmMetaRow .spnRetry,
.mmMetaRow .spnChild{
  flex: none;
  top: 0;
}

/* W5. ilcj shipment button — replaces the retired inline styles
   (block alignment) and themes the BgcClrCorpHover anchor. */
#divIlcjButton{
  width: 100%;
  text-align: right;
}
#divIlcjButton a{
  display: inline-block;
  padding: 6px 14px;
  border-radius: var(--mm-radius-sm);
  color: #fff;
  font-size: 13px;
}
