.pron-container { display: flex; padding: 2vw; font-family: Raleway, Roboto, Helvetica Neue, sans-serif; border: 10px solid #009688; height: 100%; border-radius: 1vw; flex-direction: column; } /* Keep the dropdown at the start */ .dropdown-row { display: flex; align-items: center; } /* Accessible helper — hide visually but keep available to screen readers */ .visually-hidden { position: absolute !important; height: 1px; width: 1px; overflow: hidden; clip: rect(1px, 1px, 1px, 1px); white-space: nowrap; border: 0; padding: 0; margin: -1px; } /* Styled select that fits the app button styles */ .select-dropdown { appearance: none; -webkit-appearance: none; -moz-appearance: none; display: inline-block; min-width: 180px; height: 36px; padding: 6px 36px 6px 12px; /* extra right padding for custom arrow */ font-size: 14px; line-height: 1; color: #111827; background-color: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; background-image: linear-gradient(45deg, transparent 50%, #6b7280 50%), linear-gradient(135deg, #6b7280 50%, transparent 50%), linear-gradient(to right, #fff, #fff); background-position: calc(100% - 18px) calc(1em + 2px), calc(100% - 13px) calc(1em + 2px), 100% 0; background-size: 6px 6px, 6px 6px, 2.5em 2.5em; background-repeat: no-repeat; cursor: pointer; } /* Hover / focus states for accessibility */ .select-dropdown:hover { border-color: #9ca3af; } .select-dropdown:focus { outline: none; box-shadow: 0 0 0 3px rgba(59,130,246,0.14); border-color: #3b82f6; } /* Smaller variant if needed */ .select-dropdown.small { min-width: 140px; height: 32px; font-size: 13px; border-radius: 6px; } .header { /*text-align: center;*/ display:flex; gap:13vw; } .title { font-size: 2.5vw; color: #006780; margin-bottom: 1vw; font-weight: 800; font-family: Raleway, Roboto, Helvetica Neue, sans-serif; } .main-content { display: flex; gap: 5vw; } .image-section { display: flex; align-items: center; justify-content: center; width: 20vw; } .apple-image { width: 20vw; height: 20vw; object-fit: contain; filter: drop-shadow(0 25px 25px rgba(0, 0, 0, 0.15)); animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-20px); } } .controls-section { display: flex; flex-direction: column; justify-content: space-evenly; gap: 0.5vw; width: 30vw; } .word-section { text-align: center; display: flex; flex-direction: column; gap: 1vw; } .word { font-size: 3rem; font-weight: bold; color: hsl(222, 47%, 11%); text-transform: capitalize; margin-bottom: 0.5rem; font-family: Raleway, Roboto, Helvetica Neue, sans-serif; } .phonetics { font-size: 1.5vw; color: hsl(215, 16%, 47%); font-family: Raleway, Roboto, Helvetica Neue, sans-serif; } .teacher-section { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: hsla(217, 91%, 60%, 0.1); border-radius: 1rem; border: 2px solid hsla(217, 91%, 60%, 0.2); } .student-section { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: hsla(142, 76%, 36%, 0.1); border-radius: 1rem; border: 2px solid hsla(142, 76%, 36%, 0.2); } .avatar { width: 3rem; height: 3rem; border-radius: 9999px; object-fit: cover; } .button-group { display: flex; gap: 0.5rem; flex-wrap: wrap; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.8vw; font-size: 1rem; font-weight: 500; border-radius: 0.5rem; border: none; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; box-shadow: 0 10px 20px -5px rgba(0, 0, 0, 0.2); width: 11vw; } .btn:hover { transform: scale(1.05); } .btn:active { transform: scale(0.95); } .btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } .btn-primary { background: hsl(217, 91%, 60%); color: white; } .btn-secondary { background: hsl(142, 76%, 36%); color: white; } .btn-accent { background: hsl(280, 100%, 70%); color: white; } .btn-success { background: hsl(142, 76%, 36%); color: white; } .btn-outline { background: transparent; border: 2px solid hsl(214, 32%, 91%); color: hsl(222, 47%, 11%); } .full-width { width: 100%; } .icon { width: 1.25rem; height: 1.25rem; } .spinner { width: 1.25rem; height: 1.25rem; animation: spin 1s linear infinite; } .spinner-circle { fill: none; stroke: currentColor; stroke-width: 3; stroke-dasharray: 50; stroke-dashoffset: 25; } @keyframes spin { to { transform: rotate(360deg); } } .hidden { display: none !important; } .results-section { width: 30vw; height: 30vw; display: flex; flex-direction: column; align-items: center; justify-content: space-between; } .gauge-wrapper { position: relative; width: 20vw; height: 10vw; } .gauge { position: absolute; left: 50%; top: 0; transform: translateX(-50%); width: 100%; height: 100%; border-radius: 260px 260px 0 0; overflow: hidden; background: #f3f3f3; box-shadow: 0 4px 10px rgba(0,0,0,0.25) inset; } .gauge-arc { position: absolute; inset: 0; border-radius: 50%; background: conic-gradient( from 270deg, #e53935 0deg 45deg, #fb8c00 45deg 90deg, #fbc02d 90deg 135deg, #43a047 135deg 180deg, transparent 180deg 360deg ); height: 20vw; } .needle { position: absolute; bottom: 0vw; left: 50%; width: 0.7vw; height: 8vw; background: #333; transform: translateX(-50%) rotate(var(--angle, -90deg)); transform-origin: 50% 100%; transition: transform 700ms cubic-bezier(.2,.9,.2,1); border-radius: 10px; box-shadow: 0 2px 6px rgba(0,0,0,0.5); } .mic-badge { position: absolute; bottom: -0.3vw; left: 50%; transform: translate(-50%, 35%); width: 3vw; height: 3vw; border-radius: 50%; background: #000; box-shadow: 0 8px 18px rgba(0,0,0,0.4); display: flex; align-items: center; justify-content: center; } .score-span { color: white; font-size: 1vw; font-weight: bold; } .nav-buttons { position: absolute; right: 2rem; bottom: 2rem; display: flex; align-items: center; gap: 0.75rem; z-index: 30; } .btn-nav { padding: 0.5rem 0.75rem; font-size: 1vw; white-space: nowrap; background: #009688; width: 7vw; height: 2.5vw; font-weight: bold; color: white; } .nav-info { font-weight: 600; color: hsl(222, 47%, 11%); min-width: 4.5rem; text-align: center; font-size: 1vw; } .suggestions-section { background-color: azure; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.06); padding: 1vw; } .suggestions-title { font-size: 1.25rem; font-weight: 600; color: hsl(222, 47%, 11%); margin-bottom: 1rem; font-family: Raleway, Roboto, Helvetica Neue, sans-serif; } .suggestions-page { display: flex; gap: 1vw; flex-direction: column; } .suggestion-card { display: flex; gap: 1rem; align-items: flex-start; background: #fff; border-radius: 12px; padding: 1rem 1.25rem; box-shadow: 0 6px 18px rgba(10, 30, 60, 0.06); border: 1px solid rgba(0,0,0,0.04); transition: transform .15s ease, box-shadow .15s ease; } .suggestion-card:hover { transform: translateY(-4px); box-shadow: 0 10px 30px rgba(10, 30, 60, 0.08); } .suggestion-badge { min-width: 36px; height: 36px; border-radius: 999px; background: linear-gradient(180deg, #eaf3ff, #dbeeff); color: #0b57a4; display: flex; align-items: center; justify-content: center; font-weight: 700; box-shadow: 0 4px 10px rgba(11,87,164,0.08); flex-shrink: 0; font-size: 0.95rem; } .suggestion-body { flex: 1; } .suggestion-point { font-size: 1rem; font-weight: 700; color: hsl(222, 47%, 11%); margin-bottom: 0.25rem; } .suggestion-feedback { color: hsl(215, 16%, 47%); font-size: 0.95rem; line-height: 1.45; } .suggestion-nav { display: flex; align-items: center; justify-content: center; padding:1vw; } /* Existing .voice-selection-container */ .voice-selection-container { display: flex; align-items: center; justify-content: flex-start; /* Aligns to the left/start of the section */ gap: 12px; /* Add margin/padding to separate it visually */ margin: 0.5rem 0; } /* NEW: Segmented Control Wrapper Style */ .voice-toggle-control { display: flex; align-items: center; /* Pill shape for the entire control */ border-radius: 9999px; /* Soft border to define the area */ border: 2px solid #009688; /* Use a color that stands out from the teacher-section bg */ background-color: #f0f8ff; /* Light background */ padding: 4px; /* Padding inside the control */ } /* Label Group Styles */ .voice-label-group { /* Make segments clickable and give them an initial look */ padding: 0.5rem 1rem; font-size: 0.95rem; /* Slightly smaller for compactness */ color: #006780; font-weight: 500; cursor: pointer; transition: all 0.3s ease; white-space: nowrap; user-select: none; min-width: 6vw; /* Ensure minimum width for visibility */ text-align: center; } .voice-text { /* Ensure the span font properties are appealing */ font-weight: 600; /* Bolder text for visibility */ font-size: 0.9vw; /* Adjusted to fit the new design */ } /* Active Segment Style (Unique UI) */ .voice-label-group.active { /* Highlight the active selection */ background-color: #006780; /* Strong, contrasting background */ color: white; /* White text on active background */ font-weight: 700; box-shadow: 0 4px 10px rgba(0, 103, 128, 0.3); /* Subtle lift */ } /* Specific border-radius for segments */ .toggle-label-left { border-radius: 9999px 0 0 9999px; /* Rounded on the left */ } .toggle-label-right { border-radius: 0 9999px 9999px 0; /* Rounded on the right */ } /* Angular Material Toggle Styles for Integration */ /* Target the slide toggle container */ .voice-toggle-slider { /* Hide the toggle itself but keep its functionality space (optional) */ height: 24px; width: 4px; /* Acts as a vertical separator */ background-color: transparent; /* Ensure no residual background */ opacity: 1; /* Keep visible for debugging if needed, but its children are hidden */ margin: 0 -2px; /* Maintain small gap/separator illusion */ position: relative; overflow: hidden; /* Crucial to clip any remaining visual elements */ } /* IMPORTANT: Aggressive Hiding for all internal Material elements */ .voice-toggle-slider .mdc-switch__track, .voice-toggle-slider .mdc-switch__icons, .voice-toggle-slider .mdc-switch__thumb-handle, .voice-toggle-slider .mat-mdc-slide-toggle-ripple, .voice-toggle-slider .mat-mdc-slide-toggle-focus-ring, .voice-toggle-slider .mdc-switch__handle { /* Set width/height to zero and hide completely */ width: 0 !important; height: 0 !important; padding: 0 !important; margin: 0 !important; opacity: 0 !important; visibility: hidden !important; /* Critical to ensure hiding */ display: none !important; /* The most aggressive hide */ } /* Optional: If you want a visual separator line, add it here */ .voice-toggle-slider::before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 80%; /* Height of the separator */ background-color: rgba(0, 150, 136, 0.4); /* Divider color (lighter than the border) */ border-radius: 1px; } /* Adjust the original span's font-size to be slightly bigger since the toggle is now prominent */ span { font-weight: bold; font-size: 1vw; /* Increased from 0.8vw for better legibility */ } /* Override existing label group for the new look */ .voice-label-group { /* Resetting previous style from your original CSS for segments */ font-size: 1rem; /* Use a fixed size instead of 'vw' for consistency in labels */ color: #006780; transition: all 0.3s; font-weight: 500; line-height: 1; /* Ensure text fits */ display: flex; align-items: center; justify-content: center; } .record-btn { display: inline-flex; align-items: center; gap: 8px; } .record-btn.recording { background-color: #e53935; border-color: #d32f2f; color: #ffffff; box-shadow: 0 2px 6px rgba(229, 57, 53, 0.24); } .record-btn.recording .icon, .record-btn.recording .stop-icon { color: #fff; fill: #fff; stroke: none; } .stop-icon { width: 18px; height: 18px; display: inline-block; vertical-align: middle; } .user-guide-close-icon { position: fixed; top: 3vw; right: 4vw; background: #009688; border: none; width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 2vw; color: black; cursor: pointer; z-index: 2010; box-shadow: 0 2px 8px rgba(93, 145, 195, 0.18); transition: background 0.2s, color 0.2s; } /* Responsive */ @media (max-width: 768px) { .title { font-size: 1.75rem; } .word { font-size: 2rem; } .phonetics { font-size: 1.25rem; } .apple-image { width: 12rem; height: 12rem; } .btn { padding: 0.625rem 1.25rem; font-size: 0.875rem; } } span { font-weight: bold; font-size:0.8vw; }