/* DOING unified visual system — public, tenant admin, platform and utility pages */
:root{
  --doing-bg:#fff9f8;--doing-paper:#fffdfd;--doing-ink:#38333f;--doing-muted:#756e7b;
  --doing-line:rgba(105,83,116,.16);--doing-primary:#df7db5;--doing-primary-dark:#bd5f95;
  --doing-blue:#bfeaf7;--doing-pink:#ffd3e5;--doing-yellow:#ffe77f;--doing-green:#dff3b7;--doing-purple:#e4d2f7;
  --doing-radius:24px;--doing-shadow:0 18px 48px rgba(95,73,108,.12);
  --bg:var(--doing-bg);--paper:var(--doing-paper);--ink:var(--doing-ink);--muted:var(--doing-muted);--line:var(--doing-line);
  --main:var(--doing-primary);--main2:var(--doing-primary-dark);--brand:var(--doing-primary);--brand-dark:var(--doing-primary-dark);
  --blue:var(--doing-blue);--pink:var(--doing-pink);--yellow:var(--doing-yellow);--green:var(--doing-green);--mint:var(--doing-green);--purple:var(--doing-purple);
  --shadow:var(--doing-shadow);--shadow2:0 26px 70px rgba(95,73,108,.2)
}
html[data-doing-theme="fresh_minimal"]{--doing-bg:#f7fbfa;--doing-paper:#fff;--doing-ink:#24363a;--doing-muted:#6d7b7d;--doing-line:#dbe8e6;--doing-primary:#65b9b4;--doing-primary-dark:#388e8b;--doing-blue:#dff4f4;--doing-pink:#f7e9ed;--doing-yellow:#f4edcf;--doing-green:#e0f1e8;--doing-purple:#e9e7f2;--doing-radius:18px;--doing-shadow:0 12px 34px rgba(45,77,78,.08)}
html[data-doing-theme="mono_anime"]{--doing-bg:#f4f4f4;--doing-paper:#fff;--doing-ink:#171717;--doing-muted:#626262;--doing-line:#222;--doing-primary:#202020;--doing-primary-dark:#000;--doing-blue:#e8e8e8;--doing-pink:#f2f2f2;--doing-yellow:#dedede;--doing-green:#ededed;--doing-purple:#d9d9d9;--doing-radius:12px;--doing-shadow:7px 7px 0 #1b1b1b}
html[data-doing-theme="warm_handmade"]{--doing-bg:#fbf6ed;--doing-paper:#fffdf7;--doing-ink:#493d33;--doing-muted:#7f6f60;--doing-line:#e3d2bc;--doing-primary:#cc8b61;--doing-primary-dark:#9a6849;--doing-blue:#dce9e2;--doing-pink:#efd9cd;--doing-yellow:#f3dfaa;--doing-green:#dce5c8;--doing-purple:#dfd3df;--doing-radius:20px;--doing-shadow:0 16px 36px rgba(100,73,51,.12)}
html[data-doing-theme="vivid_pop"]{--doing-bg:#fff7ef;--doing-paper:#fff;--doing-ink:#342f47;--doing-muted:#716a7d;--doing-line:#d9caea;--doing-primary:#ef5ca7;--doing-primary-dark:#b93683;--doing-blue:#8ee8ff;--doing-pink:#ff9fd1;--doing-yellow:#ffe254;--doing-green:#b8ef62;--doing-purple:#bf9bff;--doing-radius:22px;--doing-shadow:0 17px 0 rgba(105,67,145,.12)}

body:not(.doing-public-refactor-body){background:radial-gradient(circle at 5% 0,var(--doing-pink),transparent 24%),radial-gradient(circle at 96% 8%,var(--doing-blue),transparent 24%),var(--doing-bg)!important;color:var(--doing-ink)!important}
body:not(.doing-public-refactor-body) header,body:not(.doing-public-refactor-body) .topbar{background:rgba(255,253,253,.93)!important;border-bottom:1px solid var(--doing-line)!important;box-shadow:0 8px 24px rgba(91,70,103,.06)!important;backdrop-filter:blur(18px)!important}
body:not(.doing-public-refactor-body) .card,body:not(.doing-public-refactor-body) .session-card,body:not(.doing-public-refactor-body) .report-card,body:not(.doing-public-refactor-body) .login-card,body:not(.doing-public-refactor-body) .loginbox,body:not(.doing-public-refactor-body) .panel,body:not(.doing-public-refactor-body) .modalbox{border:1px solid var(--doing-line)!important;border-radius:var(--doing-radius)!important;background:var(--doing-paper)!important;box-shadow:var(--doing-shadow)!important}
body:not(.doing-public-refactor-body) button,body:not(.doing-public-refactor-body) .btn{border:3px solid rgba(255,255,255,.86)!important;border-radius:999px!important;background:linear-gradient(145deg,color-mix(in srgb,var(--doing-primary) 72%,white),var(--doing-primary))!important;color:#fff!important;font-weight:950!important;box-shadow:inset 3px 4px 7px rgba(255,255,255,.48),0 8px 17px rgba(98,72,108,.13)!important;transition:transform .16s ease,filter .16s ease!important}
body:not(.doing-public-refactor-body) button:hover,body:not(.doing-public-refactor-body) .btn:hover{transform:translateY(-2px);filter:saturate(1.08)}
body:not(.doing-public-refactor-body) button.secondary,body:not(.doing-public-refactor-body) .btn.secondary,body:not(.doing-public-refactor-body) .btn.outline{background:linear-gradient(145deg,#fff,var(--doing-blue))!important;color:var(--doing-ink)!important;border-color:#fff!important}
body:not(.doing-public-refactor-body) button.danger,body:not(.doing-public-refactor-body) .btn.danger{background:linear-gradient(145deg,#f58d99,#ca5e68)!important}
body:not(.doing-public-refactor-body) input,body:not(.doing-public-refactor-body) select,body:not(.doing-public-refactor-body) textarea{border:1px solid var(--doing-line)!important;border-radius:14px!important;background:rgba(255,255,255,.94)!important;color:var(--doing-ink)!important;box-shadow:inset 0 2px 6px rgba(91,69,101,.04)!important}
body:not(.doing-public-refactor-body) input:focus,body:not(.doing-public-refactor-body) select:focus,body:not(.doing-public-refactor-body) textarea:focus{outline:3px solid color-mix(in srgb,var(--doing-primary) 22%,transparent)!important;border-color:var(--doing-primary)!important}
body:not(.doing-public-refactor-body) .pill,body:not(.doing-public-refactor-body) .badge,body:not(.doing-public-refactor-body) .chip{border-color:#fff!important;box-shadow:inset 2px 2px 4px rgba(255,255,255,.6),0 4px 10px rgba(91,69,101,.06)!important}
body:not(.doing-public-refactor-body) .settings-tile{border:3px solid #fff!important;border-radius:var(--doing-radius)!important;background:linear-gradient(145deg,#fff,var(--doing-pink))!important;box-shadow:inset 3px 4px 7px rgba(255,255,255,.62),var(--doing-shadow)!important}
body:not(.doing-public-refactor-body) .settings-tile:nth-child(3n+2){background:linear-gradient(145deg,#fff,var(--doing-blue))!important}body:not(.doing-public-refactor-body) .settings-tile:nth-child(3n+3){background:linear-gradient(145deg,#fff,var(--doing-yellow))!important}
body:not(.doing-public-refactor-body) .tabs{background:linear-gradient(145deg,var(--doing-pink),var(--doing-blue))!important;border:3px solid #fff!important;box-shadow:var(--doing-shadow)!important}body:not(.doing-public-refactor-body) .tabs .tab{background:rgba(255,255,255,.82)!important;color:var(--doing-ink)!important}body:not(.doing-public-refactor-body) .tabs .tab.active{background:linear-gradient(145deg,var(--doing-primary),var(--doing-primary-dark))!important;color:#fff!important}
body:not(.doing-public-refactor-body) h1,body:not(.doing-public-refactor-body) h2,body:not(.doing-public-refactor-body) h3{color:var(--doing-ink)!important;letter-spacing:-.025em}
.doing-word-logo{display:inline-flex;align-items:center;gap:.04em;color:#fff;font-weight:1000;letter-spacing:.06em;text-shadow:0 3px 0 rgba(109,72,128,.22)}
.doing-unread{display:none;min-width:22px;height:22px;padding:0 6px;place-items:center;border:2px solid #fff;border-radius:999px;background:#ee557e;color:#fff;font-size:12px;font-weight:1000;line-height:1}.doing-unread.show{display:inline-grid}
.doing-theme-grid{display:grid;grid-template-columns:repeat(5,minmax(150px,1fr));gap:12px}.doing-theme-card{position:relative;min-height:176px;padding:12px!important;display:grid!important;align-content:space-between;text-align:left!important;border:4px solid #fff!important;border-radius:24px!important;color:#3b3540!important}.doing-theme-card.active{outline:4px solid var(--doing-primary)!important;outline-offset:2px}.doing-theme-card b{font-size:17px}.doing-theme-card small{color:#6e6674}.doing-theme-card .preview{height:88px;border-radius:17px;padding:9px;display:grid;grid-template-columns:28% 1fr;gap:8px;background:#fff9;border:2px solid #fff;box-shadow:0 7px 15px #0001}.doing-theme-card .preview i{border-radius:11px;background:currentColor;opacity:.45}.doing-theme-card .preview span{display:grid;gap:6px}.doing-theme-card .preview span:before,.doing-theme-card .preview span:after{content:"";display:block;border-radius:999px;background:currentColor;opacity:.35}.theme-cute{background:linear-gradient(135deg,#ffd6e7,#c9eff8,#fff0ae)!important}.theme-fresh{background:linear-gradient(135deg,#eef8f6,#fff,#dff4f2)!important}.theme-mono{background:#fff!important;border-color:#1d1d1d!important;box-shadow:6px 6px 0 #1d1d1d!important}.theme-warm{background:linear-gradient(135deg,#f5e5ce,#fffaf0,#dfe8cc)!important}.theme-pop{background:linear-gradient(135deg,#ff9fd1,#8ee8ff,#ffe254)!important}
.doing-support-layout{display:grid;grid-template-columns:minmax(240px,.65fr) minmax(0,1.35fr);gap:12px;min-height:480px}.doing-thread-list{display:grid;align-content:start;gap:8px;max-height:560px;overflow:auto}.doing-thread{width:100%;padding:12px!important;text-align:left!important;background:#fff!important;color:var(--doing-ink)!important;border:1px solid var(--doing-line)!important;border-radius:16px!important}.doing-thread.active{outline:3px solid color-mix(in srgb,var(--doing-primary) 30%,transparent)!important}.doing-chat{display:grid;grid-template-rows:1fr auto;min-height:460px}.doing-messages{display:flex;flex-direction:column;gap:9px;overflow:auto;padding:12px;max-height:470px;border:1px solid var(--doing-line);border-radius:18px;background:rgba(255,255,255,.66)}.doing-message{max-width:82%;padding:10px 13px;border-radius:17px;background:var(--doing-blue);align-self:flex-start}.doing-message.mine{align-self:flex-end;background:var(--doing-pink)}.doing-message small{display:block;margin-top:4px;color:var(--doing-muted)}.doing-composer{display:grid;grid-template-columns:1fr auto;gap:8px;margin-top:10px}.doing-composer textarea{min-height:72px!important;resize:vertical}
.doing-message>div{white-space:pre-wrap;overflow-wrap:anywhere}
html[data-doing-theme="mono_anime"] body:not(.doing-public-refactor-body) button,html[data-doing-theme="mono_anime"] body:not(.doing-public-refactor-body) .btn{border:2px solid #111!important;box-shadow:4px 4px 0 #111!important}html[data-doing-theme="mono_anime"] body:not(.doing-public-refactor-body) .card{border:2px solid #111!important}
@media(max-width:980px){.doing-theme-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.doing-theme-grid{grid-template-columns:1fr}.doing-support-layout{grid-template-columns:1fr}.doing-thread-list{max-height:220px}.doing-chat{min-height:380px}.doing-messages{max-height:350px}}

/* 2026-08-15 — DOING whole-product visual shell.
   Keeps tenant theme tokens intact while making every operating surface feel
   like the same finished product on desktop and mobile. */
.doing-app{
  min-height:100vh;
  background:
    radial-gradient(circle at -5% -2%,color-mix(in srgb,var(--doing-pink) 72%,transparent),transparent 25rem),
    radial-gradient(circle at 105% 4%,color-mix(in srgb,var(--doing-blue) 72%,transparent),transparent 27rem),
    linear-gradient(180deg,#fff 0,var(--doing-bg) 44%,color-mix(in srgb,var(--doing-purple) 18%,#fff) 100%)!important;
  color:var(--doing-ink)!important;
}
.doing-app:before{content:"";position:fixed;z-index:-1;inset:0;pointer-events:none;background-image:radial-gradient(circle,rgba(255,255,255,.72) 0 3px,transparent 4px);background-size:42px 42px;mask-image:linear-gradient(to bottom,#0005,transparent 42%)}
.doing-app>header,.doing-app>.topbar,.doing-app .top{
  border-top:5px solid transparent!important;
  border-image:linear-gradient(90deg,var(--doing-pink),var(--doing-yellow),var(--doing-green),var(--doing-blue),var(--doing-purple)) 1!important;
  background:rgba(255,255,255,.9)!important;
  box-shadow:0 9px 30px rgba(89,65,104,.09)!important;
  backdrop-filter:blur(20px)!important;
}
.doing-product-title{display:flex;align-items:center;gap:12px;min-width:0}.doing-product-title img{width:50px;height:50px;object-fit:contain;filter:drop-shadow(0 8px 13px rgba(92,68,108,.15))}.doing-product-title>div{min-width:0}.doing-product-title h1{font-size:clamp(22px,2vw,30px)!important;line-height:1.15!important}.doing-product-title .muted{margin-top:3px}
.doing-app .wrap,.doing-app .shell,.doing-app main{position:relative}
.doing-app .card,.doing-app .panel,.doing-app .session-card,.doing-app .report-card,.doing-app .login-card,.doing-app .loginbox,.doing-app .modal,.doing-app .modalbox{
  border:3px solid rgba(255,255,255,.92)!important;
  border-radius:26px!important;
  background:rgba(255,255,255,.9)!important;
  box-shadow:0 15px 42px rgba(88,66,103,.1)!important;
}
.doing-app .card:nth-of-type(4n+1),.doing-app .panel:nth-of-type(4n+1){background:linear-gradient(145deg,rgba(255,255,255,.98),color-mix(in srgb,var(--doing-pink) 45%,white))!important}
.doing-app .card:nth-of-type(4n+2),.doing-app .panel:nth-of-type(4n+2){background:linear-gradient(145deg,rgba(255,255,255,.98),color-mix(in srgb,var(--doing-blue) 45%,white))!important}
.doing-app .card:nth-of-type(4n+3),.doing-app .panel:nth-of-type(4n+3){background:linear-gradient(145deg,rgba(255,255,255,.98),color-mix(in srgb,var(--doing-yellow) 40%,white))!important}
.doing-app .card:nth-of-type(4n),.doing-app .panel:nth-of-type(4n){background:linear-gradient(145deg,rgba(255,255,255,.98),color-mix(in srgb,var(--doing-green) 42%,white))!important}
.doing-app button,.doing-app .btn{
  min-height:46px!important;border:3px solid rgba(255,255,255,.9)!important;border-radius:999px!important;
  background:linear-gradient(145deg,color-mix(in srgb,var(--doing-primary) 62%,white),var(--doing-primary))!important;
  color:#fff!important;font-weight:950!important;
  box-shadow:inset 3px 4px 7px rgba(255,255,255,.48),0 8px 18px rgba(92,66,106,.13)!important;
}
.doing-app button.secondary,.doing-app .btn.secondary,.doing-app .btn.outline{background:linear-gradient(145deg,#fff,color-mix(in srgb,var(--doing-blue) 65%,white))!important;color:var(--doing-ink)!important}
.doing-app button.gold{background:linear-gradient(145deg,#ffe9a8,#e6b961)!important;color:#5a421c!important}.doing-app button.danger,.doing-app .btn.danger{background:linear-gradient(145deg,#ff9ca6,#cc626c)!important;color:#fff!important}
.doing-app input,.doing-app select,.doing-app textarea{min-height:48px!important;border:2px solid color-mix(in srgb,var(--doing-line) 75%,white)!important;border-radius:16px!important;background:rgba(255,255,255,.94)!important;box-shadow:inset 0 2px 7px rgba(91,69,101,.04)!important}
.doing-app input:focus,.doing-app select:focus,.doing-app textarea:focus{outline:4px solid color-mix(in srgb,var(--doing-primary) 20%,transparent)!important;border-color:var(--doing-primary)!important}
.doing-app .tabs,.doing-app .platform-nav{border:3px solid #fff!important;background:linear-gradient(135deg,var(--doing-pink),var(--doing-blue),var(--doing-yellow))!important;box-shadow:0 12px 30px rgba(91,68,105,.1)!important}
.doing-app table{border-collapse:separate!important;border-spacing:0 7px!important}.doing-app th{color:var(--doing-muted)!important}.doing-app td{background:rgba(255,255,255,.84)!important;border-top:1px solid var(--doing-line)!important;border-bottom:1px solid var(--doing-line)!important}.doing-app td:first-child{border-left:1px solid var(--doing-line)!important;border-radius:14px 0 0 14px}.doing-app td:last-child{border-right:1px solid var(--doing-line)!important;border-radius:0 14px 14px 0}
.doing-app .badge,.doing-app .pill,.doing-app .chip,.doing-app .status{border:2px solid #fff!important;box-shadow:0 4px 11px rgba(91,69,101,.06)!important}
.doing-platform .wrap{width:min(1380px,calc(100vw - 32px))}.doing-platform .metrics{grid-template-columns:repeat(4,minmax(0,1fr))}.doing-platform .metric{border:3px solid #fff!important;border-radius:22px!important;background:rgba(255,255,255,.88)!important;box-shadow:0 10px 24px rgba(91,68,104,.07)}
.doing-admin .topbar-in{max-width:1380px!important}.doing-onsite main,.doing-photo .wrap{width:min(1120px,calc(100vw - 24px))!important;margin-inline:auto!important}
@media(max-width:760px){
  .doing-app>header,.doing-app>.topbar,.doing-app .top{border-top-width:4px!important}
  .doing-product-title{gap:8px}.doing-product-title img{width:40px;height:40px}.doing-product-title h1{font-size:20px!important}.doing-product-title .muted{display:none}
  .doing-app .card,.doing-app .panel,.doing-app .session-card,.doing-app .report-card,.doing-app .login-card,.doing-app .loginbox{border-radius:20px!important;padding:13px!important}
  .doing-app button,.doing-app .btn{min-height:44px!important;padding:9px 13px!important}
  .doing-platform .wrap{width:calc(100vw - 16px)!important}.doing-platform .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .doing-platform .head{width:calc(100vw - 20px)!important;min-height:64px}.doing-platform .head>.actions{gap:5px;margin:0}.doing-platform .head>.actions button{font-size:14px!important;padding-inline:10px!important}
  .doing-onsite main,.doing-photo .wrap{width:calc(100vw - 16px)!important}
}


/* DOING_RESPONSIVE_CONTRACT_V2
   全系統共用：首頁視覺語言、無漸層、老花優先、手機／電腦自動排版。 */
:root{
  --doing-bg:#f7fbfc;
  --doing-paper:#ffffff;
  --doing-ink:#252a34;
  --doing-muted:#5f6875;
  --doing-line:#d8e4e8;
  --doing-primary:#8bcbd3;
  --doing-primary-dark:#397f8a;
  --doing-blue:#dff3f7;
  --doing-pink:#f8edf1;
  --doing-yellow:#fff1bd;
  --doing-green:#e3f3d2;
  --doing-purple:#eee5f7;
  --doing-radius:16px;
  --doing-shadow:0 8px 24px rgba(45,74,83,.08);
}
html{box-sizing:border-box;max-width:100%;overflow-x:hidden}
*,*::before,*::after{box-sizing:inherit}
body{max-width:100%;overflow-x:hidden}
body.doing-app{background-image:none!important}
body.doing-app:not(.doing-public-refactor-body){
  background:var(--doing-bg)!important;
  background-image:none!important;
  color:var(--doing-ink)!important;
}
body.doing-app:not(.doing-public-refactor-body) *,
body.doing-app:not(.doing-public-refactor-body) *::before,
body.doing-app:not(.doing-public-refactor-body) *::after{background-image:none!important}
body.doing-app header,
body.doing-app .topbar,
body.doing-public-refactor-body>header{
  position:sticky!important;
  top:0!important;
  z-index:1200!important;
  background:#fff!important;
  backdrop-filter:none!important;
}
body.doing-app .tabs,
body.doing-app .platform-nav,
body.doing-app nav.tabs{
  position:sticky!important;
  top:76px!important;
  z-index:1100!important;
  background:#f4fafb!important;
  border:1px solid var(--doing-line)!important;
  border-radius:0 0 16px 16px!important;
  box-shadow:0 6px 16px rgba(45,74,83,.06)!important;
}
body.doing-app .card,
body.doing-app .panel,
body.doing-app .session-card,
body.doing-app .report-card,
body.doing-app .login-card,
body.doing-app .loginbox,
body.doing-app .modal,
body.doing-app .modalbox,
body.doing-app .world-module,
body.doing-app .metric{
  min-width:0!important;
  max-width:100%!important;
  border:1px solid var(--doing-line)!important;
  border-radius:16px!important;
  background:#fff!important;
  box-shadow:var(--doing-shadow)!important;
}
body.doing-app button,
body.doing-app .btn,
body.doing-app a.btn{
  min-height:46px!important;
  max-width:100%!important;
  border:1px solid #b9d7dd!important;
  border-radius:14px!important;
  background:#e8f6f8!important;
  color:var(--doing-ink)!important;
  font-size:16px!important;
  font-weight:800!important;
  line-height:1.25!important;
  box-shadow:none!important;
  text-shadow:none!important;
  white-space:normal!important;
  overflow-wrap:anywhere!important;
}
body.doing-app button:hover,
body.doing-app .btn:hover{background:#d8eff3!important;transform:none!important;filter:none!important}
body.doing-app button.primary,
body.doing-app .btn.primary,
body.doing-app .active,
body.doing-app [aria-selected="true"]{
  background:#bfe7ec!important;
  color:#20343a!important;
}
body.doing-app button.secondary,
body.doing-app .btn.secondary,
body.doing-app .btn.outline{background:#fff!important;color:var(--doing-ink)!important}
body.doing-app button.danger,
body.doing-app .btn.danger{background:#fff0f0!important;border-color:#e7bcbc!important;color:#7c3030!important}
body.doing-app input,
body.doing-app select,
body.doing-app textarea{
  min-width:0!important;
  max-width:100%!important;
  min-height:46px!important;
  border:1px solid #cbdde1!important;
  border-radius:12px!important;
  background:#fff!important;
  color:var(--doing-ink)!important;
  font-size:16px!important;
  box-shadow:none!important;
}
body.doing-app h1,body.doing-app h2,body.doing-app h3,body.doing-app h4,
body.doing-app p,body.doing-app span,body.doing-app label,body.doing-app td,body.doing-app th{
  overflow-wrap:anywhere;
}
body.doing-app .muted,body.doing-app small{color:var(--doing-muted)!important}
body.doing-app img,body.doing-app svg,body.doing-app canvas{max-width:100%}
body.doing-app table{width:100%!important;max-width:100%!important}
body.doing-app .table-wrap{max-width:100%!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch}
body.doing-app .world-data-source{margin-top:10px;padding-top:9px;border-top:1px solid var(--doing-line);font-size:14px;line-height:1.55;color:var(--doing-muted)}
body.doing-app .world-data-source b{color:var(--doing-ink)}
body.doing-app .world-data-source code{font:700 13px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;color:#315e67;background:#eef8f9;padding:2px 5px;border-radius:6px}
@media (max-width:760px){
  body.doing-app header,body.doing-app .topbar,body.doing-public-refactor-body>header{min-height:60px!important}
  body.doing-app .tabs,body.doing-app .platform-nav,body.doing-app nav.tabs{
    top:60px!important;
    display:flex!important;
    flex-wrap:nowrap!important;
    gap:6px!important;
    width:100%!important;
    max-width:100vw!important;
    padding:6px 8px!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    scrollbar-width:none;
  }
  body.doing-app .tabs::-webkit-scrollbar,body.doing-app .platform-nav::-webkit-scrollbar{display:none}
  body.doing-app .tabs>*,
  body.doing-app .platform-nav>*{flex:0 0 auto!important;min-width:104px!important}
  body.doing-app main,
  body.doing-app .wrap,
  body.doing-app .shell,
  body.doing-app .container,
  body.doing-app .app{width:100%!important;max-width:100%!important;padding-left:10px!important;padding-right:10px!important}
  body.doing-app .grid,
  body.doing-app .cards,
  body.doing-app .metrics,
  body.doing-app .world-modules,
  body.doing-app .detail-grid,
  body.doing-app .compact-grid{grid-template-columns:minmax(0,1fr)!important}
  body.doing-app .actions,
  body.doing-app .page-actions,
  body.doing-app .card-actions{gap:8px!important;max-width:100%!important}
  body.doing-app .card,
  body.doing-app .panel,
  body.doing-app .session-card,
  body.doing-app .report-card{padding:12px!important;border-radius:14px!important}
  body.doing-app button,body.doing-app .btn{min-height:46px!important;padding:10px 12px!important}
}
@media (min-width:761px){
  body.doing-app main,
  body.doing-app .wrap,
  body.doing-app .shell,
  body.doing-app .container{width:min(100% - 32px,1380px)!important;margin-inline:auto!important}
  body.doing-app .world-modules{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))!important}
}

/* 報名頁舊主題會在執行時加上多個 class；以較高權重維持無漸層。 */
html body.doing-app.doing-register.doing-public-refactor-body{background:#fff!important;background-image:none!important}

.doing-platform .attribution-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;margin:8px 0}
.doing-platform .platform-title-mobile{display:none}
.doing-platform .attribution-stat{min-width:0;padding:9px 10px;border:1px solid var(--doing-line);border-radius:13px;background:#f8fbfc}
.doing-platform .attribution-stat span,.doing-platform .attribution-stat b{display:block}.doing-platform .attribution-stat span{font-size:14px;color:var(--doing-muted)}.doing-platform .attribution-stat b{font-size:20px;line-height:1.3}
.doing-platform .attribution-campaigns{display:grid;gap:6px;margin-top:7px}.doing-platform .attribution-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;padding:8px 10px;border:1px solid var(--doing-line);border-radius:12px;background:#fff}.doing-platform .attribution-row>div:last-child{text-align:right}.doing-platform .attribution-row b,.doing-platform .attribution-row span{display:block}.doing-platform .attribution-row span{font-size:14px;color:var(--doing-muted)}

/* DOING_RESPONSIVE_DENSITY_CONTRACT_V3
   手機不是桌機縮小版：保留 44–46px 觸控區，但移除摘要卡的無效高度與單欄長卷軸。 */
@media (max-width:760px){
  body.doing-app .wrap,body.doing-app .shell{padding-top:8px!important;padding-bottom:22px!important}
  body.doing-app .card,body.doing-app .panel,body.doing-app .session-card,body.doing-app .report-card{
    padding:10px!important;border-radius:13px!important;
  }
  body.doing-app .grid,body.doing-app .cards,body.doing-app .detail-grid,body.doing-app .compact-grid{
    gap:8px!important;
  }
  body.doing-app .actions,body.doing-app .page-actions,body.doing-app .card-actions{
    display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important;margin-top:8px!important;
  }
  body.doing-app .actions>:only-child,body.doing-app .page-actions>:only-child,body.doing-app .card-actions>:only-child{grid-column:1/-1}
  body.doing-app .actions button,body.doing-app .actions .btn,body.doing-app .page-actions button,body.doing-app .card-actions button{
    width:100%!important;min-width:0!important;margin:0!important;
  }
  body.doing-app .muted,body.doing-app small{font-size:14px!important}

  /* 平台首屏：總覽數字固定雙欄，卡片本身就是按鈕，不重複顯示「直接開啟」。 */
  body.doing-app.doing-platform .head{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;gap:7px!important;min-height:58px!important;padding:5px 0!important}
  body.doing-app.doing-platform .doing-product-title{gap:6px!important}
  body.doing-app.doing-platform .doing-product-title img{width:34px!important;height:34px!important}
  body.doing-app.doing-platform .doing-product-title h1{font-size:18px!important;line-height:1.2!important}
  body.doing-app.doing-platform .platform-title-full{display:none!important}
  body.doing-app.doing-platform .platform-title-mobile{display:inline!important;white-space:nowrap!important}
  body.doing-app.doing-platform .head>.actions{display:flex!important;flex-wrap:nowrap!important;gap:4px!important}
  body.doing-app.doing-platform .head>.actions a,body.doing-app.doing-platform .head>.actions button{
    width:auto!important;min-height:44px!important;padding:7px 9px!important;font-size:14px!important;white-space:nowrap!important;
  }
  body.doing-app.doing-platform .platform-nav{top:58px!important;margin:0 -2px 8px!important}
  body.doing-app.doing-platform .metrics{
    display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important;margin-bottom:8px!important;
  }
  body.doing-app.doing-platform .metric{
    min-height:70px!important;padding:8px 10px!important;border-radius:13px!important;
  }
  body.doing-app.doing-platform .metric span{font-size:14px!important;line-height:1.25!important}
  body.doing-app.doing-platform .metric b{font-size:20px!important;line-height:1.2!important;margin-top:2px!important}
  body.doing-app.doing-platform .metric small{display:none!important}
  body.doing-app.doing-platform .world-modules{grid-template-columns:minmax(0,1fr)!important}
  body.doing-app.doing-platform .attribution-metrics{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important}
  body.doing-app.doing-platform .attribution-stat{padding:7px 8px!important}
  body.doing-app.doing-platform .attribution-row{grid-template-columns:minmax(0,1fr) auto!important;padding:7px 8px!important}

  /* 會員首屏：身份版頭與三張摘要自然高度，細節移到各自分頁。 */
  body.doing-app.doing-member .top-in{min-height:58px!important;padding:5px 9px!important}
  body.doing-app.doing-member .home img{width:34px!important;height:34px!important}
  body.doing-app.doing-member .home-copy small{display:none!important}
  body.doing-app.doing-member .who b{font-size:16px!important}
  body.doing-app.doing-member .hero{min-height:0!important;padding:9px 10px!important;border:1px solid var(--doing-line)!important;border-radius:14px!important;box-shadow:none!important}
  body.doing-app.doing-member .hero .eyebrow{display:none!important}
  body.doing-app.doing-member .hero h1{font-size:20px!important;line-height:1.25!important;margin:0!important}
  body.doing-app.doing-member .hero p{max-width:100%!important;margin-top:2px!important;font-size:14px!important;line-height:1.35!important}
  body.doing-app.doing-member .tabs{top:58px!important;margin:6px 0!important}
  body.doing-app.doing-member .identity-layout{display:grid!important;gap:7px!important}
  body.doing-app.doing-member .identity-layout .card{padding:10px!important;min-height:0!important}
  body.doing-app.doing-member .identity-layout .card h2,body.doing-app.doing-member .identity-layout .card h3{font-size:18px!important;margin:0!important}
  body.doing-app.doing-member .identity-layout .card p{margin:3px 0!important;line-height:1.4!important}
  body.doing-app.doing-member .overview-secondary{font-size:14px!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
  body.doing-app.doing-member .record-timeline{display:none!important}
  body.doing-app.doing-member .panel{min-height:0!important}
}

/* DOING_NO_TEXT_CLIPPING_CONTRACT_V1
   所有正式頁面的文字必須完整顯示：允許換行、容器自動增高，不使用省略號裁字。 */
body.doing-app :where(h1,h2,h3,h4,p,label,.notice,.muted,.status,.message,.metric,.kpi,.member-title,.todo-main-title){
  max-width:100%!important;
  overflow-wrap:anywhere!important;
}
body.doing-app :where(.panel,.card,.modal,.form,.field) :where(button,.btn,[role="button"]){
  height:auto!important;
  min-height:44px!important;
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
  line-height:1.35!important;
}
body.doing-app.doing-admin :where(.tabs .tab,.etc-sub,.equip-name-readonly,.equip-table-name){
  width:auto!important;
  max-width:none!important;
  height:auto!important;
  min-height:44px!important;
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
  overflow-wrap:anywhere!important;
  line-height:1.35!important;
}
body.doing-app.doing-member .overview-secondary{
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
  overflow-wrap:anywhere!important;
}
@media (max-width:760px){
  body.doing-app :where(.panel,.card,.modal,.form,.field){
    min-width:0!important;
    height:auto!important;
  }
}

/* DOING_NO_BROKEN_VIEWPORT_CONTRACT_V1
   全站禁止用 overflow-x:hidden 掩蓋破版；桌機按鈕列換行，手機按鈕列可完整橫滑。 */
html,body{max-width:100%!important;overflow-x:auto!important}
body.doing-app :where(main,.wrap,.shell,.container,.app,.page,section,article,header,footer,nav,form,fieldset){min-width:0!important;max-width:100%!important}
body.doing-app :where(.grid,.cards,.metrics,.detail-grid,.compact-grid,.field-grid,.choice-grid)>*{min-width:0!important;max-width:100%!important}
body.doing-app :where(img,svg,video,canvas,iframe){max-width:100%!important}
body.doing-app :where(pre,code){max-width:100%!important;overflow-x:auto!important;overflow-wrap:normal!important}
body.doing-app :where(.table-wrap,.table-scroll,.data-table-wrap){width:100%!important;max-width:100%!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch}
body.doing-app :where(.tabs,.platform-nav,.scenario-tabs,.portal-row,.doing-quick-tags,.filter-row,.toolbar,.subtabs){min-width:0!important;max-width:100%!important;scroll-padding-inline:12px;overscroll-behavior-inline:contain}
@media (min-width:761px){
  body.doing-app :where(.tabs,.platform-nav,.scenario-tabs,.portal-row,.doing-quick-tags,.filter-row,.toolbar,.subtabs){display:flex!important;flex-wrap:wrap!important;overflow:visible!important}
  body.doing-app :where(.scenario-tabs,.portal-row,.doing-quick-tags)>*{min-width:0!important;max-width:100%!important;flex:0 1 auto!important}
}
@media (max-width:760px){
  body.doing-app :where(.tabs,.platform-nav,.scenario-tabs,.portal-row,.doing-quick-tags,.filter-row,.subtabs){display:flex!important;flex-wrap:nowrap!important;overflow-x:auto!important;overflow-y:visible!important;padding-inline:12px!important;scrollbar-width:auto!important}
  body.doing-app :where(.tabs,.platform-nav,.scenario-tabs,.portal-row,.doing-quick-tags,.filter-row,.subtabs)>*{flex:0 0 auto!important;max-width:calc(100vw - 36px)!important}
  body.doing-app table:not(.seat-map){display:block!important;width:100%!important;max-width:100%!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch}
}
/* v21：全系統文字與彈性格防破框。內容可以換行，但不可把卡片或畫面撐出視窗。 */
html,body{max-width:100%;overflow-x:hidden}
body.doing-app :where(main,section,article,div,nav,header,footer,form,label,.card,.panel,.row,.actions,.grid){min-width:0}
body.doing-app :where(h1,h2,h3,h4,p,span,b,strong,small,a,button,label,td,th,.chip,.status){max-width:100%;overflow-wrap:anywhere;word-break:normal}
body.doing-app :where(input,select,textarea){max-width:100%;min-width:0}
body.doing-app :where(.btn,button){white-space:normal;text-align:center;line-height:1.35}
