diff --git a/web/src/assets/styles/app.css b/web/src/assets/styles/app.css index f4e36ad..f6d3b79 100644 --- a/web/src/assets/styles/app.css +++ b/web/src/assets/styles/app.css @@ -1,12 +1,28 @@ -.app { +.app-desktop-shell { + width: 100vw; min-height: 100dvh; + height: 100dvh; + overflow: hidden; + background: var(--bg); +} + +.app-desktop-stage { + position: relative; + width: var(--desktop-stage-width, 100vw); + min-height: var(--desktop-stage-height, 100dvh); + transform: scale(var(--desktop-ui-scale, 1)); + transform-origin: top left; +} + +.app { + min-height: var(--desktop-stage-height, 100dvh); display: grid; grid-template-columns: 220px minmax(0, 1fr); background: var(--bg); } .boot-state { - min-height: 100dvh; + min-height: var(--desktop-stage-height, 100dvh); display: grid; place-items: center; padding: 24px; @@ -74,7 +90,7 @@ grid-template-rows: auto minmax(0, 1fr); } .main.chat-main { - height: 100dvh; + height: var(--desktop-stage-height, 100dvh); grid-template-rows: auto minmax(0, 1fr); overflow: hidden; } @@ -84,7 +100,7 @@ .main.audit-main, .main.employees-main, .main.settings-main { - height: 100dvh; + height: var(--desktop-stage-height, 100dvh); grid-template-rows: auto minmax(0, 1fr); overflow: hidden; } diff --git a/web/src/assets/styles/global.css b/web/src/assets/styles/global.css index 8a62fae..51e49c1 100644 --- a/web/src/assets/styles/global.css +++ b/web/src/assets/styles/global.css @@ -23,10 +23,15 @@ --nav-muted: #7d89a5; --radius: 8px; --ease: cubic-bezier(.2, .8, .2, 1); + --desktop-ui-scale: 1; + --desktop-ui-inverse-scale: 1; + --desktop-stage-width: 100vw; + --desktop-stage-height: 100dvh; font-family: "LXGW WenKai", Inter, "SF Pro Display", "PingFang SC", sans-serif; } * { box-sizing: border-box; } +html, body, #app { min-height: 100%; } body { margin: 0; min-height: 100dvh; color: var(--text); background: var(--bg); } .mdi { line-height: 1; vertical-align: middle; } button, input, select, textarea { font: inherit; } diff --git a/web/src/assets/styles/views/backend-unavailable-view.css b/web/src/assets/styles/views/backend-unavailable-view.css index 0cfb19d..7005b65 100644 --- a/web/src/assets/styles/views/backend-unavailable-view.css +++ b/web/src/assets/styles/views/backend-unavailable-view.css @@ -1,5 +1,5 @@ .backend-unavailable { - min-height: 100vh; + min-height: var(--desktop-stage-height, 100dvh); display: grid; place-items: center; padding: 32px; diff --git a/web/src/assets/styles/views/login-view.css b/web/src/assets/styles/views/login-view.css index 143e8c6..168fd93 100644 --- a/web/src/assets/styles/views/login-view.css +++ b/web/src/assets/styles/views/login-view.css @@ -1,6 +1,6 @@ .login-page { position: relative; - min-height: 100dvh; + min-height: var(--desktop-stage-height, 100dvh); display: grid; grid-template-columns: minmax(620px, .96fr) minmax(520px, .84fr); justify-content: center; @@ -660,7 +660,7 @@ @media (max-width: 980px) { .login-page { - min-height: 100dvh; + min-height: var(--desktop-stage-height, 100dvh); grid-template-columns: 1fr; padding: 92px 28px 28px; overflow: auto; diff --git a/web/src/assets/styles/views/setup-view.css b/web/src/assets/styles/views/setup-view.css index ba0de3d..6c83698 100644 --- a/web/src/assets/styles/views/setup-view.css +++ b/web/src/assets/styles/views/setup-view.css @@ -1,7 +1,7 @@ -.setup-page { - min-height: 100dvh; - display: grid; - grid-template-columns: minmax(320px, 392px) minmax(0, 1fr); +.setup-page { + min-height: var(--desktop-stage-height, 100dvh); + display: grid; + grid-template-columns: minmax(320px, 392px) minmax(0, 1fr); background: radial-gradient(circle at top left, rgba(16, 185, 129, 0.24), transparent 24rem), radial-gradient(circle at 36% 14%, rgba(16, 185, 129, 0.16), transparent 18rem), diff --git a/web/src/assets/styles/views/travel-reimbursement-create-view.css b/web/src/assets/styles/views/travel-reimbursement-create-view.css index e3eea31..7d46179 100644 --- a/web/src/assets/styles/views/travel-reimbursement-create-view.css +++ b/web/src/assets/styles/views/travel-reimbursement-create-view.css @@ -4,23 +4,45 @@ z-index: 9999; display: grid; place-items: center; - background: rgba(15, 23, 42, 0.46); - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); + background: rgba(236, 243, 248, 0.42); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); } .assistant-modal { - width: min(1480px, calc(100vw - 48px)); - height: min(920px, calc(100vh - 40px)); + --assistant-base-width: 1430px; + --assistant-base-height: 820px; + --assistant-visual-scale: 1; + --assistant-scale: calc(var(--assistant-visual-scale) * var(--desktop-ui-inverse-scale, 1)); + width: calc(var(--assistant-base-width) * var(--assistant-scale)); + height: calc(var(--assistant-base-height) * var(--assistant-scale)); + display: block; + background: transparent; + box-shadow: none; + border: 0; + backdrop-filter: none; + -webkit-backdrop-filter: none; + overflow: hidden; +} + +.assistant-modal-stage { + width: var(--assistant-base-width); + height: var(--assistant-base-height); display: grid; grid-template-rows: auto minmax(0, 1fr); - border-radius: 28px; + transform: scale(var(--assistant-scale)); + transform-origin: top left; + border-radius: 30px; background: - radial-gradient(circle at top right, rgba(16, 185, 129, 0.08), transparent 24%), - linear-gradient(180deg, #fbfdff 0%, #f6f9fc 100%); + radial-gradient(circle at top right, rgba(16, 185, 129, 0.10), transparent 24%), + radial-gradient(circle at top left, rgba(59, 130, 246, 0.08), transparent 22%), + linear-gradient(180deg, rgba(255, 255, 255, 0.74) 0%, rgba(246, 250, 252, 0.66) 100%); box-shadow: - 0 24px 80px rgba(15, 23, 42, 0.22), - 0 2px 12px rgba(15, 23, 42, 0.08); + 0 24px 64px rgba(15, 23, 42, 0.14), + 0 6px 20px rgba(15, 23, 42, 0.05); + border: 1px solid rgba(255, 255, 255, 0.6); + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); overflow: hidden; } @@ -28,16 +50,16 @@ display: flex; align-items: center; justify-content: space-between; - gap: 20px; - padding: 24px 28px 20px; - border-bottom: 1px solid #e5edf5; - background: rgba(255, 255, 255, 0.82); + gap: 16px; + padding: 22px 26px 18px; + border-bottom: 1px solid rgba(226, 232, 240, 0.72); + background: rgba(255, 255, 255, 0.46); } .assistant-header-main { display: flex; align-items: flex-start; - gap: 16px; + gap: 14px; min-width: 0; } @@ -48,10 +70,11 @@ justify-content: center; padding: 0 14px; border-radius: 999px; - background: rgba(16, 185, 129, 0.12); - color: #059669; + background: linear-gradient(135deg, #22c55e, #10b981); + color: #fff; font-size: 12px; font-weight: 800; + box-shadow: 0 8px 16px rgba(16, 185, 129, 0.14); white-space: nowrap; } @@ -62,96 +85,113 @@ .assistant-header h2 { color: #0f172a; - font-size: 24px; + font-size: 22px; font-weight: 900; + letter-spacing: 0.01em; } .assistant-header p { margin-top: 4px; color: #64748b; - font-size: 14px; - line-height: 1.6; + font-size: 13px; + line-height: 1.55; } .assistant-header-actions { display: flex; align-items: center; - gap: 12px; + gap: 10px; } .source-pill { - min-height: 34px; + min-height: 38px; display: inline-flex; align-items: center; + gap: 8px; padding: 0 14px; - border-radius: 999px; - background: #eff6ff; - color: #2563eb; - font-size: 13px; + border-radius: 14px; + background: rgba(245, 252, 249, 0.95); + color: #166534; + font-size: 12px; font-weight: 800; + border: 1px solid rgba(16, 185, 129, 0.16); + box-shadow: 0 8px 16px rgba(148, 163, 184, 0.1); white-space: nowrap; } +.source-pill i { + font-size: 14px; +} + .close-btn { width: 38px; height: 38px; display: grid; place-items: center; border: 1px solid #d7e0ea; - border-radius: 999px; - background: #fff; - color: #64748b; - font-size: 18px; + border-radius: 14px; + background: rgba(255, 255, 255, 0.96); + color: #475569; + font-size: 16px; + box-shadow: 0 6px 14px rgba(148, 163, 184, 0.1); } .assistant-layout { min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); - gap: 18px; - padding: 18px; + gap: 16px; + padding: 16px; } .assistant-layout.has-insight { - grid-template-columns: minmax(0, 1.18fr) 420px; + grid-template-columns: minmax(0, 1.24fr) clamp(360px, 31vw, 440px); } .dialog-panel, .insight-panel { min-width: 0; min-height: 0; - border: 1px solid #e7eef6; + border: 1px solid rgba(231, 238, 246, 0.92); border-radius: 24px; - background: rgba(255, 255, 255, 0.92); - box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04); + background: rgba(255, 255, 255, 0.72); + box-shadow: + 0 12px 30px rgba(226, 232, 240, 0.26), + 0 1px 4px rgba(15, 23, 42, 0.03); + backdrop-filter: blur(18px); + -webkit-backdrop-filter: blur(18px); } .dialog-panel { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; overflow: hidden; + background: + radial-gradient(circle at top right, rgba(59, 130, 246, 0.05), transparent 20%), + linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(251, 253, 255, 0.72) 100%); } .dialog-toolbar { display: flex; - gap: 10px; + gap: 12px; flex-wrap: wrap; - padding: 18px 20px 14px; - border-bottom: 1px solid #eef2f7; + padding: 16px 18px 12px; + border-bottom: 1px solid rgba(238, 242, 247, 0.9); } .shortcut-chip { min-height: 36px; display: inline-flex; align-items: center; - gap: 8px; + gap: 7px; padding: 0 14px; - border: 1px solid #dbe6f0; + border: 1px solid rgba(219, 230, 240, 0.9); border-radius: 999px; - background: #fff; + background: rgba(255, 255, 255, 0.95); color: #334155; - font-size: 13px; - font-weight: 800; + font-size: 12px; + font-weight: 750; + box-shadow: 0 4px 12px rgba(241, 245, 249, 0.78); white-space: nowrap; } @@ -163,8 +203,8 @@ min-height: 0; display: grid; align-content: start; - gap: 16px; - padding: 20px; + gap: 14px; + padding: 18px; overflow-y: auto; } @@ -187,8 +227,9 @@ .message-row.user .message-bubble { order: 1; justify-self: end; - background: linear-gradient(135deg, rgba(37, 99, 235, 0.10), rgba(37, 99, 235, 0.04)); - border-color: rgba(37, 99, 235, 0.16); + background: linear-gradient(135deg, rgba(226, 238, 255, 0.98), rgba(242, 247, 255, 0.9)); + border-color: rgba(96, 165, 250, 0.24); + box-shadow: 0 14px 30px rgba(59, 130, 246, 0.08); } .message-avatar { @@ -199,7 +240,7 @@ border-radius: 999px; overflow: hidden; background: transparent; - box-shadow: 0 6px 16px rgba(15, 23, 42, 0.14); + box-shadow: 0 10px 20px rgba(148, 163, 184, 0.24); } .message-avatar img { @@ -212,11 +253,12 @@ .message-bubble { max-width: min(100%, 720px); padding: 14px 16px; - border: 1px solid #e1e8f0; + border: 1px solid rgba(225, 232, 240, 0.96); border-radius: 20px; - background: #fff; + background: rgba(255, 255, 255, 0.96); color: #24324a; line-height: 1.65; + box-shadow: 0 8px 18px rgba(241, 245, 249, 0.72); } .message-meta { @@ -282,9 +324,9 @@ } .message-detail-block { - margin-top: 12px; + margin-top: 14px; display: grid; - gap: 8px; + gap: 10px; } .message-detail-block > strong { @@ -411,7 +453,7 @@ } .composer { - padding: 0 20px 20px; + padding: 0 18px 18px; } .hidden-file-input { @@ -419,10 +461,12 @@ } .composer-shell { - border: 1px solid #d6e1ea; + border: 1px solid rgba(214, 225, 234, 0.95); border-radius: 22px; - background: #fff; - box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05); + background: rgba(255, 255, 255, 0.98); + box-shadow: + 0 14px 28px rgba(226, 232, 240, 0.28), + 0 1px 4px rgba(15, 23, 42, 0.03); overflow: hidden; } @@ -431,11 +475,11 @@ min-height: 84px; resize: none; border: 0; - padding: 18px 18px 8px; + padding: 16px 16px 8px; background: transparent; color: #0f172a; - font-size: 15px; - line-height: 1.65; + font-size: 14px; + line-height: 1.6; } .composer-shell textarea::placeholder { @@ -475,9 +519,11 @@ } .tool-btn { - background: #f1f5f9; + background: #ffffff; color: #475569; - font-size: 20px; + font-size: 18px; + border: 1px solid #dbe6f0; + box-shadow: 0 4px 12px rgba(241, 245, 249, 0.76); } .tool-btn:disabled { @@ -492,10 +538,10 @@ } .send-btn { - background: #10b981; + background: linear-gradient(135deg, #22c55e, #10b981); color: #fff; - font-size: 18px; - box-shadow: 0 10px 22px rgba(16, 185, 129, 0.22); + font-size: 16px; + box-shadow: 0 8px 18px rgba(16, 185, 129, 0.18); } .send-btn:disabled { @@ -505,25 +551,76 @@ } .insight-panel { + position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, rgba(251, 254, 252, 0.74) 100%); +} + +.insight-panel::before { + content: ""; + position: absolute; + top: -18px; + right: -34px; + width: 240px; + height: 150px; + border-radius: 0 0 0 140px; + background: + radial-gradient(circle at 0 100%, rgba(16, 185, 129, 0.14), transparent 54%), + linear-gradient(135deg, rgba(16, 185, 129, 0.14), rgba(96, 165, 250, 0.06)); + opacity: 0.9; + pointer-events: none; } .insight-head { display: flex; align-items: flex-start; justify-content: space-between; - gap: 16px; - padding: 20px; - border-bottom: 1px solid #eef2f7; + gap: 14px; + padding: 18px 18px 14px; + border-bottom: 1px solid rgba(238, 242, 247, 0.88); + position: relative; + z-index: 1; +} + +.insight-head.review-mode { + justify-content: flex-start; +} + +.insight-head-eyebrow { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.insight-head-badge { + min-height: 24px; + display: inline-flex; + align-items: center; + padding: 0 10px; + border-radius: 999px; + background: rgba(240, 253, 244, 0.95); + color: #059669; + font-size: 11px; + font-weight: 800; + border: 1px solid rgba(16, 185, 129, 0.12); +} + +.review-insight-title-row { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; } .intent-pill { - min-height: 28px; + min-height: 30px; display: inline-flex; align-items: center; - padding: 0 12px; + padding: 0 13px; border-radius: 999px; font-size: 12px; font-weight: 800; @@ -557,23 +654,25 @@ .insight-head h3 { margin-top: 10px; color: #0f172a; - font-size: 20px; + font-size: 19px; font-weight: 900; - line-height: 1.3; + line-height: 1.25; } .insight-head p { margin-top: 6px; color: #64748b; - font-size: 13px; + font-size: 12px; line-height: 1.6; } .confidence-card { min-width: 92px; padding: 10px 12px; - border-radius: 16px; - background: #f8fafc; + border-radius: 14px; + background: rgba(255, 255, 255, 0.9); + border: 1px solid rgba(226, 232, 240, 0.9); + box-shadow: 0 6px 14px rgba(241, 245, 249, 0.72); text-align: right; } @@ -588,7 +687,7 @@ display: block; margin-top: 4px; color: #0f172a; - font-size: 22px; + font-size: 19px; font-weight: 900; } @@ -596,16 +695,346 @@ min-height: 0; display: grid; align-content: start; - gap: 14px; - padding: 18px 20px 20px; + gap: 12px; + padding: 14px 18px 18px; overflow-y: auto; + position: relative; + z-index: 1; +} + +.review-side-card { + display: grid; + gap: 10px; + padding: 14px; + border-radius: 18px; + border: 1px solid rgba(226, 232, 240, 0.94); + background: rgba(255, 255, 255, 0.76); + box-shadow: 0 3px 10px rgba(241, 245, 249, 0.46); +} + +.review-side-overview-card { + gap: 12px; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.84) 0%, rgba(249, 252, 255, 0.78) 100%); +} + +.review-side-intent-row { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + color: #475569; + font-size: 13px; +} + +.review-side-intent-row i { + color: #059669; + font-size: 16px; +} + +.review-side-intent-row strong { + color: #0f172a; + font-size: 14px; + font-weight: 850; +} + +.review-side-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.review-side-grid.compact { + gap: 8px; +} + +.review-side-metric-card { + display: grid; + grid-template-columns: 32px minmax(0, 1fr); + gap: 8px; + align-items: center; + padding: 12px; + border-radius: 14px; + border: 1px solid rgba(226, 232, 240, 0.92); + background: rgba(255, 255, 255, 0.68); + position: relative; + cursor: pointer; + transition: border-color 0.18s ease, background 0.18s ease, transform 0.18s ease; +} + +.review-side-metric-card.editable:hover, +.review-side-metric-card.editing { + border-color: rgba(16, 185, 129, 0.34); + background: rgba(248, 252, 250, 0.92); + transform: translateY(-1px); +} + +.review-side-metric-icon { + width: 32px; + height: 32px; + display: grid; + place-items: center; + border-radius: 10px; + background: rgba(240, 253, 244, 0.95); + color: #059669; + font-size: 15px; +} + +.review-side-metric-copy { + display: grid; + gap: 4px; +} + +.review-side-metric-copy small { + color: #64748b; + font-size: 11px; + font-weight: 800; +} + +.review-side-metric-copy strong { + color: #0f172a; + font-size: 13px; + font-weight: 850; + line-height: 1.35; +} + +.review-inline-input { + width: 100%; + min-height: 34px; + padding: 0 10px; + border: 1px solid rgba(16, 185, 129, 0.2); + border-radius: 10px; + background: rgba(255, 255, 255, 0.96); + color: #0f172a; + font-size: 12px; + font-weight: 700; +} + +.review-inline-input:focus { + outline: none; + border-color: rgba(16, 185, 129, 0.42); + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.08); +} + +.review-inline-select-list { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.review-inline-select-option { + min-height: 28px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 10px; + border-radius: 999px; + border: 1px solid rgba(203, 213, 225, 0.92); + background: rgba(255, 255, 255, 0.96); + color: #475569; + font-size: 11px; + font-weight: 700; +} + +.review-inline-select-option.active { + border-color: rgba(16, 185, 129, 0.36); + background: rgba(240, 253, 244, 0.94); + color: #047857; +} + +.review-side-edit-hint { + position: absolute; + top: 8px; + right: 8px; + min-height: 20px; + display: inline-flex; + align-items: center; + padding: 0 6px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.92); + border: 1px solid rgba(226, 232, 240, 0.92); + color: #94a3b8; + font-size: 10px; + font-weight: 800; + opacity: 0; + transition: opacity 0.18s ease; +} + +.review-side-edit-hint.upload { + color: #059669; +} + +.review-side-metric-card:hover .review-side-edit-hint, +.review-side-metric-card.editing .review-side-edit-hint { + opacity: 1; +} + +.review-side-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.review-side-head strong { + color: #0f172a; + font-size: 14px; + font-weight: 900; +} + +.review-side-confidence { + color: #10b981; + font-size: 12px; + font-weight: 900; +} + +.review-side-category-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; +} + +.review-side-category-card { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 12px; + border-radius: 14px; + border: 1px solid rgba(226, 232, 240, 0.94); + background: rgba(255, 255, 255, 0.68); + cursor: pointer; + transition: border-color 0.18s ease, background 0.18s ease; +} + +.review-side-category-card.active { + border-color: rgba(52, 211, 153, 0.62); + background: rgba(240, 253, 244, 0.9); + box-shadow: inset 0 0 0 1px rgba(16, 185, 129, 0.08); +} + +.review-side-category-copy { + display: grid; + gap: 4px; +} + +.review-side-category-copy strong { + color: #0f172a; + font-size: 13px; + font-weight: 850; +} + +.review-side-category-copy p { + margin: 0; + color: #64748b; + font-size: 11px; + line-height: 1.4; +} + +.review-side-group-check { + color: #10b981; + font-size: 18px; +} + +.review-other-category-popover { + display: flex; + flex-wrap: wrap; + gap: 8px; + padding-top: 2px; +} + +.review-other-category-option { + min-height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 12px; + border-radius: 999px; + border: 1px solid rgba(203, 213, 225, 0.92); + background: rgba(255, 255, 255, 0.94); + color: #475569; + font-size: 11px; + font-weight: 750; +} + +.review-other-category-option.active { + border-color: rgba(16, 185, 129, 0.36); + background: rgba(240, 253, 244, 0.94); + color: #047857; +} + +.review-side-risk-card { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.84) 0%, rgba(255, 249, 238, 0.8) 100%); +} + +.review-side-risk-score { + color: #f97316; + font-size: 13px; + font-weight: 900; +} + +.review-side-risk-summary { + margin: 0; + color: #334155; + font-size: 12px; + line-height: 1.6; +} + +.review-side-risk-list { + display: grid; + gap: 8px; + margin: 0; + padding-left: 16px; + color: #475569; + font-size: 12px; + line-height: 1.6; +} + +.review-side-link { + width: fit-content; + display: inline-flex; + align-items: center; + gap: 4px; + padding: 0; + border: 0; + background: transparent; + color: #059669; + font-size: 12px; + font-weight: 850; +} + +.review-side-link:disabled { + opacity: 0.5; +} + +.review-side-save-pill { + position: sticky; + bottom: 0; + justify-self: end; + min-height: 36px; + display: inline-flex; + align-items: center; + gap: 6px; + padding: 0 14px; + border: 1px solid rgba(16, 185, 129, 0.22); + border-radius: 999px; + background: rgba(255, 255, 255, 0.94); + color: #059669; + font-size: 12px; + font-weight: 850; + box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08); +} + +.review-side-save-pill:disabled { + opacity: 0.5; + box-shadow: none; } .insight-card { padding: 16px; border: 1px solid #e7eef6; border-radius: 20px; - background: #fff; + background: rgba(255, 255, 255, 0.95); + box-shadow: 0 14px 24px rgba(241, 245, 249, 0.86); } .insight-card.primary { @@ -770,17 +1199,329 @@ display: block; } +.review-message-block { + margin-top: 12px; +} + +.review-card-shell { + display: grid; + gap: 12px; + padding: 15px; + border-radius: 20px; + border: 1px solid rgba(16, 185, 129, 0.14); + background: + radial-gradient(circle at top right, rgba(34, 197, 94, 0.08), transparent 28%), + linear-gradient(180deg, #fbfffd 0%, #f6fbf9 100%); + box-shadow: 0 8px 20px rgba(226, 232, 240, 0.28); +} + +.review-flow-card { + display: grid; + gap: 10px; + padding-top: 2px; + border-top: 1px solid rgba(226, 232, 240, 0.72); +} + +.review-card-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.review-card-head-main { + min-width: 0; + display: flex; + align-items: flex-start; + gap: 10px; +} + +.review-card-icon { + width: 32px; + height: 32px; + display: grid; + place-items: center; + border-radius: 10px; + background: linear-gradient(135deg, #22c55e, #10b981); + color: #fff; + font-size: 16px; + box-shadow: 0 8px 16px rgba(16, 185, 129, 0.16); +} + +.review-card-head-copy { + display: grid; + gap: 4px; +} + +.review-card-head-copy strong { + color: #0f172a; + font-size: 14px; + font-weight: 900; + line-height: 1.35; +} + +.review-card-head-copy p { + margin: 0; + color: #64748b; + font-size: 11px; + line-height: 1.55; +} + +.review-card-state { + min-height: 26px; + display: inline-flex; + align-items: center; + padding: 0 10px; + border-radius: 999px; + font-size: 11px; + font-weight: 850; + white-space: nowrap; +} + +.review-card-state.ready { + background: rgba(240, 253, 244, 0.95); + color: #059669; + border: 1px solid rgba(16, 185, 129, 0.14); +} + +.review-card-state.pending { + background: rgba(255, 251, 235, 0.95); + color: #b45309; + border: 1px solid rgba(245, 158, 11, 0.16); +} + +.review-section-card { + display: grid; + gap: 10px; + padding: 12px 14px; + border-radius: 16px; + border: 1px solid rgba(226, 232, 240, 0.92); + background: rgba(255, 255, 255, 0.76); +} + +.review-section-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.review-section-head strong { + color: #0f172a; + font-size: 12px; + font-weight: 900; +} + +.review-section-head span { + min-height: 22px; + display: inline-flex; + align-items: center; + padding: 0 8px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.92); + border: 1px solid #e2e8f0; + color: #475569; + font-size: 10px; + font-weight: 800; +} + +.review-alert-card { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.82) 0%, rgba(251, 248, 243, 0.82) 100%); +} + +.review-alert-chip-row { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.review-alert-chip-row.subtle { + gap: 6px; +} + +.review-alert-chip { + min-height: 28px; + display: inline-flex; + align-items: center; + gap: 6px; + padding: 0 10px; + border-radius: 10px; + font-size: 11px; + font-weight: 800; + border: 1px solid transparent; +} + +.review-alert-chip.warning { + background: rgba(255, 247, 237, 0.94); + border-color: #fdba74; + color: #c2410c; +} + +.review-alert-chip.danger { + background: rgba(255, 241, 242, 0.96); + border-color: #fda4af; + color: #e11d48; +} + +.review-alert-chip.success { + background: rgba(240, 253, 244, 0.96); + border-color: #86efac; + color: #047857; +} + +.review-pending-list { + display: grid; + gap: 8px; +} + +.review-pending-list.plain { + gap: 0; +} + +.review-pending-item { + display: grid; + grid-template-columns: 36px minmax(0, 1fr) auto; + gap: 10px; + align-items: center; + padding: 11px 12px; + border-radius: 14px; + background: rgba(255, 255, 255, 0.88); + border: 1px solid rgba(226, 232, 240, 0.92); +} + +.review-pending-list.plain .review-pending-item { + padding: 10px 0; + border: 0; + border-radius: 0; + background: transparent; + border-bottom: 1px solid rgba(226, 232, 240, 0.7); +} + +.review-pending-list.plain .review-pending-item:last-child { + border-bottom: 0; + padding-bottom: 0; +} + +.review-pending-list.plain .review-pending-item:first-child { + padding-top: 2px; +} + +.review-pending-icon { + width: 36px; + height: 36px; + display: grid; + place-items: center; + border-radius: 10px; + background: rgba(236, 253, 245, 0.95); + color: #059669; + font-size: 16px; +} + +.review-pending-list.plain .review-pending-icon { + background: rgba(236, 253, 245, 0.62); +} + +.review-pending-copy { + display: grid; + gap: 4px; +} + +.review-pending-copy strong { + color: #0f172a; + font-size: 13px; + font-weight: 850; +} + +.review-pending-copy p { + margin: 0; + color: #64748b; + font-size: 11px; + line-height: 1.5; +} + +.review-pending-status { + min-height: 24px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 10px; + border-radius: 999px; + font-size: 10px; + font-weight: 800; + white-space: nowrap; +} + +.review-pending-status.warning { + background: rgba(255, 241, 242, 0.96); + color: #e11d48; + border: 1px solid #fecdd3; +} + +.review-pending-status.danger { + background: rgba(254, 242, 242, 0.96); + color: #dc2626; + border: 1px solid #fca5a5; +} + +.review-pending-status.ready { + background: rgba(240, 253, 244, 0.96); + color: #059669; + border: 1px solid #86efac; +} + +.review-footer-actions { + display: grid; + gap: 8px; + padding-top: 6px; + border-top: 1px solid rgba(226, 232, 240, 0.72); +} + +.review-footer-btn-row { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.review-footer-btn { + min-height: 36px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 14px; + border-radius: 12px; + border: 1px solid #dbe6f0; + background: rgba(255, 255, 255, 0.92); + color: #334155; + font-size: 12px; + font-weight: 800; + box-shadow: 0 3px 10px rgba(241, 245, 249, 0.58); +} + +.review-footer-btn.primary { + border-color: rgba(16, 185, 129, 0.26); + background: linear-gradient(135deg, #10b981, #059669); + color: #fff; + box-shadow: 0 6px 14px rgba(16, 185, 129, 0.16); +} + +.review-footer-btn:disabled { + cursor: not-allowed; + opacity: 0.6; + box-shadow: none; +} + .review-summary { margin: 0; - color: #334155; - font-size: 13px; + color: #1f2937; + font-size: 14px; line-height: 1.7; } .review-inline-actions { display: flex; flex-wrap: wrap; - gap: 10px; + gap: 8px; + justify-content: flex-start; } .review-inline-btn, @@ -793,7 +1534,7 @@ justify-content: center; padding: 0 16px; border-radius: 999px; - font-size: 13px; + font-size: 12px; font-weight: 800; } @@ -835,11 +1576,159 @@ } .review-inline-note { + margin: 0; color: #64748b; font-size: 12px; line-height: 1.6; } +.review-inline-guidance { + margin: 0; + color: #0f766e; + font-size: 12px; + line-height: 1.7; +} + +.review-status-banner { + display: grid; + gap: 8px; + padding: 14px 16px; + border-radius: 18px; + border: 1px solid #dbeafe; + background: linear-gradient(180deg, #f8fbff 0%, #f0f7ff 100%); +} + +.review-status-banner.ready { + border-color: #bbf7d0; + background: linear-gradient(180deg, #f5fffa 0%, #ecfdf5 100%); +} + +.review-status-banner.pending { + border-color: #fde68a; + background: linear-gradient(180deg, #fffdf7 0%, #fffbeb 100%); +} + +.review-status-tag { + width: fit-content; + min-height: 26px; + display: inline-flex; + align-items: center; + padding: 0 10px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.86); + color: #0f172a; + font-size: 12px; + font-weight: 850; + border: 1px solid rgba(148, 163, 184, 0.22); +} + +.review-inline-section { + display: grid; + gap: 10px; + padding: 14px 16px; + border-radius: 18px; + border: 1px solid #e2e8f0; + background: rgba(255, 255, 255, 0.88); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.66); +} + +.review-inline-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.review-inline-head > strong { + color: #0f172a; + font-size: 12px; + font-weight: 850; +} + +.review-inline-head > span { + min-height: 24px; + display: inline-flex; + align-items: center; + padding: 0 9px; + border-radius: 999px; + background: #fff; + color: #475569; + font-size: 11px; + font-weight: 800; + border: 1px solid #e2e8f0; +} + +.review-inline-caption { + margin: 0; + color: #64748b; + font-size: 12px; + line-height: 1.65; +} + +.review-inline-list { + display: grid; + gap: 8px; +} + +.review-missing-chip-row { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.review-missing-chip { + min-height: 30px; + display: inline-flex; + align-items: center; + padding: 0 12px; + border-radius: 999px; + background: #fff; + color: #0f172a; + font-size: 12px; + font-weight: 800; + border: 1px solid #fed7aa; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.4); +} + +.review-inline-item { + display: grid; + gap: 4px; + padding: 10px 12px; + border-radius: 14px; + border: 1px solid #e2e8f0; + background: #fff; +} + +.review-inline-item.warning { + background: #fff7ed; + border-color: #fed7aa; +} + +.review-inline-item.high { + background: #fff1f2; + border-color: #fecdd3; +} + +.review-inline-item span { + color: #0f172a; + font-size: 12px; + font-weight: 800; +} + +.review-inline-item p { + margin: 0; + color: #64748b; + font-size: 12px; + line-height: 1.65; +} + +.review-inline-footer { + display: grid; + gap: 10px; + padding-top: 2px; + border-top: 1px dashed rgba(203, 213, 225, 0.78); +} + .review-mini-grid, .review-slot-grid, .review-doc-field-grid { @@ -1055,6 +1944,109 @@ line-height: 1.6; } +.insight-text-section { + display: grid; + gap: 12px; + padding: 2px 0 0; +} + +.insight-text-section h4 { + color: #0f172a; + font-size: 15px; + font-weight: 850; +} + +.insight-text-list, +.review-document-plain-list { + display: grid; + gap: 12px; +} + +.recognition-bubble { + display: grid; + gap: 10px; + padding: 16px 18px; + border-radius: 22px; + border: 1px solid rgba(191, 219, 254, 0.9); + background: linear-gradient(180deg, #ffffff 0%, #f5fbff 100%); + box-shadow: 0 16px 28px rgba(241, 245, 249, 0.9); +} + +.recognition-bubble.secondary { + border-color: #e2e8f0; + background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); +} + +.recognition-bubble-label { + color: #0f766e; + font-size: 11px; + font-weight: 850; + letter-spacing: 0.02em; +} + +.recognition-bubble.secondary .recognition-bubble-label { + color: #475569; +} + +.recognition-bubble-copy { + display: grid; + gap: 8px; +} + +.recognition-bubble-line, +.recognition-bubble-note { + margin: 0; + color: #334155; + font-size: 13px; + line-height: 1.75; +} + +.recognition-bubble-line { + font-weight: 700; + color: #0f172a; +} + +.recognition-bubble-note { + color: #64748b; +} + +.review-document-bubble { + display: grid; + grid-template-columns: minmax(0, 1fr) 140px; + gap: 14px; + align-items: start; + padding: 16px; + border-radius: 22px; + background: linear-gradient(180deg, #ffffff 0%, #f7fafc 100%); + border: 1px solid rgba(226, 232, 240, 0.95); + box-shadow: 0 16px 28px rgba(241, 245, 249, 0.92); +} + +.review-document-copy { + display: grid; + gap: 6px; +} + +.review-document-index { + color: #1d4ed8; + font-size: 11px; + font-weight: 850; +} + +.review-document-copy strong { + color: #0f172a; + font-size: 13px; + font-weight: 850; + line-height: 1.6; +} + +.review-document-copy p { + margin: 0; + color: #64748b; + font-size: 12px; + line-height: 1.7; +} + .review-overlay { z-index: 10001; } @@ -1249,7 +2241,55 @@ transform: translateX(18px); } +@media (min-width: 1920px) and (min-height: 980px) { + .assistant-modal { + --assistant-visual-scale: 1.05; + } +} + +@media (min-width: 2560px) and (min-height: 1280px) { + .assistant-modal { + --assistant-visual-scale: 1.12; + } +} + +@media (max-width: 1680px), (max-height: 980px) { + .assistant-modal { + --assistant-visual-scale: 0.94; + } +} + +@media (max-width: 1536px), (max-height: 920px) { + .assistant-modal { + --assistant-visual-scale: 0.88; + } +} + +@media (max-width: 1440px), (max-height: 860px) { + .assistant-modal { + --assistant-visual-scale: 0.82; + } +} + +@media (max-width: 1366px), (max-height: 780px) { + .assistant-modal { + --assistant-visual-scale: 0.76; + } + + .assistant-layout.has-insight { + grid-template-columns: minmax(0, 1.34fr) 348px; + } + + .review-side-grid.compact { + grid-template-columns: 1fr; + } +} + @media (max-width: 1280px) { + .assistant-modal { + --assistant-visual-scale: 0.86; + } + .assistant-layout { grid-template-columns: 1fr; } @@ -1261,8 +2301,15 @@ @media (max-width: 760px) { .assistant-modal { + --assistant-visual-scale: 1; width: 100vw; height: 100vh; + } + + .assistant-modal-stage { + width: 100%; + height: 100%; + transform: none; border-radius: 0; } @@ -1277,6 +2324,11 @@ justify-content: space-between; } + .source-pill { + min-height: 40px; + padding: 0 14px; + } + .assistant-layout { padding: 14px; } @@ -1316,16 +2368,47 @@ align-items: flex-end; } + .review-card-head { + flex-direction: column; + } + .metric-grid { grid-template-columns: 1fr; } + .review-side-grid, + .review-side-category-grid { + grid-template-columns: 1fr; + } + + .review-pending-item { + grid-template-columns: 42px minmax(0, 1fr); + } + + .review-pending-status { + grid-column: 2; + justify-self: start; + } + + .review-footer-btn-row { + flex-direction: column; + } + + .review-footer-btn { + width: 100%; + } + .review-slot-grid, .review-doc-field-grid, .review-mini-grid { grid-template-columns: 1fr; } + .review-document-plain, + .review-document-bubble { + grid-template-columns: 1fr; + } + .review-edit-modal { width: calc(100vw - 24px); }