/* ==================== COMPONENT STYLES ==================== */ /* ==================== APP LAYOUT ==================== */ .app { display: flex; flex-direction: column; min-height: 100vh; } .main { flex: 1; width: 100%; max-width: 1200px; margin: 0 auto; padding: var(--space-6); } /* ==================== HEADER ==================== */ .header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-4) var(--space-6); background: rgba(15, 23, 42, 0.8); backdrop-filter: blur(12px); border-bottom: 1px solid var(--color-border); position: sticky; top: 0; z-index: var(--z-sticky); } .header__brand { display: flex; align-items: center; gap: var(--space-3); } .header__logo { font-size: var(--text-2xl); } .header__title { font-size: var(--text-xl); font-weight: var(--font-bold); background: linear-gradient(135deg, var(--color-primary-400), var(--color-primary-200)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Status Indicator */ .status-indicator { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--color-bg-elevated); border-radius: var(--radius-full); font-size: var(--text-sm); color: var(--color-text-muted); } .status-indicator__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--color-warning-500); animation: pulse 2s infinite; } .status-indicator.is-online .status-indicator__dot { background: var(--color-success-500); animation: none; } .status-indicator.is-offline .status-indicator__dot { background: var(--color-danger-500); animation: none; } /* ==================== HERO SECTION ==================== */ .hero { text-align: center; padding: var(--space-10) var(--space-4); } .hero__title { font-size: var(--text-4xl); font-weight: var(--font-bold); margin-bottom: var(--space-4); background: linear-gradient(135deg, #fff 0%, var(--color-neutral-300) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero__subtitle { font-size: var(--text-lg); color: var(--color-text-muted); max-width: 600px; margin: 0 auto; } /* ==================== CONTENT GRID ==================== */ .content-grid { display: grid; grid-template-columns: 1fr; gap: var(--space-6); } @media (min-width: 1024px) { .content-grid { grid-template-columns: 1fr 1fr; } } /* ==================== PANELS ==================== */ .panel { background: var(--color-bg-elevated); border: 1px solid var(--color-border); border-radius: var(--radius-2xl); padding: var(--space-6); } .panel__title { font-size: var(--text-lg); font-weight: var(--font-semibold); margin-bottom: var(--space-6); color: var(--color-text); } /* ==================== FILE UPLOAD ==================== */ .file-upload { margin-bottom: var(--space-6); } .file-upload__dropzone { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-10) var(--space-6); border: 2px dashed var(--color-border); border-radius: var(--radius-xl); background: var(--color-bg-card); transition: all var(--duration-normal) var(--ease-out); cursor: pointer; } .file-upload__dropzone:hover, .file-upload__dropzone.is-dragging { border-color: var(--color-primary-500); background: rgba(99, 102, 241, 0.05); } .file-upload__dropzone.is-dragging { transform: scale(1.02); } .file-upload__dropzone.has-error { border-color: var(--color-danger-500); animation: shake 0.5s ease-in-out; } .file-upload__icon { color: var(--color-text-muted); margin-bottom: var(--space-4); } .file-upload__text { font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-text); margin-bottom: var(--space-2); } .file-upload__or { color: var(--color-text-subtle); font-size: var(--text-sm); margin-bottom: var(--space-3); } .file-upload__browse { padding: var(--space-2) var(--space-4); background: var(--color-primary-600); color: white; border-radius: var(--radius-lg); font-weight: var(--font-medium); transition: all var(--duration-fast) var(--ease-out); } .file-upload__browse:hover { background: var(--color-primary-500); transform: translateY(-1px); } .file-upload__hint { margin-top: var(--space-4); font-size: var(--text-xs); color: var(--color-text-subtle); } /* File Preview */ .file-preview { display: flex; align-items: center; justify-content: space-between; padding: var(--space-4); background: var(--color-bg-card); border: 1px solid var(--color-border); border-radius: var(--radius-xl); animation: slideInUp var(--duration-normal) var(--ease-out); } .file-preview__info { display: flex; align-items: center; gap: var(--space-3); color: var(--color-primary-400); } .file-preview__name { font-weight: var(--font-medium); color: var(--color-text); } .file-preview__meta { font-size: var(--text-sm); color: var(--color-text-muted); } .file-preview__remove { padding: var(--space-2); color: var(--color-text-muted); border-radius: var(--radius-lg); transition: all var(--duration-fast) var(--ease-out); } .file-preview__remove:hover { background: var(--color-danger-500); color: white; } /* ==================== LANGUAGE SELECTOR ==================== */ .language-selector { margin-bottom: var(--space-6); } .language-selector__label { display: block; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-text-muted); margin-bottom: var(--space-2); } .language-selector__select { width: 100%; appearance: none; -webkit-appearance: none; padding: var(--space-3) var(--space-4); padding-right: var(--space-10); background: var(--color-bg-card); border: 1px solid var(--color-border); border-radius: var(--radius-lg); font-size: var(--text-base); color: var(--color-text); cursor: pointer; transition: all var(--duration-fast) var(--ease-out); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; } .language-selector__select:hover { border-color: var(--color-border-hover); background-color: rgba(99, 102, 241, 0.05); } .language-selector__select:focus { border-color: var(--color-primary-500); box-shadow: 0 0 0 1px var(--color-primary-500); outline: none; } .language-selector__select option { background: var(--color-bg-elevated); color: var(--color-text); padding: var(--space-2); } /* ==================== ANALYZE BUTTON ==================== */ .analyze-btn { width: 100%; display: flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-4); background: linear-gradient(135deg, var(--color-primary-600), var(--color-primary-700)); color: white; font-size: var(--text-lg); font-weight: var(--font-semibold); border-radius: var(--radius-xl); transition: all var(--duration-normal) var(--ease-out); } .analyze-btn:hover:not(:disabled) { background: linear-gradient(135deg, var(--color-primary-500), var(--color-primary-600)); transform: translateY(-2px); box-shadow: var(--shadow-glow-primary); } .analyze-btn:disabled { background: var(--color-neutral-700); cursor: not-allowed; } .analyze-btn.is-loading { pointer-events: none; } .analyze-btn__idle, .analyze-btn__loading { display: flex; align-items: center; gap: var(--space-2); } /* ==================== RESULTS PANEL ==================== */ .results-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-12) var(--space-6); text-align: center; color: var(--color-text-subtle); } .results-empty svg { margin-bottom: var(--space-4); opacity: 0.5; } .results-content { animation: fadeIn var(--duration-normal) var(--ease-out); } /* Verdict Card */ .verdict-card { display: flex; flex-direction: column; align-items: center; padding: var(--space-8); border-radius: var(--radius-xl); margin-bottom: var(--space-6); animation: slideInUp var(--duration-slow) var(--ease-out); } .verdict-card.is-ai { background: rgba(239, 68, 68, 0.1); border: 1px solid var(--color-danger-500); } .verdict-card.is-human { background: rgba(16, 185, 129, 0.1); border: 1px solid var(--color-success-500); } .verdict-card__icon { font-size: 48px; margin-bottom: var(--space-3); } .verdict-card__label { font-size: var(--text-2xl); font-weight: var(--font-bold); } .verdict-card.is-ai .verdict-card__label { color: var(--color-danger-400); } .verdict-card.is-human .verdict-card__label { color: var(--color-success-400); } /* Confidence Meter */ .confidence-meter { margin-bottom: var(--space-4); } .confidence-meter__header { display: flex; justify-content: space-between; margin-bottom: var(--space-2); font-size: var(--text-sm); color: var(--color-text-muted); } .confidence-meter__value { font-weight: var(--font-bold); color: var(--color-text); } .confidence-meter__track { height: 8px; background: var(--color-bg-card); border-radius: var(--radius-full); overflow: hidden; } .confidence-meter__fill { height: 100%; background: linear-gradient(90deg, var(--color-primary-500), var(--color-primary-400)); border-radius: var(--radius-full); width: 0%; transition: width 1s var(--ease-out); } /* Info Row */ .info-row { display: flex; justify-content: space-between; padding: var(--space-3) 0; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); } .info-row__label { color: var(--color-text-muted); } .info-row__value { font-weight: var(--font-medium); color: var(--color-text); } /* Explanation Card */ .explanation-card { margin-top: var(--space-4); padding: var(--space-4); background: var(--color-bg-card); border-radius: var(--radius-lg); } .explanation-card__header { display: flex; align-items: center; gap: var(--space-2); margin-bottom: var(--space-3); color: var(--color-primary-400); font-size: var(--text-sm); font-weight: var(--font-medium); } .explanation-card__text { font-size: var(--text-sm); color: var(--color-text-muted); line-height: var(--leading-relaxed); } /* ==================== FOOTER ==================== */ .footer { padding: var(--space-6); text-align: center; border-top: 1px solid var(--color-border); color: var(--color-text-subtle); font-size: var(--text-sm); } /* ==================== TOAST ==================== */ .toast-container { position: fixed; bottom: var(--space-6); right: var(--space-6); z-index: var(--z-toast); display: flex; flex-direction: column; gap: var(--space-3); } .toast { display: flex; align-items: flex-start; gap: var(--space-3); padding: var(--space-4); background: var(--color-bg-elevated); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); min-width: 300px; max-width: 400px; animation: slideInUp var(--duration-normal) var(--ease-out); } .toast--error { border-color: var(--color-danger-500); } .toast--success { border-color: var(--color-success-500); } .toast__icon { flex-shrink: 0; } .toast--error .toast__icon { color: var(--color-danger-400); } .toast--success .toast__icon { color: var(--color-success-400); } .toast__content { flex: 1; } .toast__title { font-weight: var(--font-semibold); color: var(--color-text); margin-bottom: var(--space-1); } .toast__message { font-size: var(--text-sm); color: var(--color-text-muted); } .toast__close { flex-shrink: 0; padding: var(--space-1); color: var(--color-text-muted); border-radius: var(--radius-md); transition: all var(--duration-fast) var(--ease-out); } .toast__close:hover { background: var(--color-bg-card); color: var(--color-text); }