SLT-space / style.css
plice13's picture
Upload 10 files
34ca708 verified
Raw History Blame Contribute Delete
29 kB
/* ==============================================================================
1. DESIGN TOKENS (CSS VARIABLES)
============================================================================== */
:root {
--bg-page: #221f1f;
--bg-card: #2d2929;
--bg-surface: #1e1b1b;
--bg-surface-hover: #242020;
--bg-button: #383333;
--bg-button-hover: #443e3e;
--gold: #dba70e;
--gold-hover: #e8b625;
--gold-border: rgba(219, 167, 14, 0.4);
--gold-border-subtle: rgba(219, 167, 14, 0.25);
--gold-glow: rgba(219, 167, 14, 0.3);
--text-primary: #ffffff;
--text-body: #f5f5f5;
--text-muted: #cfc8c8;
}
/* ==============================================================================
2. GLOBAL LAYOUT & BASE STYLES
============================================================================== */
html {
background-color: var(--bg-page) !important;
color: var(--text-body) !important;
min-height: 100vh !important;
overflow-y: scroll !important; /* Always displays the vertical scrollbar on the right */
scrollbar-gutter: stable;
scrollbar-width: thin !important;
scrollbar-color: #554e4e #1a1717 !important;
}
body {
background-color: var(--bg-page) !important;
color: var(--text-body) !important;
min-height: 100vh !important;
margin: 0 !important;
padding: 0 !important;
overflow-x: hidden !important;
}
gradio-app {
background-color: var(--bg-page) !important;
color: var(--text-body) !important;
min-height: 100vh !important;
}
/* Custom Visible Scrollbar for Webkit/Blink (Chrome, Edge, Safari, Opera, Brave) */
::-webkit-scrollbar {
width: 12px !important;
height: 12px !important;
}
::-webkit-scrollbar-track {
background: #1a1717 !important;
border-left: 1px solid rgba(219, 167, 14, 0.25) !important;
}
::-webkit-scrollbar-thumb {
background: #443e3e !important;
border-radius: 6px !important;
border: 2px solid #1a1717 !important;
}
::-webkit-scrollbar-thumb:hover {
background: var(--gold) !important;
}
#main-layout {
max-width: 820px !important;
margin: 12px auto 24px auto !important;
gap: 12px !important;
}
h1 {
text-align: center;
color: var(--gold) !important;
font-weight: 800 !important;
letter-spacing: 0.5px;
font-size: clamp(22px, 3vh, 30px) !important;
margin: 6px 0 2px 0 !important;
white-space: nowrap !important;
}
h2 {
text-align: center;
color: var(--text-body) !important;
font-weight: 400 !important;
font-size: 13.5px !important;
opacity: 0.85;
margin: 0 !important;
}
/* ==============================================================================
3. MODULAR UI CARDS & HEADER CONTROLS
============================================================================== */
.ui-card {
background-color: var(--bg-card) !important;
border: 1px solid var(--gold-border) !important;
border-radius: 10px !important;
padding: 16px 20px !important;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45) !important;
}
h3, .card-title {
color: var(--gold) !important;
font-size: 16px !important;
font-weight: 700 !important;
letter-spacing: 0.8px !important;
margin: 0 !important;
}
.card-header-row {
display: flex !important;
flex-direction: row !important;
flex-wrap: nowrap !important;
justify-content: space-between !important;
align-items: center !important;
width: 100% !important;
margin-bottom: 12px !important;
}
.record-btn-col {
flex: 0 0 auto !important;
width: auto !important;
min-width: 0 !important;
margin: 0 0 0 auto !important;
display: flex !important;
align-items: center !important;
justify-content: flex-end !important;
}
.record-yourself-btn {
background: var(--bg-button) !important;
border: 1px solid var(--gold-border) !important;
color: var(--text-body) !important;
font-size: 12.5px !important;
font-weight: 700 !important;
letter-spacing: 0.6px !important;
border-radius: 6px !important;
height: 32px !important;
padding: 0 14px !important;
white-space: nowrap !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
width: auto !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35) !important;
}
.record-yourself-btn:hover {
background: var(--bg-button-hover) !important;
border-color: var(--gold) !important;
color: var(--text-primary) !important;
transform: translateY(-1px) !important;
box-shadow: 0 4px 12px var(--gold-glow) !important;
}
/* ==============================================================================
4. PRIMARY ACTION BUTTONS
============================================================================== */
.translate-btn, .modal-done-btn, button.primary {
background: linear-gradient(135deg, var(--gold) 0%, #be9007 100%) !important;
color: #221f1f !important;
font-weight: 800 !important;
font-size: 18px !important;
letter-spacing: 0.5px !important;
border: none !important;
border-radius: 8px !important;
height: 48px !important;
width: 100% !important;
box-shadow: 0 3px 12px var(--gold-glow) !important;
transition: all 0.2s ease !important;
margin: 6px 0 !important;
cursor: pointer !important;
}
.translate-btn:hover, .modal-done-btn:hover, button.primary:hover {
background: linear-gradient(135deg, var(--gold-hover) 0%, var(--gold) 100%) !important;
transform: translateY(-1px) !important;
box-shadow: 0 5px 18px rgba(219, 167, 14, 0.45) !important;
}
/* ==============================================================================
5. EXAMPLES SECTION
============================================================================== */
.examples-row {
margin-top: 0;
}
.examples-row-second {
margin-top: 14px !important;
}
.examples-row,
.examples-row *,
.examples-row video,
.examples-row .wrap,
.examples-row .mirror-wrap,
.examples-row .mirror {
transform: none !important;
}
.examples-row > div {
min-width: 0 !important;
gap: 6px !important;
}
.example-title {
color: var(--gold) !important;
font-size: 18px !important;
font-weight: 700 !important;
text-align: center !important;
margin: 0 0 0 0 !important;
text-transform: uppercase !important;
letter-spacing: 1px !important;
text-shadow: 0 0 2px var(--gold) !important;
}
.examples-row .gradio-html,
.examples-row .html-container {
min-height: auto !important;
padding: 0 !important;
margin: 0 !important;
}
.example-btn {
background: var(--bg-button) !important;
color: var(--text-body) !important;
border: 1px solid rgba(219, 167, 14, 0.35) !important;
border-radius: 6px !important;
font-weight: 600 !important;
font-size: 13px !important;
margin-top: 8px !important;
padding: 7px 10px !important;
width: 100% !important;
transition: all 0.2s ease !important;
cursor: pointer !important;
}
.example-btn:hover {
background: var(--gold) !important;
color: #221f1f !important;
border-color: var(--gold) !important;
transform: translateY(-1px) !important;
}
/* ==============================================================================
6. TRANSLATION GRADIO OVERRIDES
============================================================================== */
#translation-card .block,
#translation-card .gradio-html,
#translation-card .html-container,
#translation-display {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
}
#translation-card .wrap,
#translation-card [data-testid="loading-status"],
#translation-card .eta-bar,
#translation-card .progress-level {
display: none !important;
}
/* Dedicated Gray Container for Translation */
.translation-content-box {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
min-height: 90px !important;
padding: 16px 20px !important;
background: radial-gradient(circle at center, #353030 0%, #242020 100%) !important;
border-radius: 8px !important;
border: 1px solid var(--gold-border-subtle) !important;
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4) !important;
width: 100% !important;
box-sizing: border-box !important;
}
/* Clean White Centered Translation Text */
.translation-text {
color: var(--text-primary) !important;
font-size: clamp(24px, 3.5vh, 32px) !important;
font-weight: 800 !important;
letter-spacing: 1.5px !important;
text-transform: uppercase !important;
text-align: center !important;
line-height: 1.2 !important;
margin: 0 !important;
width: 100% !important;
}
/* Loading Spinner Container & Keyframes */
.loading-container {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
padding: 8px 0 !important;
}
.pulse-spinner {
width: 32px !important;
height: 32px !important;
border: 3px solid rgba(219, 167, 14, 0.2) !important;
border-top: 3px solid var(--gold) !important;
border-right: 3px solid var(--text-primary) !important;
border-radius: 50% !important;
animation: spinRing 0.9s cubic-bezier(0.55, 0.15, 0.45, 0.85) infinite !important;
box-shadow: 0 0 12px var(--gold-glow) !important;
}
@keyframes spinRing {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* ==============================================================================
7. VIDEO UPLOAD DROPZONE & ACTIVE VIDEO ROW
============================================================================== */
.compact-dropzone {
background-color: var(--bg-surface) !important;
border: 2px dashed var(--gold-border) !important;
border-radius: 10px !important;
padding: 20px 24px !important;
min-height: 155px !important;
max-height: 50vh;
transition: all 0.2s ease !important;
overflow: hidden !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
position: relative !important;
}
.compact-dropzone:hover {
border-color: var(--gold) !important;
background-color: var(--bg-surface-hover) !important;
}
/* Hide native file input element */
.compact-dropzone input[type="file"],
.compact-dropzone [data-testid="file-upload"],
input[type="file"] {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
position: absolute !important;
pointer-events: none !important;
}
.compact-dropzone .upload-container,
.compact-dropzone > div:not([data-testid="file-upload"]) {
min-height: 130px !important;
padding: 12px 18px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
width: 100% !important;
}
.compact-dropzone button {
padding: 10px 22px !important;
font-size: 14px !important;
font-weight: 700 !important;
}
/* Active Video Info Row (Video Name on Left, Action Buttons Aligned Right, strictly single line) */
.video-info-row {
background: var(--bg-surface) !important;
border: 1.5px solid var(--gold-border) !important;
border-radius: 10px !important;
padding: 10px 16px !important;
min-height: 58px !important;
display: flex !important;
flex-direction: row !important;
flex-wrap: nowrap !important;
align-items: center !important;
justify-content: space-between !important;
gap: 12px !important;
width: 100% !important;
box-sizing: border-box !important;
}
.video-info-row > .video-name-col,
.video-info-row > .prose,
.video-info-row > div:first-child {
flex: 1 1 auto !important;
min-width: 0 !important;
width: auto !important;
margin: 0 !important;
display: flex !important;
align-items: center !important;
}
.video-info-row > .video-name-col p,
.video-info-row > .prose p {
margin: 0 !important;
padding: 0 !important;
display: flex !important;
align-items: center !important;
white-space: nowrap !important;
}
.video-name-badge {
color: var(--text-body) !important;
font-size: 15px !important;
font-weight: 600 !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
display: flex !important;
align-items: center !important;
}
/* Action buttons in Video Info Row */
.video-info-row > button,
.preview-modal-btn,
.change-vid-btn {
border-radius: 8px !important;
height: 40px !important;
padding: 0 16px !important;
font-size: 13.5px !important;
font-weight: 700 !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
white-space: nowrap !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35) !important;
flex: 0 0 auto !important;
width: auto !important;
}
.preview-modal-btn {
background: #332f2f !important;
color: var(--text-body) !important;
border: 1px solid var(--gold) !important;
margin: 0 0 0 auto !important;
}
.preview-modal-btn:hover {
background: #3f3939 !important;
border-color: var(--gold-hover) !important;
transform: translateY(-1px) !important;
box-shadow: 0 4px 12px var(--gold-glow) !important;
}
.change-vid-btn {
background: #2a2525 !important;
border: 1px solid var(--gold-border) !important;
color: var(--gold) !important;
margin: 0 !important;
}
.change-vid-btn:hover {
background: rgba(219, 167, 14, 0.18) !important;
border-color: var(--gold) !important;
color: var(--text-primary) !important;
transform: translateY(-1px) !important;
}
/* ==============================================================================
8. INFORMATION CARD & ADVANCED DEMO LINK
============================================================================== */
.info-content {
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
gap: 20px !important;
}
.info-text {
color: var(--text-muted) !important;
font-size: 12.5px !important;
line-height: 1.55 !important;
margin: 0 !important;
flex: 1 1 auto !important;
}
.info-markdown {
color: var(--text-muted) !important;
font-size: 13.5px !important;
line-height: 1.65 !important;
margin-top: 6px !important;
}
.info-markdown h1 {
color: var(--gold) !important;
font-size: 18px !important;
font-weight: 700 !important;
text-align: left !important;
white-space: normal !important;
margin: 8px 0 10px 0 !important;
letter-spacing: 0.5px !important;
}
.info-markdown h2 {
color: var(--gold) !important;
font-size: 15px !important;
font-weight: 700 !important;
text-align: left !important;
opacity: 1 !important;
margin: 18px 0 8px 0 !important;
letter-spacing: 0.4px !important;
border-bottom: 1px solid rgba(219, 167, 14, 0.2) !important;
padding-bottom: 4px !important;
}
.info-markdown h3 {
color: #f0eae4 !important;
font-size: 14px !important;
font-weight: 600 !important;
text-align: left !important;
margin: 12px 0 4px 0 !important;
}
.info-markdown p {
color: var(--text-muted) !important;
font-size: 13.5px !important;
line-height: 1.65 !important;
margin: 0 0 10px 0 !important;
}
.info-markdown strong {
color: var(--text-primary) !important;
font-weight: 600 !important;
}
.info-markdown a {
color: var(--gold) !important;
text-decoration: underline !important;
text-underline-offset: 3px !important;
transition: color 0.15s ease !important;
}
.info-markdown a:hover {
color: var(--gold-hover) !important;
text-decoration: underline !important;
}
.info-markdown ul,
.info-markdown ol {
margin: 6px 0 12px 22px !important;
padding-left: 0 !important;
color: var(--text-muted) !important;
}
.info-markdown li {
margin-bottom: 5px !important;
line-height: 1.55 !important;
color: var(--text-muted) !important;
}
.info-markdown blockquote {
border-left: 3px solid var(--gold) !important;
background: rgba(219, 167, 14, 0.08) !important;
padding: 10px 14px !important;
margin: 12px 0 !important;
border-radius: 0 6px 6px 0 !important;
color: #ded7d7 !important;
}
.info-markdown blockquote p {
margin: 0 !important;
color: #ded7d7 !important;
}
.advanced-demo-link {
display: inline-flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
text-align: center !important;
background: rgba(219, 167, 14, 0.14) !important;
color: var(--gold) !important;
border: 1.5px solid var(--gold) !important;
border-radius: 10px !important;
padding: 10px 18px !important;
gap: 2px !important;
text-decoration: none !important;
white-space: nowrap !important;
transition: all 0.2s ease !important;
flex-shrink: 0 !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
cursor: pointer !important;
}
.advanced-demo-link:hover {
background: var(--gold) !important;
color: #221f1f !important;
transform: translateY(-1px) !important;
box-shadow: 0 4px 14px rgba(219, 167, 14, 0.35) !important;
}
.advanced-demo-link .adv-line {
display: block !important;
line-height: 1.25 !important;
text-transform: uppercase !important;
}
.advanced-demo-link .adv-line-1 {
font-size: 13px !important;
font-weight: 800 !important;
letter-spacing: 1.2px !important;
}
.advanced-demo-link .adv-line-2 {
font-size: 11.5px !important;
font-weight: 700 !important;
letter-spacing: 1px !important;
opacity: 0.95 !important;
}
.advanced-demo-link .adv-line-3 {
font-size: 14px !important;
font-weight: 800 !important;
letter-spacing: 1.2px !important;
margin-top: 1px !important;
}
/* ==============================================================================
9. FULLSCREEN MODAL (WEBCAM RECORDING & TRIMMING)
============================================================================== */
.modal-overlay {
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
width: 100vw !important;
height: 100vh !important;
background: rgba(0, 0, 0, 0.85) !important;
backdrop-filter: blur(10px) !important;
-webkit-backdrop-filter: blur(10px) !important;
z-index: 99999 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
padding: 20px !important;
box-sizing: border-box !important;
}
.modal-dialog-card {
background-color: #262222 !important;
border: 1.5px solid var(--gold) !important;
border-radius: 16px !important;
max-width: 680px !important;
width: 95% !important;
max-height: 90vh !important;
overflow-y: auto !important;
padding: 20px 24px !important;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.95) !important;
box-sizing: border-box !important;
display: flex !important;
flex-direction: column !important;
gap: 14px !important;
animation: modalScaleIn 0.22s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
@keyframes modalScaleIn {
0% {
opacity: 0;
transform: scale(0.92);
}
100% {
opacity: 1;
transform: scale(1);
}
}
.modal-header-row {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
width: 100% !important;
border-bottom: 1px solid rgba(219, 167, 14, 0.3) !important;
padding-bottom: 10px !important;
}
.modal-title {
color: #ffffff !important;
font-size: 18px !important;
font-weight: 700 !important;
margin: 0 !important;
}
.modal-close-col {
flex: 0 0 auto !important;
min-width: 36px !important;
margin-left: auto !important;
display: flex !important;
align-items: center !important;
justify-content: flex-end !important;
}
.modal-close-icon {
background: transparent !important;
border: none !important;
color: var(--gold) !important;
font-size: 24px !important;
font-weight: bold !important;
cursor: pointer !important;
width: 36px !important;
height: 36px !important;
padding: 0 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
border-radius: 6px !important;
transition: all 0.2s ease !important;
}
.modal-close-icon:hover {
color: var(--text-primary) !important;
background-color: var(--gold-border-subtle) !important;
transform: scale(1.1) !important;
}
.modal-video-player {
width: 100% !important;
display: flex !important;
flex-direction: column !important;
margin: 0 !important;
border-radius: 8px !important;
}
.modal-video-player video {
max-height: 38vh !important;
width: 100% !important;
object-fit: contain !important;
border-radius: 8px !important;
}
/* Normal video playback: strictly no flip across all video players */
video,
.modal-video-player video {
transform: none !important;
}
/* Mirror ONLY the live webcam stream during recording */
.modal-video-player [data-testid="webcam"] video,
.modal-video-player .record video,
.modal-video-player video:not([src]) {
transform: scaleX(-1) !important;
}
.modal-footer-col,
.modal-footer-row {
width: 100% !important;
margin-top: 14px !important;
display: flex !important;
flex-direction: column !important;
gap: 10px !important;
align-items: stretch !important;
}
.modal-footer-col button,
.modal-footer-row button,
.modal-done-btn {
width: 100% !important;
box-sizing: border-box !important;
}
/* Subtle discreet restart session button in bottom-right */
.restart-row {
margin-top: 18px !important;
display: flex !important;
justify-content: flex-end !important;
width: 100% !important;
}
.restart-btn {
background: transparent !important;
color: #736b6b !important;
border: 1px solid #3d3737 !important;
border-radius: 6px !important;
font-size: 12px !important;
font-weight: 500 !important;
padding: 4px 12px !important;
height: 30px !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
opacity: 0.75 !important;
}
.restart-btn:hover {
color: #ded7d7 !important;
border-color: #696262 !important;
background: rgba(255, 255, 255, 0.05) !important;
opacity: 1 !important;
}
/* ==============================================================================
10. SCROLLABLE HEADER WITH GOLD BADGES & RESPONSIVE DESIGN
============================================================================== */
.app-header-html,
.app-header-html.block,
.app-header-html .html-container {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
min-height: auto !important;
}
.app-header-container {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: space-between !important;
width: 100% !important;
margin: 6px 0 4px 0 !important;
gap: 16px !important;
box-sizing: border-box !important;
}
.header-titles {
flex: 1 1 auto !important;
text-align: center !important;
min-width: 0 !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
}
.app-title {
text-align: center !important;
color: var(--gold) !important;
font-weight: 800 !important;
letter-spacing: 0.5px !important;
font-size: clamp(19px, 2.4vw, 27px) !important;
margin: 0 0 3px 0 !important;
line-height: 1.2 !important;
white-space: normal !important;
}
.app-subtitle {
text-align: center !important;
color: var(--text-body) !important;
font-weight: 400 !important;
font-size: 13.5px !important;
opacity: 0.85 !important;
margin: 0 !important;
line-height: 1.3 !important;
}
/* Gold Box Badges Aligned to the Content Left & Right */
.header-badge {
flex: 0 0 180px !important;
width: 180px !important;
max-width: 180px !important;
height: 80px !important;
max-height: 80px !important;
box-sizing: border-box !important;
background-color: var(--bg-page) !important;
border: 1.5px solid var(--gold) !important;
border-radius: 9px !important;
padding: 0px !important;
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4), 0 0 8px rgba(212, 175, 55, 0.3) !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease !important;
overflow: hidden !important;
}
.header-badge:hover {
transform: translateY(-2px) !important;
border-color: var(--gold-hover) !important;
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.45), 0 0 14px var(--gold-glow) !important;
}
.header-badge a {
display: flex !important;
align-items: center !important;
justify-content: center !important;
width: 100% !important;
height: 100% !important;
text-decoration: none !important;
line-height: 0 !important;
}
.header-badge-img {
max-height: 80px !important;
max-width: 180px !important;
width: auto !important;
height: auto !important;
display: block !important;
object-fit: contain !important;
margin: auto !important;
padding: 15px 15px !important;
}
@media (max-width: 650px) {
.app-header-container {
flex-wrap: wrap !important;
justify-content: center !important;
gap: 10px !important;
}
.header-titles {
order: 1 !important;
width: 100% !important;
margin-bottom: 4px !important;
}
.header-badge-left {
order: 2 !important;
}
.header-badge-right {
order: 3 !important;
}
.examples-row {
flex-direction: column !important;
}
.examples-row > div {
width: 100% !important;
}
}
/* ==============================================================================
11. SHOW KEYPOINTS BUTTON & MODAL
============================================================================== */
.show-keypoints-btn {
background: linear-gradient(135deg, #383333 0%, #2a2626 100%) !important;
border: 1.5px solid var(--gold) !important;
color: var(--gold) !important;
font-weight: 800 !important;
font-size: 18px !important;
letter-spacing: 0.5px !important;
border-radius: 8px !important;
height: 48px !important;
width: 100% !important;
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4), 0 0 10px var(--gold-border-subtle) !important;
transition: all 0.2s ease !important;
margin: 14px 0 0 0 !important;
cursor: pointer !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.show-keypoints-btn:hover {
background: var(--gold) !important;
color: #1e1b1b !important;
transform: translateY(-1px) !important;
box-shadow: 0 5px 18px var(--gold-glow) !important;
}
.keypoints-video-player video {
max-height: 52vh !important;
width: 100% !important;
object-fit: contain !important;
border-radius: 8px !important;
}