/* QuoteVault application component layer — shared by Account and Admin. */
:root{--qv-surface:#0b0c0c;--qv-surface-2:#101111;--qv-surface-3:#151616;--qv-border:#2b2d2d;--qv-border-strong:#404343;--qv-text:#f1f0ea;--qv-muted:#858b89;--qv-accent:#e33c36;--qv-good:#52d38b;--qv-warn:#d4a941;--qv-danger:#e35a5a;--qv-blue:#5aa6e8;--qv-shadow:0 24px 80px rgba(0,0,0,.55)}
.qv-ui-button,.qv-ui-icon-button,.qv-ui-input,.qv-ui-select,.qv-ui-textarea{font:600 12px/1.2 'IBM Plex Mono',monospace;box-sizing:border-box}
.qv-ui-button,.qv-ui-icon-button{border:1px solid var(--qv-border-strong);background:#0d0e0e;color:var(--qv-text);text-transform:uppercase;letter-spacing:.08em;cursor:pointer;transition:border-color .15s ease,background .15s ease,transform .15s ease;color .15s ease;text-decoration:none!important}
.qv-ui-button{min-height:42px;padding:0 16px;display:inline-flex;align-items:center;justify-content:center;gap:8px}
.qv-ui-button:hover,.qv-ui-icon-button:hover{border-color:#757a77;background:#151616;color:#fff}.qv-ui-button:active,.qv-ui-icon-button:active{transform:translateY(1px)}
.qv-ui-button.is-primary{background:#efeee8;color:#0b0c0c;border-color:#efeee8}.qv-ui-button.is-primary:hover{background:#fff;border-color:#fff;color:#000}
.qv-ui-button.is-accent{background:rgba(227,60,54,.13);border-color:#8e302d;color:#ff8a85}.qv-ui-button.is-danger{border-color:#6e2929;color:#f08686;background:rgba(116,31,31,.12)}.qv-ui-button.is-ghost{border-color:transparent;background:transparent;color:var(--qv-muted)}
.qv-ui-button:disabled,.qv-ui-icon-button:disabled{opacity:.45;cursor:not-allowed;transform:none}
.qv-ui-icon-button{width:42px;height:42px;display:grid;place-items:center;padding:0;font-size:18px}
.qv-ui-input,.qv-ui-select,.qv-ui-textarea{width:100%;border:1px solid var(--qv-border);background:#090a0a;color:var(--qv-text);padding:12px 13px;outline:none;border-radius:0}.qv-ui-input:focus,.qv-ui-select:focus,.qv-ui-textarea:focus{border-color:#777d79;box-shadow:inset 3px 0 0 var(--qv-accent)}.qv-ui-textarea{min-height:120px;resize:vertical;line-height:1.55}.qv-ui-input::placeholder,.qv-ui-textarea::placeholder{color:#555b59}
.qv-ui-chip{display:inline-flex;align-items:center;gap:7px;min-height:30px;padding:0 9px;border:1px solid var(--qv-border);font:500 11px 'IBM Plex Mono',monospace;color:#a7adaa;background:#0d0e0e}.qv-ui-chip button{border:0;background:transparent;color:#777;cursor:pointer;font-size:14px;padding:0}.qv-ui-chip button:hover{color:#fff}
.qv-ui-kicker{font:600 10px 'IBM Plex Mono',monospace;letter-spacing:.18em;text-transform:uppercase;color:var(--qv-accent)}
.qv-ui-empty{border:1px dashed var(--qv-border);padding:22px;color:var(--qv-muted);font:500 12px/1.6 'IBM Plex Mono',monospace}
.qv-ui-spinner{width:17px;height:17px;border:2px solid rgba(255,255,255,.18);border-top-color:#fff;border-radius:50%;animation:qv-spin .65s linear infinite}@keyframes qv-spin{to{transform:rotate(360deg)}}
.qv-app-dock{position:fixed;right:18px;bottom:var(--qv-dock-bottom,18px);z-index:8700;display:flex;gap:8px;align-items:center}.qv-app-dock button{position:relative;width:44px;height:44px;border:1px solid #373a39;background:#0b0c0c;color:#bfc3c1;display:grid;place-items:center;font-size:19px;cursor:pointer;box-shadow:0 10px 24px rgba(0,0,0,.28)}.qv-app-dock button:hover{border-color:#777;color:#fff}.qv-app-dock .qv-app-badge{position:absolute;right:-5px;top:-6px;min-width:18px;height:18px;padding:0 5px;border:2px solid #0b0c0c;border-radius:10px;background:var(--qv-accent);color:#fff;display:grid;place-items:center;font:700 9px 'IBM Plex Mono',monospace}.qv-app-badge[hidden]{display:none}
.qv-command-backdrop,.qv-app-panel-backdrop,.qv-quote-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.58);backdrop-filter:blur(3px);z-index:9100;opacity:0;pointer-events:none;transition:opacity .16s ease}.qv-command-backdrop.is-open,.qv-app-panel-backdrop.is-open,.qv-quote-backdrop.is-open{opacity:1;pointer-events:auto}
.qv-command{position:fixed;left:50%;top:12vh;z-index:9200;width:min(760px,calc(100vw - 32px));transform:translate(-50%,-10px);opacity:0;pointer-events:none;background:#0a0b0b;border:1px solid #484b4a;box-shadow:var(--qv-shadow);transition:.16s ease}.qv-command.is-open{transform:translate(-50%,0);opacity:1;pointer-events:auto}.qv-command-head{display:flex;align-items:center;border-bottom:1px solid var(--qv-border);padding:10px}.qv-command-head i{font-size:20px;color:#6c7270;margin:0 8px}.qv-command-head input{flex:1;border:0;background:transparent;color:#fff;padding:12px;font:500 15px 'IBM Plex Mono',monospace;outline:none}.qv-command-hint{padding:10px 14px;border-top:1px solid var(--qv-border);display:flex;justify-content:space-between;color:#666d6a;font:500 10px 'IBM Plex Mono',monospace}.qv-command-results{max-height:52vh;overflow:auto;padding:8px}.qv-command-item{display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid transparent;color:#dfe1df;text-decoration:none}.qv-command-item:hover,.qv-command-item.is-active{background:#131515;border-color:#303332;color:#fff}.qv-command-item-icon{width:32px;height:32px;border:1px solid #303332;display:grid;place-items:center;color:#949a97}.qv-command-item strong{display:block;font:600 13px 'Inter',sans-serif}.qv-command-item small{display:block;margin-top:4px;color:#727976;font:500 10px 'IBM Plex Mono',monospace}.qv-command-item em{font:500 9px 'IBM Plex Mono',monospace;color:#666d6a;text-transform:uppercase;font-style:normal}
.qv-app-panel{position:fixed;right:0;top:0;bottom:0;z-index:9200;width:min(440px,100vw);background:#090a0a;border-left:1px solid #3a3d3c;box-shadow:var(--qv-shadow);transform:translateX(100%);transition:transform .2s ease;display:flex;flex-direction:column}.qv-app-panel.is-open{transform:translateX(0)}.qv-app-panel-head{padding:21px 22px;border-bottom:1px solid var(--qv-border);display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.qv-app-panel-head h2{font:800 31px/1 'Barlow Condensed',sans-serif;text-transform:uppercase;margin:5px 0 0;color:#f2f1ec}.qv-app-panel-body{overflow:auto;flex:1}.qv-app-panel-actions{box-sizing:border-box!important;width:100%!important;max-width:none!important;min-height:68px;margin:0!important;padding:12px 16px!important;border:0!important;border-top:1px solid var(--qv-border)!important;background:#090a0a!important;box-shadow:none!important;display:flex!important;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto}.qv-app-panel-actions::before,.qv-app-panel-actions::after{display:none!important;content:none!important}.qv-app-panel-actions>.qv-ui-button{margin:0!important;flex:0 0 auto}
.qv-notification{padding:16px 18px;border-bottom:1px solid #222525;display:grid;grid-template-columns:10px 1fr;gap:13px;color:#d9dcda;text-decoration:none}.qv-notification:hover{background:#101212;color:#fff}.qv-notification-dot{width:7px;height:7px;border-radius:50%;background:#3e4240;margin-top:5px}.qv-notification:not(.is-read) .qv-notification-dot{background:var(--qv-accent);box-shadow:0 0 0 4px rgba(227,60,54,.08)}.qv-notification strong{display:block;font:600 13px 'Inter',sans-serif}.qv-notification p{margin:5px 0;color:#7f8683;font:500 11px/1.55 'IBM Plex Mono',monospace}.qv-notification small{color:#535957;font:500 9px 'IBM Plex Mono',monospace}.qv-notification.is-warning .qv-notification-dot{background:var(--qv-warn)}.qv-notification.is-error .qv-notification-dot{background:var(--qv-danger)}
.qv-job{padding:17px 18px;border-bottom:1px solid var(--qv-border)}.qv-job-head{display:flex;justify-content:space-between;gap:12px}.qv-job strong{font:600 13px 'Inter',sans-serif}.qv-job small{font:500 9px 'IBM Plex Mono',monospace;color:#6c7370;text-transform:uppercase}.qv-job-progress{height:4px;background:#1b1d1d;margin:12px 0}.qv-job-progress i{display:block;height:100%;background:#b8bcba;transition:width .2s ease}.qv-job.is-completed .qv-job-progress i{background:var(--qv-good)}.qv-job.is-failed .qv-job-progress i{background:var(--qv-danger)}.qv-job-actions{display:flex;gap:7px;margin-top:10px}.qv-job-error{color:#b96a6a;font:500 10px/1.5 'IBM Plex Mono',monospace}
.qv-quote-backdrop{z-index:9250}.qv-quote-drawer{position:fixed;right:0;top:0;bottom:0;z-index:9300;width:min(720px,100vw);background:#090a0a;border-left:1px solid #414443;box-shadow:var(--qv-shadow);transform:translateX(100%);transition:transform .22s ease;display:flex;flex-direction:column}.qv-quote-drawer.is-open{transform:translateX(0)}.qv-quote-drawer-head{padding:18px 20px;border-bottom:1px solid var(--qv-border);display:flex;justify-content:space-between;gap:12px;align-items:center}.qv-quote-drawer-head h2{font:800 27px 'Barlow Condensed',sans-serif;text-transform:uppercase;margin:2px 0 0}.qv-quote-drawer-body{padding:22px;overflow:auto;flex:1}.qv-quote-drawer-foot{border-top:1px solid var(--qv-border);padding:13px 18px;display:flex;justify-content:space-between;gap:10px;background:#0b0c0c}.qv-quote-main{border:1px solid var(--qv-border);background:#0d0e0e;padding:19px}.qv-quote-main textarea{font:500 16px/1.65 'Inter',sans-serif;min-height:150px}.qv-quote-byline{display:flex;align-items:center;gap:12px;margin-bottom:15px}.qv-quote-avatar{width:38px;height:38px;border:1px solid #343737;object-fit:cover;background:#151616}.qv-quote-avatar-fallback{width:38px;height:38px;border:1px solid #343737;display:grid;place-items:center;font:700 12px 'IBM Plex Mono',monospace}.qv-quote-byline strong{display:block;font:600 13px 'Inter',sans-serif}.qv-quote-byline small{display:block;color:#656b69;font:500 9px 'IBM Plex Mono',monospace;margin-top:3px}.qv-quote-meta-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--qv-border);border:1px solid var(--qv-border);margin-top:14px}.qv-quote-meta-grid>div{background:#0b0c0c;padding:14px}.qv-quote-meta-grid span{display:block;color:#626966;font:600 9px 'IBM Plex Mono',monospace;letter-spacing:.12em;text-transform:uppercase}.qv-quote-meta-grid strong,.qv-quote-meta-grid a{display:block;margin-top:7px;color:#d5d8d6;font:500 11px 'IBM Plex Mono',monospace;word-break:break-word}.qv-drawer-section{margin-top:22px}.qv-drawer-section-head{display:flex;align-items:end;justify-content:space-between;margin-bottom:10px}.qv-drawer-section-head h3{margin:4px 0 0;font:800 22px 'Barlow Condensed',sans-serif;text-transform:uppercase}.qv-chip-row{display:flex;flex-wrap:wrap;gap:7px}.qv-inline-add{display:flex;gap:7px;margin-top:9px}.qv-inline-add input,.qv-inline-add select{min-width:0;flex:1}.qv-context-line{border-left:2px solid #363938;padding:9px 12px;margin:7px 0;background:#0c0d0d}.qv-context-line strong{font:600 11px 'Inter',sans-serif}.qv-context-line p{margin:4px 0 0;color:#9ca19e;font:500 11px/1.55 'IBM Plex Mono',monospace}.qv-attachment{display:flex;justify-content:space-between;align-items:center;gap:12px;border:1px solid var(--qv-border);padding:10px 12px;color:#cdd1cf;text-decoration:none;margin-bottom:7px}.qv-attachment small{display:block;color:#666d6a;margin-top:3px}.qv-history-line{display:grid;grid-template-columns:1fr auto;gap:10px;padding:8px 0;border-bottom:1px solid #202222}.qv-history-line strong{font:500 11px 'IBM Plex Mono',monospace}.qv-history-line small{color:#5f6663;font:500 9px 'IBM Plex Mono',monospace}.qv-quote-drawer.is-loading .qv-quote-drawer-body{opacity:.55;pointer-events:none}.qv-removed-state{border:1px solid #79302f;background:rgba(113,35,34,.11);padding:12px;color:#d98582;font:600 11px 'IBM Plex Mono',monospace;margin-bottom:14px}
.qv-undo-toast{position:fixed;left:50%;bottom:24px;z-index:9800;transform:translate(-50%,16px);opacity:0;min-width:min(520px,calc(100vw - 32px));max-width:650px;background:#111313;border:1px solid #424645;box-shadow:0 16px 45px rgba(0,0,0,.48);padding:12px 13px 12px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px;transition:.18s ease}.qv-undo-toast.is-visible{transform:translate(-50%,0);opacity:1}.qv-undo-toast span{font:500 12px 'Inter',sans-serif}.qv-undo-toast button{min-height:34px}
.qv-live-pulse{display:inline-flex;align-items:center;gap:6px;color:#6e7572;font:600 9px 'IBM Plex Mono',monospace;text-transform:uppercase}.qv-live-pulse i{width:6px;height:6px;border-radius:50%;background:#5d625f}.qv-live-pulse.is-live i{background:var(--qv-good);box-shadow:0 0 0 4px rgba(82,211,139,.08)}
.qv-activity-stream{border:1px solid var(--qv-border)}.qv-activity-item{display:grid;grid-template-columns:11px minmax(0,1fr) auto;gap:12px;padding:13px 15px;border-bottom:1px solid #222424;align-items:start}.qv-activity-item:last-child{border-bottom:0}.qv-activity-marker{width:7px;height:7px;background:#555b58;margin-top:4px}.qv-activity-item[data-type^="quote."] .qv-activity-marker{background:var(--qv-accent)}.qv-activity-item strong{display:block;font:600 12px 'Inter',sans-serif}.qv-activity-item small{display:block;margin-top:4px;color:#666d6a;font:500 9px 'IBM Plex Mono',monospace}.qv-activity-item time{color:#555c59;font:500 9px 'IBM Plex Mono',monospace;white-space:nowrap}
.qv-media-upload{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}.qv-media-upload input[type=file]{display:none}.qv-media-upload-status{color:#6d7471;font:500 9px 'IBM Plex Mono',monospace}.qv-media-upload-preview{max-width:180px;max-height:82px;border:1px solid var(--qv-border);object-fit:cover;background:#111}
.qv-inline-editable{position:relative}.qv-inline-editable [data-qv-inline-trigger]{cursor:text;border-bottom:1px dashed #454947}.qv-inline-editor{display:flex;gap:7px;align-items:center;margin-top:7px}.qv-inline-editor input{min-width:0;flex:1}
.qv-public-layout-preview{display:grid;gap:10px;padding:14px;border:1px solid var(--qv-border);background:#090a0a}.qv-public-layout-preview.is-compact{grid-template-columns:1fr auto}.qv-public-layout-preview.is-banner{min-height:150px;align-content:end;background:linear-gradient(180deg,rgba(0,0,0,.05),#0a0a0a)}
@media(max-width:720px){.qv-app-dock{right:10px;bottom:var(--qv-dock-bottom,10px)}.qv-app-dock button{width:42px;height:42px}.qv-command{top:8vh}.qv-command-hint{display:none}.qv-quote-drawer-body{padding:16px}.qv-quote-meta-grid{grid-template-columns:1fr}.qv-quote-drawer-foot{flex-wrap:wrap}.qv-app-panel{width:100vw}.qv-inline-add{flex-direction:column}.qv-activity-item{grid-template-columns:10px 1fr}.qv-activity-item time{grid-column:2}}
@media(prefers-reduced-motion:reduce){.qv-command,.qv-app-panel,.qv-quote-drawer,.qv-command-backdrop,.qv-app-panel-backdrop,.qv-quote-backdrop,.qv-undo-toast{transition:none!important}.qv-ui-spinner{animation-duration:1.4s}}

/* Application Experience v9: inline editing and managed media */
.qv-inline-editable{position:relative;cursor:text;border-radius:2px;transition:background .15s ease,box-shadow .15s ease}.qv-inline-editable:hover{background:rgba(255,255,255,.025);box-shadow:0 0 0 1px #2c2c2c}.qv-inline-editable:hover::after{content:'EDIT';margin-left:10px;color:#66615e;font:600 7px var(--qv-mono,monospace);letter-spacing:.09em;vertical-align:middle}.qv-inline-editor{width:100%;margin:0;min-width:180px}.qv-inline-editor-actions{display:flex;gap:6px;margin-top:8px}.qv-inline-editable>textarea.qv-inline-editor{min-height:86px;display:block}.qv-ui-chip.is-pending{opacity:.48}.qv-media-field{display:grid!important;grid-template-columns:minmax(0,1fr) auto;gap:7px;align-items:end}.qv-media-field>span,.qv-media-field>small{grid-column:1/-1}.qv-media-field>.qv-ui-button{white-space:nowrap}.qv-collection-identity-fields{display:grid;gap:12px;padding:14px 0;border-top:1px solid #272727;border-bottom:1px solid #272727;margin:10px 0 14px}
@media(max-width:700px){.qv-media-field{grid-template-columns:1fr}.qv-media-field>.qv-ui-button{width:100%}}
.qv-live-indicator{display:inline-flex;align-items:center;gap:7px;color:#555b58;font:700 7px var(--qv-mono,'IBM Plex Mono',monospace);letter-spacing:.11em}.qv-live-indicator i{width:7px;height:7px;border:1px solid #515553;background:#171817}.qv-live-indicator.is-live{color:#7bbf8d}.qv-live-indicator.is-live i{border-color:#4c9c63;background:#4c9c63;box-shadow:0 0 0 4px rgba(76,156,99,.1)}.qv-dashboard-live-activity{margin-top:22px}.qv-dashboard-live-activity .qv-activity-stream{border:0}

/* 2.33 consolidated QA pass: application tools live in the authenticated top bar; exports use persistent toasts. */
.qv-app-topbar-tools{display:flex;align-items:center;gap:7px;flex:0 0 auto}.qv-app-topbar-tools>button{position:relative;width:40px;height:40px;display:grid;place-items:center;border:1px solid #303332;background:#0b0c0c;color:#aeb3b0;font-size:18px;cursor:pointer}.qv-app-topbar-tools>button:hover{border-color:#646966;color:#fff;background:#111313}.qv-app-topbar-tools .qv-app-badge{position:absolute;right:-5px;top:-5px;min-width:17px;height:17px;padding:0 4px;border:2px solid #080808;border-radius:10px;background:var(--qv-accent);color:#fff;display:grid;place-items:center;font:700 8px 'IBM Plex Mono',monospace}.qv-app-topbar-tools .qv-app-badge[hidden]{display:none}
.qv-job-toast-stack{position:fixed;right:22px;bottom:22px;z-index:9750;width:min(390px,calc(100vw - 32px));display:grid;gap:9px;pointer-events:none}.qv-job-toast{pointer-events:auto;border:1px solid #3a3e3c;background:#0b0c0c;box-shadow:0 18px 50px rgba(0,0,0,.48);padding:14px}.qv-job-toast header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.qv-job-toast header span{display:block}.qv-job-toast header small{display:block;color:var(--qv-accent);font:700 7px 'IBM Plex Mono',monospace;letter-spacing:.12em}.qv-job-toast header strong{display:block;margin-top:5px;color:#efeee9;font:700 18px/1 'Barlow Condensed',sans-serif;text-transform:uppercase}.qv-job-toast header button{width:30px;height:30px;border:1px solid #343736;background:#0a0b0b;color:#8d9390;display:grid;place-items:center;cursor:pointer}.qv-job-toast header button:hover{border-color:#666;color:#fff}.qv-job-toast-state{display:flex;justify-content:space-between;gap:12px;margin-top:12px;color:#777e7a;font:600 8px 'IBM Plex Mono',monospace;text-transform:uppercase}.qv-job-toast-state b{color:#aeb4b1}.qv-job-toast .qv-job-progress{margin:8px 0 0}.qv-job-toast>p{margin:10px 0 0;color:#c36f6a;font:500 9px/1.5 'IBM Plex Mono',monospace}.qv-job-toast-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}.qv-job-toast-actions:empty{display:none}.qv-job-toast-actions .qv-ui-button{min-height:36px}.qv-job-toast.is-completed{border-color:#31563c}.qv-job-toast.is-failed{border-color:#66302f}
@media(max-width:900px){.qv-app-topbar-tools{gap:5px}.qv-app-topbar-tools>button{width:38px;height:38px}}
@media(max-width:650px){.qv-app-topbar-tools>button{width:36px;height:36px}.qv-job-toast-stack{right:10px;bottom:76px;width:calc(100vw - 20px)}}
