:root { color: #2b2b2b; background: #f5f7fa; font-family: "Aptos", "Segoe UI", sans-serif; --primary: #0a2f5a; --secondary: #2b2b2b; --accent: #f28c28; --surface: #ffffff; --muted: #6f7a86; --line: #dde5ee; --success: #0a5a21; --danger: #b42318; --shadow: 0 24px 70px rgba(10, 47, 90, 0.12); } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; } .splash-screen { display: grid; min-height: 100vh; place-items: center; background: #ffffff; } .splash-screen img { width: min(220px, 58vw); height: auto; animation: splash-enter 420ms ease both; } button, input, select { font: inherit; } button { cursor: pointer; } button:disabled { cursor: not-allowed; opacity: 0.58; } .shell { min-height: 100vh; padding: 34px; background: radial-gradient(circle at top left, rgba(242, 140, 40, 0.18), transparent 32rem), linear-gradient(145deg, #f5f7fa 0%, #edf2f7 45%, #ffffff 100%); } .hero { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 24px; align-items: end; margin: 0 auto 24px; max-width: 1280px; } .brand-lockup { display: flex; min-width: 0; align-items: flex-start; gap: 18px; } .brand-lockup__logo { width: 82px; max-height: 68px; flex: 0 0 auto; object-fit: contain; margin-top: 4px; } .eyebrow { margin: 0 0 8px; color: var(--accent); font-size: 0.74rem; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; } h1, h2 { margin: 0; color: var(--primary); letter-spacing: -0.04em; } h1 { max-width: 820px; font-size: clamp(2.4rem, 7vw, 5.8rem); line-height: 0.9; } h2 { font-size: 1.45rem; } .hero__copy { max-width: 760px; color: var(--muted); font-size: 1.08rem; line-height: 1.7; } .panel { border: 1px solid rgba(10, 47, 90, 0.1); border-radius: 28px; background: rgba(255, 255, 255, 0.86); box-shadow: var(--shadow); backdrop-filter: blur(14px); } .hero__side { display: grid; gap: 12px; } .language-select { display: grid; gap: 6px; border: 1px solid rgba(10, 47, 90, 0.1); border-radius: 20px; background: rgba(255, 255, 255, 0.86); box-shadow: 0 12px 30px rgba(10, 47, 90, 0.08); padding: 14px; } .language-select span { color: var(--muted); font-size: 0.76rem; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; } .control-grid { display: grid; grid-template-columns: minmax(280px, 0.85fr) minmax(360px, 1.45fr); gap: 22px; margin: 0 auto; max-width: 1280px; } .panel { padding: 22px; } .panel--scenarios, .panel--log { grid-column: span 1; } .panel__header { display: flex; gap: 16px; align-items: center; justify-content: space-between; margin-bottom: 18px; } .field { display: grid; gap: 8px; color: var(--secondary); font-weight: 700; } .field span { color: var(--muted); font-size: 0.84rem; font-weight: 700; } input, select { width: 100%; border: 1px solid var(--line); border-radius: 16px; background: #ffffff; color: var(--secondary); padding: 13px 14px; outline: none; } input:focus, select:focus { border-color: var(--accent); box-shadow: 0 0 0 4px rgba(242, 140, 40, 0.15); } .machine-summary { display: flex; gap: 12px; align-items: center; margin: 18px 0; border: 1px solid var(--line); border-radius: 18px; padding: 16px; background: #f8fafc; } .machine-summary small { display: block; margin-top: 3px; color: var(--muted); } .status-dot { width: 18px; height: 18px; border-radius: 99px; background: var(--muted); } .status-dot--production { background: var(--success); } .status-dot--arret_non_qualifie, .status-dot--arret_qualifie { background: var(--danger); } .status-dot--reglage { background: var(--accent); } .numeric-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .scenario-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .scenario-button { min-height: 118px; border: 1px solid rgba(10, 47, 90, 0.12); border-radius: 22px; background: linear-gradient(145deg, #ffffff, #f3f7fb); color: var(--secondary); padding: 18px; text-align: left; transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease; } .scenario-button:hover:not(:disabled) { transform: translateY(-2px); border-color: rgba(242, 140, 40, 0.8); box-shadow: 0 18px 34px rgba(10, 47, 90, 0.12); } .scenario-button strong { display: block; color: var(--primary); font-size: 1rem; } .scenario-button span { display: block; margin-top: 8px; color: var(--muted); font-size: 0.9rem; line-height: 1.45; } .raw-form { display: grid; gap: 14px; } .primary-button, .ghost-button { border-radius: 999px; padding: 11px 16px; font-weight: 800; } .primary-button { border: 0; background: var(--accent); color: #241000; } .ghost-button { border: 1px solid var(--line); background: #ffffff; color: var(--primary); } .busy { border-radius: 99px; background: rgba(242, 140, 40, 0.12); color: #9a520f; padding: 8px 12px; font-size: 0.86rem; font-weight: 800; } .log-list { display: grid; gap: 10px; max-height: 520px; overflow: auto; } .log-entry { border: 1px solid var(--line); border-radius: 16px; background: #ffffff; overflow: hidden; } .log-entry--ok { border-left: 5px solid var(--success); } .log-entry--error { border-left: 5px solid var(--danger); } .log-entry summary { display: flex; justify-content: space-between; gap: 12px; padding: 13px 14px; color: var(--primary); font-weight: 800; list-style: none; } .log-entry summary::-webkit-details-marker { display: none; } .log-entry small { color: var(--muted); font-weight: 600; } pre { margin: 0; border-top: 1px solid var(--line); padding: 14px; overflow: auto; color: #1f2937; font-size: 0.78rem; line-height: 1.55; white-space: pre-wrap; } .empty { margin: 0; color: var(--muted); } @media (max-width: 920px) { .shell { padding: 20px; } .hero, .brand-lockup, .control-grid { grid-template-columns: 1fr; } .brand-lockup { display: grid; } .brand-lockup__logo { width: 72px; margin-top: 0; } .hero__side { width: 100%; } } @keyframes splash-enter { from { opacity: 0; transform: translateY(8px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } } @media (max-width: 620px) { .scenario-grid, .numeric-grid { grid-template-columns: 1fr; } .panel__header { align-items: flex-start; flex-direction: column; } }