* { box-sizing: border-box; } :root { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #18181b; background: #f4f4f5; } body { margin: 0; min-height: 100vh; background: radial-gradient( circle at top, #ffffff 0, #f4f4f5 45%, #e4e4e7 100% ); } button, input, textarea { font: inherit; } .container { width: min( 900px, calc(100% - 32px) ); margin: 0 auto; padding: 56px 0 80px; } /* Header */ .header { margin-bottom: 32px; } .header h1 { margin: 0 0 8px; font-size: clamp( 32px, 6vw, 46px ); letter-spacing: -0.04em; } .header p { margin: 0; color: #71717a; font-size: 16px; } /* Cards */ .card { margin-bottom: 24px; padding: 28px; background: rgba( 255, 255, 255, 0.92 ); border: 1px solid #e4e4e7; border-radius: 16px; box-shadow: 0 8px 30px rgba( 0, 0, 0, 0.05 ); } .card-header { margin-bottom: 28px; } .card-header h2 { margin: 0 0 6px; font-size: 22px; letter-spacing: -0.02em; } .card-header p { margin: 0; color: #71717a; font-size: 14px; } /* Forms */ .form-group { margin-bottom: 22px; } label, .label { display: block; margin-bottom: 9px; font-size: 14px; font-weight: 650; } .optional { margin-left: 4px; color: #a1a1aa; font-weight: 400; } .field-hint { margin-top: 7px; color: #71717a; font-size: 12px; } input[type="password"], input[type="file"], textarea { width: 100%; border: 1px solid #d4d4d8; border-radius: 8px; background: #ffffff; color: #18181b; } input[type="password"] { padding: 11px 12px; } textarea { display: block; min-height: 130px; padding: 12px; resize: vertical; } input:focus, textarea:focus { outline: none; border-color: #71717a; box-shadow: 0 0 0 3px rgba( 113, 113, 122, 0.12 ); } /* Dropzone */ .dropzone { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 170px; padding: 28px; border: 1.5px dashed #a1a1aa; border-radius: 12px; background: #fafafa; text-align: center; cursor: pointer; transition: border-color 120ms ease, background 120ms ease, transform 120ms ease; } .dropzone:hover, .dropzone:focus { outline: none; border-color: #52525b; background: #f4f4f5; } .dropzone.dragging { border-color: #18181b; background: #e4e4e7; transform: scale(1.01); } .dropzone.has-file { border-style: solid; border-color: #a1a1aa; background: #fafafa; } .dropzone-icon { display: flex; align-items: center; justify-content: center; width: 42px; height: 42px; margin-bottom: 12px; border-radius: 50%; background: #e4e4e7; font-size: 22px; font-weight: 700; } .dropzone strong { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dropzone span { margin-top: 5px; color: #71717a; font-size: 13px; } /* Mode */ .mode-selector { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .mode-option { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 11px; margin: 0; border: 1px solid #d4d4d8; border-radius: 8px; background: #ffffff; cursor: pointer; font-weight: 550; transition: background 120ms ease, border-color 120ms ease; } .mode-option:hover { background: #f4f4f5; } .mode-option:has( input:checked ) { border-color: #18181b; background: #f4f4f5; } .mode-option input { margin: 0; } /* Image info */ .image-info { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; padding: 10px 12px; border: 1px solid #e4e4e7; border-radius: 8px; background: #fafafa; color: #52525b; font-size: 13px; } .image-info strong { color: #18181b; } /* Buttons */ .button { width: 100%; padding: 12px 16px; border: 0; border-radius: 8px; background: #18181b; color: #ffffff; font-weight: 650; cursor: pointer; transition: background 120ms ease, transform 120ms ease; } .button:hover { background: #27272a; } .button:active { transform: translateY(1px); } .button:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } .secondary-button { padding: 7px 11px; border: 1px solid #d4d4d8; border-radius: 7px; background: #ffffff; color: #18181b; font-size: 13px; cursor: pointer; } .secondary-button:hover { background: #f4f4f5; } /* Status */ .status { min-height: 20px; margin-top: 14px; font-size: 14px; } .status.success { color: #166534; } .status.error { color: #b91c1c; } /* Results */ .result { margin-top: 24px; padding-top: 22px; border-top: 1px solid #e4e4e7; } .result-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; } .result-header h3 { margin: 0; } .result pre { margin: 0; padding: 16px; max-height: 400px; overflow: auto; border-radius: 8px; background: #f4f4f5; white-space: pre-wrap; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 13px; line-height: 1.6; } /* Utility */ .hidden { display: none !important; } /* Mobile */ @media ( max-width: 600px ) { .container { width: calc(100% - 20px); padding: 28px 0 50px; } .card { padding: 20px; } .mode-selector { grid-template-columns: 1fr; } .image-info { flex-direction: column; } .dropzone { min-height: 150px; } }