main#app{max-width:none;width:96%;padding:20px;margin:auto}.quote-workbench{position:sticky;top:68px;z-index:4;background:#f3f7fcf5;border:1px solid #dce5f1;border-radius:10px;padding:10px;display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.quote-workbench input{width:170px}.quote-workbench select{max-width:180px}.quote-select{margin-right:8px;width:17px;height:17px;vertical-align:middle}#quotes .tablewrap{max-height:72vh;overflow:auto}#quotes thead th{position:sticky;top:0;background:#f7faff;z-index:2}#quotes tr.section{cursor:pointer}#quotes tr.section[aria-expanded="false"] td:after{content:'　▸ 已折叠';font-weight:400}#quotes tr[hidden]{display:none!important}#quotes td.source{overflow-wrap:anywhere}#quotes .compact-time{white-space:nowrap}#quotes td.price{font-size:1rem}#quotes .source{line-height:1.5}#detailDialog,#quoteDetail{position:fixed;inset:0 0 0 auto;margin:0;height:100vh;max-height:100vh;width:min(600px,95vw);border-radius:14px 0 0 14px}#deletionHistory article{border-bottom:1px solid #dce5f1;padding:10px}html[data-density="compact"] #quotes td{padding-top:6px;padding-bottom:6px}html[data-density="comfortable"] #quotes td{padding-top:11px;padding-bottom:11px}@media(max-width:800px){.quote-workbench{position:static}main#app{width:100%;padding:10px}.quote-workbench select{max-width:46%}}.shared-settings{margin-bottom:14px}.shared-settings summary{cursor:pointer;padding:10px;color:#385776}

