voice-reach / static /widget.css
curieous's picture
Hotfix Voice Reach Modal warm UI
d9ee7ce verified
Raw
History Blame Contribute Delete
17 kB
:root {
--font-family: "Hanken Grotesk", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--display-family: "Bricolage Grotesque", var(--font-family);
--devanagari-family: "Noto Sans Devanagari", var(--font-family);
--color-background: #fbfaff;
--color-surface: #ffffff;
--color-surface-subtle: #faf8ff;
--color-text: #241f33;
--color-heading: #211c30;
--color-text-muted: #6c6781;
--color-text-soft: #9a93ad;
--color-primary: #6a3bf2;
--color-primary-hover: #5a2fd6;
--color-accent: #15b386;
--color-accent-soft: #e6f7f0;
--color-border: rgba(91, 55, 183, 0.12);
--color-danger: #e0506e;
--color-danger-soft: #fdedf0;
--shadow-soft: 0 24px 64px -34px rgba(76, 40, 130, 0.55), 0 2px 8px -3px rgba(76, 40, 130, 0.1);
--radius-container: 24px;
--radius-control: 14px;
--radius-button: 15px;
}
@keyframes vcw-wave {
0%,
100% {
transform: scaleY(0.28);
}
50% {
transform: scaleY(1);
}
}
@keyframes vcw-spin {
to {
transform: rotate(360deg);
}
}
@keyframes vcw-pulse {
0%,
100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.35;
transform: scale(0.65);
}
}
@keyframes vcw-ring {
0% {
transform: translate(-50%, -50%) scale(0.85);
opacity: 0.5;
}
100% {
transform: translate(-50%, -50%) scale(2);
opacity: 0;
}
}
@keyframes vcw-pop {
0% {
transform: scale(0.6);
opacity: 0;
}
60% {
transform: scale(1.08);
}
100% {
transform: scale(1);
opacity: 1;
}
}
* {
box-sizing: border-box;
}
[hidden] {
display: none !important;
}
html {
background: var(--color-background);
}
body {
margin: 0;
min-height: 100vh;
color: var(--color-text);
background:
radial-gradient(circle at 18% 10%, rgba(32, 199, 167, 0.14), transparent 34%),
linear-gradient(145deg, var(--color-background), #f3efff);
font-family: var(--font-family);
-webkit-font-smoothing: antialiased;
}
button,
textarea {
font: inherit;
}
button {
border: 0;
}
svg {
width: 1em;
height: 1em;
fill: none;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 2;
}
.page-shell {
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: clamp(18px, 5vw, 44px);
}
.voice-widget {
width: min(100%, 384px);
margin: 0 auto;
padding: 20px 20px 15px;
background: var(--color-surface);
border: 1px solid rgba(91, 55, 183, 0.1);
border-radius: var(--radius-container);
box-shadow: var(--shadow-soft);
}
.brand-header {
display: flex;
align-items: center;
gap: 11px;
}
.brand-mark {
width: 38px;
height: 38px;
flex: 0 0 auto;
display: grid;
place-items: center;
color: #fff;
background: var(--color-primary);
border-radius: 12px;
box-shadow: 0 7px 16px -7px rgba(106, 59, 242, 0.85);
font-family: var(--display-family);
font-size: 21px;
font-weight: 700;
line-height: 1;
}
.brand-copy {
min-width: 0;
flex: 1;
display: grid;
gap: 1px;
}
.brand-name {
color: var(--color-text);
font-family: var(--display-family);
font-size: 15px;
font-weight: 600;
}
.voice-pill,
.ledger-pill {
display: inline-flex;
align-items: center;
gap: 5px;
flex: 0 0 auto;
padding: 5px 9px 5px 8px;
border-radius: 999px;
font-size: 11px;
font-weight: 600;
}
.voice-pill {
color: var(--color-primary);
background: #f1ecfe;
}
.voice-pill svg {
width: 12px;
height: 12px;
}
.panel {
margin-top: 18px;
}
.compose-panel h1,
.review-head h2,
.centered-panel h2 {
margin: 0;
color: var(--color-heading);
font-family: var(--display-family);
font-weight: 600;
letter-spacing: 0;
}
.compose-panel h1 {
font-size: 21px;
line-height: 1.18;
}
.compose-panel > p,
.centered-panel p,
.processing-panel > p,
.review-head p,
.helper-copy,
.copy-confirmation {
color: var(--color-text-muted);
font-size: 13px;
line-height: 1.45;
}
.compose-panel > p {
margin: 7px 0 0;
font-size: 13.5px;
line-height: 1.5;
}
.mode-switch {
display: flex;
gap: 4px;
margin-top: 16px;
padding: 4px;
background: #f1ecfe;
border-radius: var(--radius-control);
}
.mode-button {
flex: 1;
min-height: 38px;
color: #857aa3;
background: transparent;
border-radius: 10px;
cursor: pointer;
font-size: 13.5px;
font-weight: 500;
}
.mode-button.is-selected {
color: var(--color-primary-hover);
background: #fff;
box-shadow: 0 2px 6px -2px rgba(76, 40, 130, 0.28);
font-weight: 600;
}
.runtime-block {
margin-top: 13px;
}
.runtime-label {
margin-bottom: 6px;
color: var(--color-text-soft);
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.runtime-switch {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 4px;
padding: 4px;
background: #f7f4ff;
border: 1px solid rgba(91, 55, 183, 0.08);
border-radius: var(--radius-control);
}
.runtime-button {
min-width: 0;
min-height: 46px;
display: grid;
place-items: center;
gap: 2px;
padding: 6px 5px;
color: #857aa3;
background: transparent;
border-radius: 10px;
cursor: pointer;
line-height: 1.08;
}
.runtime-button.is-selected {
color: var(--color-primary-hover);
background: #fff;
box-shadow: 0 2px 6px -2px rgba(76, 40, 130, 0.28);
}
.runtime-button:disabled {
cursor: not-allowed;
opacity: 0.48;
}
.runtime-button .runtime-name,
.runtime-button .runtime-note {
max-width: 100%;
overflow-wrap: anywhere;
text-align: center;
}
.runtime-button .runtime-name {
font-size: 11px;
font-weight: 700;
}
.runtime-button .runtime-note {
color: currentColor;
font-size: 9.5px;
font-weight: 600;
opacity: 0.68;
}
.ready-status,
.processing-title,
.recording-label {
display: flex;
align-items: center;
gap: 8px;
}
.ready-status {
margin-top: 18px;
color: #3b3550;
font-size: 13px;
font-weight: 600;
}
.status-dot {
width: 8px;
height: 8px;
flex: 0 0 auto;
border-radius: 50%;
background: #cfc6e6;
}
.primary-button,
.secondary-button,
.stop-button {
width: 100%;
min-height: 48px;
display: flex;
align-items: center;
justify-content: center;
gap: 9px;
border-radius: var(--radius-button);
cursor: pointer;
font-weight: 600;
}
.primary-button {
color: #fff;
background: var(--color-primary);
box-shadow: 0 14px 28px -13px rgba(106, 59, 242, 0.85);
}
.primary-button:hover:not(:disabled) {
background: var(--color-primary-hover);
}
.primary-button:disabled,
.primary-button.is-disabled {
color: #a79fc0;
background: #ece8f6;
box-shadow: none;
cursor: not-allowed;
}
.primary-button svg {
width: 18px;
height: 18px;
}
.record-button {
margin-top: 10px;
}
.secondary-button {
color: #6c6485;
background: #fff;
border: 1px solid rgba(91, 55, 183, 0.16);
}
.secondary-button:hover {
background: var(--color-surface-subtle);
border-color: rgba(91, 55, 183, 0.28);
}
.helper-copy {
margin: 11px 0 2px;
text-align: center;
font-size: 12px;
color: var(--color-text-soft);
}
.disabled-reason {
margin: 9px 0 0;
padding: 10px 11px;
color: #7a5484;
background: #fff6fa;
border: 1px solid rgba(224, 80, 110, 0.16);
border-radius: 12px;
font-size: 12px;
line-height: 1.4;
}
.centered-panel {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.spinner-orb,
.recording-orb {
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.spinner-orb {
width: 88px;
height: 88px;
}
.spinner-orb > span {
position: absolute;
width: 84px;
height: 84px;
border: 2.5px solid rgba(106, 59, 242, 0.18);
border-top-color: var(--color-primary);
border-radius: 50%;
animation: vcw-spin 0.9s linear infinite;
}
.spinner-orb > div {
width: 60px;
height: 60px;
display: grid;
place-items: center;
color: #8b7bd8;
background: #f1ecfe;
border-radius: 50%;
}
.spinner-orb svg {
width: 24px;
height: 24px;
}
.centered-panel h2 {
margin-top: 16px;
font-size: 19px;
line-height: 1.25;
}
.success-panel h2 {
font-size: 22px;
}
.centered-panel p {
max-width: 260px;
margin: 6px 0 0;
}
.centered-panel .primary-button,
.centered-panel .secondary-button,
.centered-panel .stop-button {
margin-top: 18px;
}
.recording-orb {
width: 100px;
height: 100px;
}
.recording-orb > span {
position: absolute;
left: 50%;
top: 50%;
width: 64px;
height: 64px;
border: 2px solid rgba(224, 80, 110, 0.45);
border-radius: 50%;
animation: vcw-ring 2.2s ease-out infinite;
}
.recording-orb > span:nth-child(2) {
animation-delay: 1.1s;
}
.recording-orb > div {
position: relative;
z-index: 1;
width: 64px;
height: 64px;
display: grid;
place-items: center;
color: var(--color-danger);
background: var(--color-danger-soft);
border-radius: 50%;
box-shadow: 0 10px 22px -10px rgba(224, 80, 110, 0.55);
}
.recording-orb svg {
width: 26px;
height: 26px;
}
.recording-label {
margin-top: 14px;
color: var(--color-text);
font-size: 15px;
}
.recording-label span {
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--color-danger);
animation: vcw-pulse 1.1s ease-in-out infinite;
}
.waveform {
width: 100%;
max-width: 250px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
gap: 3px;
margin-top: 14px;
}
.waveform span {
display: block;
width: 4px;
height: 30px;
border-radius: 4px;
background: #a98ef5;
transform-origin: center;
animation: vcw-wave 0.95s ease-in-out infinite;
}
.waveform span:nth-child(3n) {
background: var(--color-primary);
}
.stop-button {
color: #fff;
background: #2a2440;
}
.stop-button:hover {
background: #211c33;
}
.stop-button > span {
width: 11px;
height: 11px;
border-radius: 3px;
background: var(--color-danger);
}
.processing-panel {
margin-top: 20px;
}
.processing-title {
gap: 10px;
color: var(--color-text);
font-size: 15px;
}
.processing-title > span,
.primary-button.is-busy > span {
width: 20px;
height: 20px;
flex: 0 0 auto;
border: 2.5px solid rgba(106, 59, 242, 0.2);
border-top-color: var(--color-primary);
border-radius: 50%;
animation: vcw-spin 0.8s linear infinite;
}
.processing-panel > p {
margin: 7px 0 0 30px;
}
.progress-list {
display: flex;
flex-direction: column;
gap: 11px;
margin: 18px 0 0;
padding: 15px 14px;
list-style: none;
background: var(--color-surface-subtle);
border: 1px solid rgba(91, 55, 183, 0.07);
border-radius: var(--radius-control);
}
.progress-list li {
display: flex;
align-items: center;
gap: 11px;
color: #a79fbb;
font-size: 13.5px;
font-weight: 500;
}
.progress-list li::before {
content: "";
width: 22px;
height: 22px;
flex: 0 0 auto;
border: 2px solid #e3ddf0;
border-radius: 50%;
box-sizing: border-box;
background: radial-gradient(circle, #d2cae3 0 3px, transparent 4px);
}
.progress-list li.is-active {
color: var(--color-text);
}
.progress-list li.is-active::before {
border: 2.5px solid rgba(106, 59, 242, 0.22);
border-top-color: var(--color-primary);
background: transparent;
animation: vcw-spin 0.8s linear infinite;
}
.progress-list li.is-done {
color: #7a7488;
}
.progress-list li.is-done::before {
border-color: transparent;
background: var(--color-accent-soft);
}
.progress-list li.is-done::after {
content: "";
position: absolute;
}
.review-head h2 {
font-size: 19px;
line-height: 1.2;
}
.review-head p {
margin: 6px 0 0;
}
.inline-error {
display: flex;
gap: 10px;
padding: 12px;
background: #fdf1f3;
border: 1px solid rgba(224, 80, 110, 0.18);
border-radius: 13px;
}
.inline-error svg {
width: 17px;
height: 17px;
flex: 0 0 auto;
margin-top: 1px;
color: #d24b6a;
stroke-width: 2.2;
}
.inline-error strong,
.inline-error small {
display: block;
}
.inline-error strong {
color: var(--color-text);
font-size: 13.5px;
line-height: 1.3;
}
.inline-error small {
margin-top: 2px;
color: #7a7488;
font-size: 12.5px;
line-height: 1.4;
}
.textarea-label {
display: flex;
align-items: center;
justify-content: space-between;
margin: 15px 0 6px;
gap: 12px;
}
.textarea-label span {
color: var(--color-text-soft);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.textarea-label small {
color: #b3abc7;
font-size: 11px;
}
textarea {
width: 100%;
resize: none;
padding: 13px 14px;
color: #2c2740;
background: #f7f5ff;
border: 1px solid rgba(91, 55, 183, 0.14);
border-radius: var(--radius-control);
outline: none;
font-size: 14px;
line-height: 1.55;
}
textarea:focus {
background: #fff;
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(106, 59, 242, 0.12);
}
.text-button {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 24px;
margin-top: 11px;
padding: 2px 0;
color: #7c6fb0;
background: none;
cursor: pointer;
font-size: 12.5px;
font-weight: 600;
}
.text-button svg {
width: 14px;
height: 14px;
stroke-width: 2.4;
transition: transform 0.2s;
}
.text-button[aria-expanded="true"] svg {
transform: rotate(180deg);
}
.text-button.compact {
margin: 0;
font-size: 11.5px;
}
.transcript-box {
margin-top: 10px;
padding: 13px 14px;
background: var(--color-surface-subtle);
border: 1px solid rgba(91, 55, 183, 0.08);
border-radius: 13px;
}
.transcript-box.is-open {
position: relative;
margin-top: 14px;
}
.transcript-pill {
display: inline-block;
margin-bottom: 8px;
padding: 3px 8px;
color: #9a8fc4;
background: #f1ecfe;
border-radius: 999px;
font-size: 10.5px;
font-weight: 600;
letter-spacing: 0.03em;
text-transform: uppercase;
}
.transcript-box p {
margin: 0;
color: #5f5874;
font-size: 13px;
line-height: 1.6;
}
.transcript-box[data-mode="hindi"] p {
font-family: var(--devanagari-family);
}
.action-stack {
display: flex;
flex-direction: column;
gap: 9px;
margin-top: 16px;
}
.split-actions {
display: flex;
gap: 9px;
margin-top: 16px;
}
.split-actions .primary-button,
.split-actions .secondary-button {
min-width: 0;
flex: 1;
font-size: 14px;
}
.primary-button.is-busy {
background: #8a68f0;
cursor: wait;
}
.primary-button.is-busy > span {
width: 17px;
height: 17px;
border-color: rgba(255, 255, 255, 0.4);
border-top-color: #fff;
}
.copy-confirmation {
margin: 10px 0 0;
color: var(--color-accent);
text-align: center;
font-size: 12px;
font-weight: 600;
}
.success-mark,
.error-mark {
width: 64px;
height: 64px;
display: grid;
place-items: center;
border-radius: 50%;
}
.success-mark {
color: var(--color-accent);
background: var(--color-accent-soft);
box-shadow: 0 12px 26px -12px rgba(21, 179, 134, 0.5);
animation: vcw-pop 0.45s ease-out;
}
.success-mark svg {
width: 30px;
height: 30px;
stroke-width: 2.6;
}
.ledger-pill {
margin-top: 14px;
color: #0c7d5d;
background: var(--color-accent-soft);
}
.ledger-pill span {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--color-accent);
}
.error-mark {
color: var(--color-danger);
background: var(--color-danger-soft);
}
.error-mark svg {
width: 26px;
height: 26px;
}
.draft-error-panel .transcript-box {
display: grid;
grid-template-columns: 1fr auto;
align-items: start;
gap: 0 10px;
}
.draft-error-panel .transcript-box p {
grid-column: 1 / -1;
}
.debug-details {
margin-top: 16px;
padding-top: 11px;
border-top: 1px solid rgba(91, 55, 183, 0.08);
}
.debug-details summary {
display: flex;
align-items: center;
justify-content: space-between;
color: #a79fbb;
cursor: pointer;
font-size: 10.5px;
font-weight: 600;
letter-spacing: 0.05em;
list-style: none;
text-transform: uppercase;
}
.debug-details summary::-webkit-details-marker {
display: none;
}
.debug-grid {
display: grid;
gap: 6px;
margin: 10px 0 0;
padding: 12px;
background: var(--color-background);
border: 1px solid rgba(91, 55, 183, 0.07);
border-radius: 11px;
}
.debug-grid div {
display: flex;
justify-content: space-between;
gap: 14px;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 10.5px;
line-height: 1.4;
}
.debug-grid dt {
flex: 0 0 auto;
color: #a79fbb;
}
.debug-grid dd {
margin: 0;
color: #5f5874;
text-align: right;
word-break: break-word;
}
.debug-actions {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.debug-actions button {
min-height: 28px;
padding: 4px 8px;
color: #7c6fb0;
background: #f1ecfe;
border-radius: 999px;
cursor: pointer;
font-size: 11px;
font-weight: 600;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.001ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
}
}