.quote-quick-nav{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.quote-quick-nav button{padding:6px 12px}#quotes .source>span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* Browsing shell and focused single-category reading. */
.quote-controls{position:sticky;top:var(--app-header-height,68px);z-index:6;background:#f3f7fcf5;padding:8px 0;backdrop-filter:blur(10px)}
.quote-controls>.toolbar{margin:0 0 8px;flex-wrap:wrap}.quote-controls .toolbar>#search{min-width:240px}
.quote-controls .quote-workbench{position:static;margin:8px 0 0}.quote-controls .quote-quick-nav{margin:0;gap:6px}
.quote-quick-nav button.active{background:#2164e8;color:white;border-color:#2164e8}
button.clear-filters{color:#bb3544;background:#fff1f2;border-color:#efb5bd;white-space:nowrap}button.clear-filters:hover{background:#ffe3e7;border-color:#d55a69}
.more-filters{position:relative;margin-left:auto}.more-filters summary{cursor:pointer;padding:8px 12px;border:1px solid #dce5f1;border-radius:7px;background:white}.more-filters>div{position:absolute;right:0;top:100%;display:flex;gap:8px;padding:12px;background:white;box-shadow:0 8px 28px #18395722;border-radius:8px;min-width:260px;z-index:8}
#quotes.focused-quotes{display:block!important}#quotes.focused-quotes>.panel{overflow:visible}
#quotes.focused-quotes .tablewrap{max-height:none;overflow:visible}
#quotes.focused-quotes .groupbar{position:sticky;top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px));z-index:4;border-radius:12px 12px 0 0}
#quotes.focused-quotes thead th{top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + 54px);z-index:3}
#quotes.focused-quotes tr.section td{position:sticky;top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + 89px);z-index:2;box-shadow:0 1px 0 #dce5f1;background:#edf3fc}
#quotes td.num{font-variant-numeric:tabular-nums;white-space:nowrap}#quotes td.price{font-weight:750;color:#285cee;font-size:1.06rem}
#quotes .source{font-size:.8rem;color:#71829b}#quotes .compact-time{font-size:.74rem;color:#8292a7}
#quotes .expandable-note{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer}
#quotes .expandable-note.expanded{display:block;-webkit-line-clamp:unset;overflow:visible}#quotes .expandable-note:focus-visible{outline:2px solid #87a8ff;outline-offset:2px}
.group-fields{flex:1;min-width:0;display:grid;gap:6px}.group-fields input{width:100%;box-sizing:border-box}.group-binding>input{flex:none}
#detailDialog .actions{flex-wrap:wrap}#deleteQuoteButton{color:#b52d41;border-color:#e9afb8;margin-left:auto}
button{transition:background-color 120ms,border-color 120ms,transform 80ms}button:active:not(:disabled){transform:scale(.98)}.chevron{transition:transform 180ms ease-out}
#detailDialog[open],#quoteDetail[open]{animation:quote-drawer-in 200ms ease-out}dialog[open]::backdrop{animation:quote-backdrop-in 160ms ease-out}
@keyframes quote-drawer-in{from{transform:translateX(28px);opacity:.4}to{transform:translateX(0);opacity:1}}
@keyframes quote-backdrop-in{from{opacity:0}to{opacity:1}}
#quotes tr.changed{animation:none}
@media(max-width:900px){.quote-controls{position:static;backdrop-filter:none}#quotes.focused-quotes .tablewrap{overflow:auto;max-height:75vh}#quotes.focused-quotes .groupbar{position:static}#quotes.focused-quotes thead th{top:0}#quotes.focused-quotes tr.section td{top:35px}.quote-controls .toolbar>#search{min-width:180px}.more-filters>div{flex-wrap:wrap}}
@media(prefers-reduced-motion:reduce){button,.chevron{transition:none!important}dialog[open],dialog[open]::backdrop,#quotes .changed{animation:none!important}}

#quotes.focused-quotes table{min-width:0;width:100%}#deleteQuoteButton{order:10;flex-basis:100%;margin-top:12px}
@media(max-width:900px){#quotes.focused-quotes table{min-width:650px}}

/* Approved light workbench concept: restrained surfaces and twin quotation tables. */
:root{--premium-ink:#172c50;--premium-blue:#3264ef;--premium-line:#e5eaf2}
body{background:#f5f7fb;color:var(--premium-ink)}body>header{background:#ffffffed;border-bottom:1px solid var(--premium-line);box-shadow:0 2px 10px #172c5003}
aside{background:#f5f7fb;border-color:var(--premium-line)}aside button{border-radius:9px}aside button.active{background:#e8efff;color:#2856cd;font-weight:650}
button,input,select{border-color:#dfe6f0;border-radius:8px}button.primary{background:var(--premium-blue);border-color:var(--premium-blue);box-shadow:0 2px 4px #3264ef15}
button:focus-visible,select:focus-visible{outline:2px solid #84a7ff;outline-offset:2px}
.quote-controls{background:#f5f7fbf5}.quote-controls .toolbar{gap:10px;padding-bottom:4px}#search{background:white;box-shadow:0 1px 3px #19335a04}
.quote-controls .quote-workbench{border:0;background:transparent;padding:8px 0;gap:10px}.quote-workbench select,.quote-workbench input{background:#fff;min-height:38px}
.quote-quick-nav{gap:6px!important;align-items:center}.quote-quick-nav button{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:9px 12px;background:white;color:#233c64;font-weight:550;white-space:nowrap}
.quote-quick-nav button.active{background:#3264ef;color:#fff;box-shadow:0 3px 8px #3264ef22}.nav-count{background:#edf2ff;color:#4266b5;padding:2px 6px;border-radius:5px;font-size:.8em;line-height:1.3}.active .nav-count{background:#ffffff25;color:#fff}
.quote-quick-nav button.clear-filters{color:#c3394b;background:#fff6f7;border-color:#eaa8b3;margin-left:6px;box-shadow:none}.quote-quick-nav button.clear-filters:hover{background:#ffe9ed}
#quotes .panel{border:1px solid var(--premium-line);background:white;border-radius:12px;box-shadow:0 3px 16px #1a365705;overflow:hidden}
#quotes .groupbar{background:#fff;color:#1a3052;font-weight:650;gap:10px;border-bottom:1px solid var(--premium-line);padding:14px 16px}#quotes .groupbar:hover{background:#fafbff;filter:none}#quotes .groupbar img{width:26px;height:26px}#quotes .groupbar .count{font-size:.82rem;color:#7b8ca6;padding-left:12px;border-left:1px solid #dfe6f0}
.split-label{margin-left:auto;color:#7c8aa1;font-size:.8rem;font-weight:400}.split-label:empty{display:none}.split-label:not(:empty)+.chevron{margin-left:4px}
.quote-tables{display:block;min-width:0}.quote-half{min-width:0}.quote-half[hidden]{display:none!important}
#quotes .split-quotes{border:0;background:transparent;box-shadow:none;overflow:visible}#quotes .split-quotes>.groupbar{border:1px solid var(--premium-line);border-radius:10px;margin-bottom:12px;box-shadow:0 2px 8px #1a365705}
#quotes .split-quotes>.quote-tables{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
#quotes .split-quotes .quote-half{background:white;border:1px solid var(--premium-line);border-radius:10px;box-shadow:0 3px 16px #1a365705}
#quotes .panel.closed>.content{display:none}
#quotes table{border-spacing:0}#quotes td{border-color:#edf0f5;line-height:1.5}#quotes thead th{color:#526782;background:#f8faff;font-weight:550;white-space:nowrap}#quotes tbody tr[data-id]:hover{background:#f7faff}
#quotes tr.section td{background:#f1f5fb;color:#344b6a;font-weight:650;letter-spacing:.01em}
#quotes .country{color:#1f3657;font-weight:650}#quotes .num{font-variant-numeric:tabular-nums}#quotes .price{color:#2e5de9;font-weight:750}#quotes td.source{font-size:.78rem;color:#73849c}
#quotes .note{color:#8d805f;line-height:1.5}#quotes .compact-time{color:#93a0b2}#quotes td.row-actions button{border-color:transparent;background:transparent;color:#6a83b4}#quotes td.row-actions button:hover{border-color:#d8e3ff;background:#edf3ff;color:#3264ef}
@media(min-width:1260px){#quotes.focused-quotes .split-quotes .quote-half table{min-width:0}#quotes.focused-quotes .split-quotes .groupbar{top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px))}#quotes.focused-quotes .split-quotes thead th{top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + 69px)}#quotes.focused-quotes .split-quotes tr.section td{top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + 104px)}}
@media(max-width:1259px){#quotes .split-quotes>.quote-tables{display:block}}

#quotes .card-kind{display:inline-block;padding:4px 8px;border:0;border-radius:6px;font-weight:550;font-size:.78rem;line-height:1.45;margin-top:4px;color:#fff}#quotes .kind-pic{background:#287ff1}#quotes .kind-electronic{background:#9253d8}#quotes .kind-code{background:#229b65}
#quotes .quote-half thead th:first-child{border-top-left-radius:10px}#quotes .quote-half thead th:last-child{border-top-right-radius:10px}

/* Shared page: one opaque toolbar at the viewport top after the page header scrolls away. */
.shared-quote-page .quote-controls{position:sticky;top:var(--app-header-height,0px);z-index:6;background:#f5f7fb;backdrop-filter:none;padding:6px 0;border-bottom:1px solid #dce5f1;box-shadow:0 3px 8px #2039550a}
.shared-quote-page .quote-controls>.toolbar{gap:8px;margin-bottom:6px;padding-bottom:0}
.shared-quote-page .quote-controls button,.shared-quote-page .quote-controls input,.shared-quote-page .quote-controls select{padding:7px 10px;min-height:34px}
.shared-quote-page .quote-controls .quote-quick-nav{flex-wrap:nowrap;overflow-x:auto;gap:6px;padding:2px 0 5px;scrollbar-width:thin}
.shared-quote-page .quote-controls .quote-quick-nav>button{flex-shrink:0;white-space:nowrap}
.shared-quote-page .quote-controls .quote-workbench{margin-top:0;padding:4px 0 0;gap:8px}
.shared-quote-page #quotes{margin-top:12px}
@media(max-width:900px){
 .shared-quote-page .quote-controls{position:sticky;top:0}
 .shared-quote-page .quote-controls>.toolbar{gap:6px}
}
/* Keep the full filter form reachable on very short viewports or at high zoom. */
@media(max-height:520px){
 .shared-quote-page .quote-controls{max-height:45vh;overflow:auto;overscroll-behavior:contain}
}

/* Expanded lists follow the page instead of creating nested vertical scrollers. */
#quotes.focused-quotes .panel .tablewrap,
#quotes .panel[data-group="Supermarket"] .tablewrap{
 max-height:none;
 height:auto;
 overflow:visible;
 isolation:auto;
}
#quotes .panel[data-group="Supermarket"]{overflow:visible}
#quotes.focused-quotes .panel thead th{
 position:sticky;
 top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + var(--quote-groupbar-height,56px));
 z-index:3;background:#f8faff;border-radius:0;box-shadow:0 1px 0 #dce5f1;
}
#quotes.focused-quotes .split-quotes thead th{
 /* The normal-flow card gutter must not become a hole between sticky surfaces. */
 top:calc(var(--app-header-height,68px) + var(--quote-controls-height,140px) + var(--quote-groupbar-height,56px));
}
@media(max-width:900px){
 #quotes.focused-quotes .panel .tablewrap,
 #quotes .panel[data-group="Supermarket"] .tablewrap{overflow-x:auto;max-height:none}
 #quotes.focused-quotes .panel thead th{position:static}
}
#quotes.focused-quotes .panel tr.section td,
#quotes.focused-quotes .split-quotes tr.section td{position:static;top:auto;z-index:auto;box-shadow:none}
/* Unified controls: keep a stable action area while batch mode switches in place. */
.quote-workbench .quote-action-area{flex:1 1 550px;min-width:0;min-height:52px;padding:4px 8px;border:1px solid transparent;border-radius:10px;box-sizing:border-box;display:grid;align-items:center;margin-left:auto}
.quote-action-area>div{grid-area:1/1;display:flex;align-items:center;gap:8px;justify-content:flex-end;min-width:0;min-height:42px}
.quote-action-area [hidden]{display:none!important}.quote-action-area button{flex-shrink:0;white-space:nowrap}
.quote-workbench .quote-action-area.readonly-actions{display:none}
.quote-workbench button,.quote-workbench select,.quote-workbench summary{min-height:42px;border-radius:9px;box-sizing:border-box}
.quote-action-area.batch-active{background:#edf3ff;border:1px solid #cad8ff;border-radius:10px;padding:4px 8px}
.batch-actions{overflow-x:auto;scrollbar-width:thin}.batch-actions>span{color:#345bd2;font-size:.8rem;white-space:nowrap;margin-right:auto}
.quote-workbench #selectedQuoteCount{min-width:90px;text-align:right;font-size:.82rem;color:#64758f}
.danger-action{color:#b52d41!important;border-color:#edbec7!important}.danger-action:disabled{opacity:.4;cursor:default}
.display-menu,.quote-more-actions{position:relative}.display-menu>summary,.quote-more-actions>summary{list-style:none;cursor:pointer;padding:10px 12px;border:1px solid #d9e3f0;background:#fff;white-space:nowrap}
.display-menu[open]>summary,.quote-more-actions[open]>summary{background:#edf3ff;border-color:#a6baf1;color:#3159c8}
.display-menu>div,.quote-more-actions>div{position:absolute!important;right:0;top:calc(100% + 6px)!important;z-index:20;min-width:210px;max-width:calc(100vw - 32px);padding:10px;background:#fff;border:1px solid #dae4f2;border-radius:12px;box-shadow:0 12px 32px #18395720;display:grid;gap:8px}
.display-menu label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:.88rem}.display-menu>div>button,.quote-more-actions>div>button{text-align:left;width:100%}
.monitor-health{display:flex;align-items:center;gap:7px 14px;flex-wrap:wrap;font-size:.76rem;color:#718099;margin-top:8px;padding:5px 2px}
.health-chip.error,.monitor-health .health-error{background:#fff0f0;color:#c53030;border:1px solid #f5c6c6}.monitor-error-text,.note.monitor-error-text{color:#c53030}
.health-chip{padding:3px 8px;border-radius:20px;background:#edf1f7;color:#4b6285}.health-chip.healthy{background:#eaf7f0;color:#227453}.health-chip.warning{background:#fff2db;color:#94631a}.health-warning{color:#a36912;background:#fff6e8;border-radius:6px;padding:5px 8px;flex-basis:100%}.monitor-health details{max-width:100%}.monitor-health summary{cursor:pointer}.monitor-health p{margin:4px 0}
#quotes td.price{cursor:pointer;font-weight:750;letter-spacing:.1px;border-radius:5px}#quotes td.price:hover{background:#edf3ff}#quotes td.price:focus-visible{outline:2px solid #7e9deb;outline-offset:-2px}
/* Keep amounts right-aligned; reserve a separate, fixed-height badge line. */
#quotes td.price{white-space:nowrap;text-align:right}
#quotes .price-direction{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:5.5em;height:26px;min-height:26px;margin:4px 0 0 auto;padding:3px 7px;border:1px solid transparent;border-radius:8px;font-size:12px;font-weight:750;line-height:18px;white-space:nowrap;vertical-align:middle;cursor:help}
#quotes .price-direction.up{color:#137642;background:#e4f5eb;border-color:#b9e3cb}
#quotes .price-direction.down{color:#b42332;background:#fde9eb;border-color:#f5c2c8}
#quotes .price-direction.is-empty{visibility:hidden;pointer-events:none}
#quotes .price-direction:focus-visible{outline:2px solid #6487ef;outline-offset:2px}

#quotes .expandable-note{-webkit-line-clamp:1}#quotes .expandable-note.expanded{-webkit-line-clamp:unset}
dialog.quote-detail-drawer{position:fixed;inset:0 0 0 auto;margin:0;width:min(620px,95vw);max-width:95vw;height:100dvh;max-height:100dvh;border-radius:18px 0 0 18px;padding:22px;overflow:auto;box-sizing:border-box}
.quote-detail-drawer .dialoghead{display:flex;align-items:center;justify-content:space-between;position:sticky;top:-22px;background:white;z-index:1;padding:15px 0}.quote-detail-drawer .dialoghead h2{margin:0}.quote-detail-drawer pre{max-height:260px;line-height:1.6;overflow-wrap:anywhere}.quote-detail-drawer pre[hidden]{display:none}
.detail-price{padding:18px;border-radius:14px;background:#edf3ff;display:grid;gap:5px}.detail-price small{color:#7385a1}.detail-price strong{font-size:2rem;color:#315deb;font-variant-numeric:tabular-nums}.quote-detail-summary dl{display:grid;grid-template-columns:95px 1fr;gap:12px;font-size:.92rem}.quote-detail-summary dt{color:#7a879b}.quote-detail-summary dd{margin:0;overflow-wrap:anywhere}.detail-explainer{background:#f6f8fc;padding:12px;border-radius:10px;color:#61738c;font-size:.8rem;line-height:1.7}.quote-detail-summary h3{font-size:1rem;margin-top:24px}.comparison-entry{border:1px solid #e1e8f4;border-radius:9px;padding:12px;margin-bottom:8px}.comparison-entry summary{cursor:pointer;overflow-wrap:anywhere}.comparison-entry small{display:block;margin-top:8px;color:#7e8da4}
.monkey-mark{object-fit:contain;flex-shrink:0;mix-blend-mode:multiply}.monkey-header{width:64px;height:64px;vertical-align:middle;margin-right:6px}body>header h1,body>header>b{display:flex;align-items:center}
.monkey-empty{min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;color:#73819a;padding:26px;border:1px dashed #d6e1f1;border-radius:16px;background:#ffffffa8}.monkey-empty img{width:132px;height:132px}.monkey-empty strong{font-size:1rem;color:#405677}.monkey-empty span{font-size:.85rem}.monkey-empty.done{background:#f6fcf8}.monkey-empty.done strong::after{content:' ✓';color:#278763}.monkey-empty.search strong::before{content:'⌕ ';color:#d39836}
.monkey-empty.loading img{animation:monkey-nod 1.4s ease-in-out infinite}@keyframes monkey-nod{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-5px) rotate(3deg)}}
.monkey-toast::before{content:'';display:inline-block;width:30px;height:30px;vertical-align:middle;margin-right:8px;border-radius:50%;background:#fff url('/icons/MonkeyCompany.png') center/44px no-repeat}
@media(max-width:800px){.quote-workbench .quote-action-area{flex-basis:100%;width:100%}.quote-action-area>div{justify-content:flex-start}.display-menu>div{left:0;right:auto}.quote-workbench #selectedQuoteCount{font-size:.76rem;min-width:76px}.monitor-health{font-size:.7rem;gap:5px 8px}.monkey-header{width:44px;height:44px}.quote-detail-drawer .dialoghead{top:-14px}dialog.quote-detail-drawer{padding:14px;width:100vw;max-width:100vw;border-radius:0}.batch-actions>span{display:none}}
@media(prefers-reduced-motion:reduce){.monkey-empty.loading img{animation:none}}
/* A quiet, keyboard-accessible company mascot shared by both dashboards. */
body>header h1,body>header>b{position:relative}
body>header .monkey-greeting{display:inline-flex;align-items:center;justify-content:center;padding:0;margin:0 6px 0 0;border:0;border-radius:12px;background:transparent;flex-shrink:0;touch-action:manipulation}
.monkey-greeting .monkey-header{margin:0;transform-origin:50% 80%}
body>header .monkey-greeting:hover{background:#fff7e9}
.monkey-greeting:focus-visible{outline:2px solid #eead42;outline-offset:2px}
.monkey-greeting-message{position:absolute;top:100%;left:0;z-index:10;width:max-content;max-width:min(320px,85vw);white-space:normal;padding:10px 14px;background:#fff9ea;border:1px solid #f0d49d;border-radius:12px;box-shadow:0 6px 18px #54402518;color:#785326;font-size:13px;font-weight:500;line-height:1.5;pointer-events:none}
.monkey-greeting-message[hidden]{display:none}
@keyframes monkey-greet{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(1.08) rotate(-8deg)}70%{transform:scale(1.08) rotate(7deg)}}
@keyframes monkey-pop{0%,100%{transform:translateY(0) scale(1)}45%{transform:translateY(-5px) scale(1.12)}}
@media(hover:hover) and (prefers-reduced-motion:no-preference){.monkey-greeting:hover .monkey-header{animation:monkey-greet .6s ease-in-out}}
@media(prefers-reduced-motion:no-preference){.monkey-greeting.is-loading .monkey-header{animation:monkey-nod 1.4s ease-in-out infinite}.monkey-toast-pop::before{animation:monkey-pop .45s ease-out}}

/* The mascot has its own lane; quote headers, buttons and prices stay outside it. */
.climbing-monkey-stage{position:relative;height:116px;min-width:0;margin:4px 0 8px;overflow:hidden;contain:layout paint}
.monkey-rail{position:absolute;left:12px;right:108px;top:26px;height:3px;background:linear-gradient(90deg,#e8cfa5,#c9a36b,#e8cfa5);border-radius:4px;opacity:.65}
.climbing-monkey-stage .climbing-monkey{position:absolute;top:14px;left:0;width:88px;height:98px;border:0;padding:0;background:transparent;border-radius:18px;cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none;will-change:transform}
.climbing-monkey-stage .climbing-monkey:hover{background:transparent;border:0;filter:drop-shadow(0 3px 4px #a86f2424)}
.climbing-monkey:focus-visible{outline:2px solid #d89c37;outline-offset:-2px}
.climbing-monkey-stage.is-dragging .climbing-monkey{cursor:grabbing}
.climber-art{display:block;width:100%;height:100%;overflow:visible;pointer-events:none;transform:scaleX(var(--climber-facing,1))}
.climber-arm,.climber-leg,.climber-head,.climber-tail{transform-box:view-box}
.arm-left{transform-origin:35px 52px}.arm-right{transform-origin:64px 52px}.leg-left{transform-origin:42px 69px}.leg-right{transform-origin:57px 69px}.climber-head{transform-origin:50px 45px}.climber-tail{transform-origin:65px 67px}
.climber-banana{opacity:0}.has-banana .climber-banana{opacity:1}
.climber-controls{position:absolute;right:2px;top:16px;display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.climber-controls button{font-size:12px;padding:4px 8px;min-height:28px;color:#7b735e;border:1px solid #e4dfd3;background:#fffaf0;border-radius:8px;white-space:nowrap}
.climber-controls button:disabled{cursor:default;color:#9a9489}
.climber-message{position:absolute;top:0;max-width:200px;font-size:12px;line-height:1.5;background:#fff8e6;color:#886022;border:1px solid #edd9ad;border-radius:9px;padding:4px 8px;pointer-events:none;z-index:1}
.climber-message:empty{display:none}
.climbing-monkey-stage.is-hidden{height:34px;margin:0 0 6px}.is-hidden .monkey-rail{display:none}.is-hidden .climber-controls{top:0}
.climbing-monkey-stage [hidden]{display:none!important}
@keyframes climber-reach{0%,100%{transform:rotate(-9deg)}50%{transform:rotate(10deg)}}
@keyframes climber-kick{0%,100%{transform:rotate(12deg)}50%{transform:rotate(-14deg)}}
@keyframes climber-wave{0%,100%{transform:rotate(0)}25%,65%{transform:rotate(32deg)}45%,85%{transform:rotate(8deg)}}
@keyframes climber-flip{0%{transform:scaleX(var(--climber-facing,1)) rotate(0)}50%{transform:scaleX(var(--climber-facing,1)) rotate(180deg) scale(.8)}100%{transform:scaleX(var(--climber-facing,1)) rotate(360deg)}}
@media(prefers-reduced-motion:no-preference){
 .is-climbing .climber-arm{animation:climber-reach 1.1s ease-in-out infinite}.is-climbing .arm-right{animation-delay:-.55s}
 .is-climbing .climber-leg{animation:climber-kick 1.1s ease-in-out infinite}.is-climbing .leg-right{animation-delay:-.55s}
 .is-waving .arm-right{animation:climber-wave 1s ease-in-out 2!important}.is-flipping .climber-art{animation:climber-flip .8s ease-in-out}
}
@media(max-width:600px){.climber-controls button{min-height:34px}.climbing-monkey-stage{height:112px}.climber-message{max-width:170px;font-size:11px}}

/* Float in existing free space; never reserve a row or resize quote columns. */
.climbing-monkey-stage.monkey-overlay{position:fixed;z-index:7;height:98px;margin:0;overflow:visible;contain:none;background:transparent;pointer-events:none}
.monkey-overlay .climbing-monkey{top:0;width:88px;height:98px;padding:0;min-height:0;pointer-events:auto}
.monkey-overlay .monkey-rail{top:11px;left:0;right:0}
.monkey-overlay .climber-message{top:0;transform:translateY(-100%)}
.monkey-overlay.is-hidden{height:0;margin:0}
.climber-controls.climber-settings{position:static;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;align-items:center}
.monkey-overlay>.climber-controls{pointer-events:auto}

/* Quiet static artwork on page whitespace; quote surfaces stay opaque. */
body{background-color:#f1f5fb;background-image:url('/icons/MonkeyBackground.svg');background-size:720px 440px;background-repeat:repeat}
.quote-controls,.shared-quote-page .quote-controls{background-color:#f1f5fb;background-image:url('/icons/MonkeyBackground.svg');background-size:720px 440px;background-repeat:repeat}
@media(max-width:600px){body,.quote-controls,.shared-quote-page .quote-controls{background-size:600px 367px}}
aside{background-color:#edf2fa;background-image:url('/icons/MonkeyBackground.svg');background-size:360px 220px;background-repeat:repeat;background-position:0 8px}
@media print{body,aside,.quote-controls,.shared-quote-page .quote-controls{background-image:none}}

/* Shared visual theme: soft blue / lavender. Geometry and interaction rules stay above. */
:root{--premium-ink:#243454;--premium-blue:#7054df;--premium-line:#e5e4f3;--soft-focus:#8c71ed;--soft-shadow:0 5px 20px #6655a00b}
body{color:var(--premium-ink);background-color:#f0f5fd;background-image:linear-gradient(120deg,#edf7ff 0%,#f2f3fd 65%,#eef4ff 100%);background-attachment:fixed}
body>header{background:#ffffffed;border-color:#e6e5f2;box-shadow:0 3px 18px #6756a009}
body>header h1 b,body>header>b>small{color:#7054df}
aside{background:linear-gradient(180deg,#f8faff,#f0f2fd);border-color:#e5e6f3}
aside button.active{background:linear-gradient(115deg,#7861e7,#7054d8);color:#fff;box-shadow:0 4px 12px #7054df24}
button,input,select,textarea{border-color:#e0e2f0;border-radius:10px}
button:not(:disabled):hover{background-color:#f3efff;border-color:#b8a8ea}
button.primary,.quote-quick-nav button.active{background:linear-gradient(115deg,#8068ee,#7054df);border-color:#7960e2;color:#fff;box-shadow:0 3px 10px #7054df20}
button.primary:not(:disabled):hover,.quote-quick-nav button.active:hover{background:#6548d1;border-color:#6548d1}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid var(--soft-focus);outline-offset:2px}
input,select,textarea{accent-color:#7054df}
#search{background:#fff;box-shadow:0 2px 8px #6655a007}
.quote-controls,.shared-quote-page .quote-controls{background:#f0f4fd;background-image:none;box-shadow:0 4px 14px #6655a007}
.quote-controls .quote-workbench{background:transparent}
.quote-quick-nav button{border-color:#e1e2f0;color:#354064;background:#fff}
.nav-count{background:#f0ecff;color:#6852b5}
.active .nav-count{background:#ffffff25;color:#fff}
.quote-quick-nav button.clear-filters{background:#fff5f7;color:#b63750;border-color:#efbdc8;box-shadow:none}
.quote-quick-nav button.clear-filters:hover{background:#ffeaf0;border-color:#dc93a5}
.stat{border-color:#e5e4f3;background:#fff;border-radius:14px;box-shadow:var(--soft-shadow)}
.stat strong{color:#243454}
#quotes .panel,#quotes .split-quotes .quote-half{background:#fff;border-color:var(--premium-line);border-radius:14px;box-shadow:var(--soft-shadow)}
#quotes .split-quotes{background:transparent;border:0;box-shadow:none}
#quotes .groupbar,#quotes .panel .groupbar{background:linear-gradient(100deg,var(--tint,#f2efff),#fafbff);color:#293758;border-color:var(--premium-line)}
#quotes .groupbar:hover{background:#f2effc;filter:none}
#quotes thead th{color:#61708e;background:#f8f9ff}
#quotes td{border-color:#eeedf6}
#quotes tr.section td{background:#f2f4fc;color:#445474}
#quotes tbody tr[data-id]:hover{background:#f8f5ff}
#quotes .price,#quotes td.price{color:#6446d7}
#quotes .country{color:#2b3858}
#quotes .source,#quotes td.source{color:#6f7b95}
#quotes .compact-time{color:#7b87a0}
#quotes .kind-pic{background:#6c61d9}
#quotes td.row-actions button{color:#70609f}
#quotes td.row-actions button:hover{color:#6548d1;background:#f0ebff;border-color:#d9cef6}
.shared-settings summary{color:#586185}
dialog,#loginPanel,#sessionLoading{background:#fff;border-color:#e1dff0;box-shadow:0 16px 64px #51417720}
dialog::backdrop{background:#26315359}
#userMessage{color:#6548d1}
.more-filters>div,.display-menu>div,.quote-more-actions>div{border-color:#e4dff2;box-shadow:0 8px 28px #51417718}
@media print{body,aside,.quote-controls,.shared-quote-page .quote-controls{background:#fff;box-shadow:none}#quotes .panel,.stat{box-shadow:none}}

/* Capsule controls; structural table headers, stat cards and the mascot keep their shape. */
body button:not(.groupbar):not(.group):not(.stat):not(.climbing-monkey),
body .quote-controls select,body .quote-controls input:not([type="checkbox"]):not([type="radio"]),
body .display-menu>summary,body .quote-more-actions>summary,body .more-filters>summary{border-radius:999px}

/* Compact quotation controls: keep related actions together instead of stretching a blank lane. */
body .quote-controls .quote-quick-nav{gap:5px!important}
body .quote-controls .quote-quick-nav>button{min-height:36px;padding:7px 12px;gap:7px;font-size:14px;line-height:20px;border-color:#e2dff0;box-shadow:0 1px 3px #51417706}
body .quote-controls .quote-quick-nav>button.active{border-color:#7960e2;box-shadow:0 2px 6px #7054df20}
body .quote-controls>.toolbar>button,
body .quote-controls>.toolbar>#search{height:36px;min-height:36px;padding:7px 12px;font-size:14px;line-height:20px;box-sizing:border-box}
body .quote-controls>.toolbar>label{font-size:14px;line-height:20px}
body .quote-controls .nav-count{padding:1px 5px;font-size:12px;line-height:16px;border-radius:6px}
body .quote-controls .quote-quick-nav>.clear-filters{margin-left:3px}
body .quote-controls .quote-workbench{gap:6px;margin-top:5px;padding:4px 0;align-items:center}
body .quote-controls .quote-workbench>select,
body .quote-controls .quote-workbench>input,
body .quote-controls .quote-workbench button,
body .quote-controls .quote-workbench summary{min-height:32px;padding:5px 10px;font-size:13px;line-height:20px}
body .quote-controls .quote-workbench>input{width:146px}
body .quote-controls .quote-workbench>.quote-action-area{flex:0 1 auto;width:auto;min-height:32px;margin-left:4px;padding:0;border:0}
body .quote-controls .quote-action-area>div{min-height:32px;gap:6px;justify-content:flex-start}
body .quote-controls .quote-action-area.batch-active{padding:3px 6px}
body .quote-controls .quote-workbench #selectedQuoteCount{min-width:72px;font-size:12px}
@media(pointer:coarse){
 body .quote-controls>.toolbar>button,
 body .quote-controls>.toolbar>#search,
 body .quote-controls .quote-quick-nav>button,
 body .quote-controls .quote-workbench>select,
 body .quote-controls .quote-workbench>input,
 body .quote-controls .quote-workbench button,
 body .quote-controls .quote-workbench summary{min-height:40px}
}

/* Cream kitten companion and quiet decorative whitespace; quotation cells remain opaque. */
body{background-image:url('/icons/CatBackground.svg'),linear-gradient(120deg,#edf7ff,#f2f3fd 65%,#eef4ff);background-size:720px 480px,cover;background-repeat:repeat,no-repeat}
aside{background-image:url('/icons/CatBackground.svg'),linear-gradient(180deg,#f8faff,#f0f2fd);background-size:480px 320px,cover}
.quote-controls,.shared-quote-page .quote-controls{background-image:url('/icons/CatBackground.svg');background-size:720px 480px;background-repeat:repeat}
.cream-cat-stage .climber-art{object-fit:contain;filter:drop-shadow(0 3px 3px #71599418);transform-origin:50% 80%}
.cream-cat-stage .climbing-monkey:hover{filter:drop-shadow(0 2px 4px #a791cd30)}
.cream-cat-stage .climbing-monkey:focus-visible{outline-color:#9477dc}
.cream-cat-stage .climber-message{color:#75618e;background:#fffaff;border-color:#e6dcee;box-shadow:0 3px 10px #75518b0c}
.climber-settings button{color:#75618e;border-color:#e6dcee;background:#fffaff}
@keyframes kitten-breathe{0%,100%{transform:scaleX(var(--climber-facing,1)) translateY(0)}50%{transform:scaleX(var(--climber-facing,1)) translateY(-2px)}}
@keyframes kitten-nuzzle{0%,100%{transform:scaleX(var(--climber-facing,1)) rotate(0)}35%{transform:scaleX(var(--climber-facing,1)) rotate(-6deg)}70%{transform:scaleX(var(--climber-facing,1)) rotate(5deg)}}
@media(prefers-reduced-motion:no-preference){
 .cream-cat-stage .climber-art{animation:kitten-breathe 3.2s ease-in-out infinite}
 .cream-cat-stage.is-waving .climber-art,.cream-cat-stage.is-flipping .climber-art,.cream-cat-stage.has-banana .climber-art{animation:kitten-nuzzle .9s ease-in-out 2}
 .cream-cat-stage[data-paused="true"] .climber-art,.cream-cat-stage.is-dragging .climber-art{animation-play-state:paused}
}
@media print{body,aside,.quote-controls,.shared-quote-page .quote-controls{background-image:none}.cream-cat-stage{display:none}}
