.morse-page{--cw-good:#52d79a;--cw-warn:#ffc15a;--cw-bad:#ff7f8b;--cw-purple:#a98cff}
.morse-page .morse-hero-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);gap:42px;align-items:center}
.morse-page .morse-hero-panel{display:grid;gap:12px;padding:24px;border:1px solid var(--line);border-radius:24px;background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 10%,var(--surface)),var(--surface));box-shadow:var(--shadow)}
.morse-page .hero-fact{padding:15px 16px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--bg) 34%,transparent)}
.morse-page .hero-fact strong,.morse-page .hero-fact span{display:block}.morse-page .hero-fact strong{color:var(--accent);font-size:.78rem;text-transform:uppercase;letter-spacing:.1em}.morse-page .hero-fact span{margin-top:5px;color:var(--muted);font-size:.92rem}
.morse-page .method-grid,.morse-page .phase-grid,.morse-page .tool-grid,.morse-page .resource-grid-cw{display:grid;gap:18px}
.morse-page .method-grid{grid-template-columns:repeat(4,1fr)}.morse-page .phase-grid{grid-template-columns:repeat(3,1fr)}.morse-page .tool-grid{grid-template-columns:repeat(4,1fr)}.morse-page .resource-grid-cw{grid-template-columns:repeat(4,1fr)}
.morse-page .method-card,.morse-page .phase-card,.morse-page .tool-card,.morse-page .resource-card-cw{padding:22px;border:1px solid var(--line);border-radius:18px;background:var(--surface)}
.morse-page .method-card h3,.morse-page .phase-card h3,.morse-page .tool-card h3,.morse-page .resource-card-cw h3{margin-bottom:8px}.morse-page .method-card p,.morse-page .phase-card p,.morse-page .tool-card p,.morse-page .resource-card-cw p{margin:0;color:var(--muted)}
.morse-page .phase-number{display:grid;place-items:center;width:40px;height:40px;margin-bottom:15px;border-radius:12px;background:color-mix(in srgb,var(--accent) 16%,var(--surface));color:var(--accent);font:900 1rem ui-monospace,monospace}
.morse-page .cw-warning{margin-top:20px;padding:18px 20px;border:1px solid color-mix(in srgb,var(--warning) 44%,var(--line));border-radius:15px;background:color-mix(in srgb,var(--warning) 8%,var(--surface))}.morse-page .cw-warning strong{display:block;color:var(--warning)}.morse-page .cw-warning p{margin:5px 0 0;color:var(--muted)}
.morse-page .trainer-layout{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);gap:22px;align-items:start}.morse-page .trainer-card,.morse-page .progress-card{border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:0 14px 45px rgba(0,0,0,.09)}.morse-page .trainer-card{padding:26px}.morse-page .progress-card{position:sticky;top:105px;padding:22px}
.morse-page .trainer-controls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.morse-page .control-field{display:grid;gap:6px}.morse-page .control-field label{font-size:.78rem;color:var(--muted);font-weight:750}.morse-page select,.morse-page input[type="number"],.morse-page textarea{width:100%;border:1px solid var(--line);border-radius:12px;background:var(--bg-soft);color:var(--text);font:inherit}.morse-page select,.morse-page input[type="number"]{min-height:46px;padding:8px 11px}.morse-page textarea{min-height:130px;padding:14px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;text-transform:uppercase;letter-spacing:.08em}
.morse-page input[type="range"]{width:100%;accent-color:var(--accent)}.morse-page .range-output{display:flex;justify-content:space-between;gap:10px;color:var(--muted);font-size:.75rem}.morse-page .range-output output{color:var(--accent);font-weight:850}
.morse-page .active-character-box{margin:18px 0;padding:14px;border:1px solid var(--line);border-radius:13px;background:var(--bg-soft)}.morse-page .active-character-box strong{display:block;margin-bottom:7px;font-size:.78rem;color:var(--muted)}.morse-page #active-characters{font:800 1rem ui-monospace,monospace;letter-spacing:.16em;color:var(--accent-2);word-break:break-word}
.morse-page .trainer-actions{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}.morse-page button.button{cursor:pointer}.morse-page button.button:disabled{opacity:.45;cursor:not-allowed}.morse-page .button.danger{border-color:color-mix(in srgb,var(--cw-bad) 50%,var(--line));background:transparent;color:var(--cw-bad)}
.morse-page .exercise-screen{padding:18px;border:1px solid var(--line);border-radius:16px;background:#05101a}.morse-page .exercise-status{min-height:26px;color:#a9c1d4}.morse-page .morse-pulse{display:flex;align-items:center;gap:6px;height:38px;margin:8px 0}.morse-page .morse-pulse span{display:block;width:7px;height:7px;border-radius:50%;background:#38536b;transition:.12s}.morse-page .morse-pulse.playing span{background:var(--accent);box-shadow:0 0 16px var(--accent)}.morse-page .morse-pulse.playing span:nth-child(2){animation:cwPulse .8s infinite .15s}.morse-page .morse-pulse.playing span:nth-child(3){animation:cwPulse .8s infinite .3s}@keyframes cwPulse{50%{transform:scale(2.2);opacity:.45}}
.morse-page .solution{margin-top:12px;padding:13px;border:1px dashed #35536e;border-radius:11px;color:var(--accent-2);font:800 1rem ui-monospace,monospace;letter-spacing:.08em;word-break:break-word}.morse-page .solution[hidden]{display:none}
.morse-page .result-box{min-height:52px;margin-top:14px;padding:13px 15px;border-radius:12px;background:var(--bg-soft);color:var(--muted)}.morse-page .result-box.good{border-left:5px solid var(--cw-good);color:var(--cw-good)}.morse-page .result-box.warn{border-left:5px solid var(--cw-warn);color:var(--cw-warn)}.morse-page .result-box.bad{border-left:5px solid var(--cw-bad);color:var(--cw-bad)}
.morse-page .progress-list{display:grid;gap:10px;margin:15px 0}.morse-page .progress-row{display:flex;justify-content:space-between;gap:15px;padding-bottom:9px;border-bottom:1px solid var(--line)}.morse-page .progress-row span{color:var(--muted)}.morse-page .progress-row strong{font-family:ui-monospace,monospace;color:var(--accent)}.morse-page .progress-bar{height:10px;overflow:hidden;border-radius:99px;background:var(--bg-soft)}.morse-page .progress-bar span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .3s}.morse-page .weak-list{margin:14px 0 20px;color:var(--muted);font-size:.88rem}
.morse-page .test-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.morse-page .test-card{display:flex;min-height:235px;flex-direction:column;padding:22px;border:1px solid var(--line);border-radius:18px;background:var(--surface)}.morse-page .test-card h3{margin-bottom:8px}.morse-page .test-card p{margin:0;color:var(--muted)}.morse-page .test-card .button{margin-top:auto;padding-top:0}
.morse-page .resource-card-cw{display:flex;min-height:205px;flex-direction:column;color:inherit;text-decoration:none}.morse-page .resource-card-cw:hover{border-color:var(--accent);transform:translateY(-2px)}.morse-page .resource-card-cw span{margin-top:auto;padding-top:14px;color:var(--accent);font-weight:850}
.morse-page .reference-columns{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.morse-page .reference-card{padding:20px;border:1px solid var(--line);border-radius:18px;background:var(--surface)}.morse-page .reference-table{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px}.morse-page .reference-item{display:flex;justify-content:space-between;gap:12px;padding:5px 0;border-bottom:1px solid var(--line)}.morse-page .reference-item code{color:var(--accent)}
@media(max-width:1050px){.morse-page .method-grid,.morse-page .tool-grid,.morse-page .resource-grid-cw{grid-template-columns:repeat(2,1fr)}.morse-page .morse-hero-grid,.morse-page .trainer-layout{grid-template-columns:1fr}.morse-page .progress-card{position:static}.morse-page .trainer-controls{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.morse-page .phase-grid,.morse-page .test-grid,.morse-page .reference-columns{grid-template-columns:1fr}.morse-page .trainer-controls{grid-template-columns:1fr}}
@media(max-width:520px){.morse-page .method-grid,.morse-page .tool-grid,.morse-page .resource-grid-cw{grid-template-columns:1fr}.morse-page .trainer-card{padding:18px}.morse-page .trainer-actions .button{width:100%}}

/* Correctif v20 : état du moteur, boutons et table complète. */
.morse-page .morse-engine-state {
    margin: 0 0 18px;
    padding: 12px 15px;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: var(--bg-soft);
    color: var(--muted);
    font-size: 0.88rem;
    font-weight: 750;
}

.morse-page .morse-engine-state.is-ready {
    border-color: color-mix(in srgb, var(--cw-good) 45%, var(--line));
    background: color-mix(in srgb, var(--cw-good) 8%, var(--surface));
    color: var(--cw-good);
}

.morse-page .morse-engine-state.is-error {
    border-color: color-mix(in srgb, var(--cw-bad) 50%, var(--line));
    background: color-mix(in srgb, var(--cw-bad) 8%, var(--surface));
    color: var(--cw-bad);
}

.morse-page .trainer-actions,
.morse-page .test-card,
.morse-page .test-card .button {
    position: relative;
    z-index: 2;
}

.morse-page button,
.morse-page .trainer-actions button,
.morse-page [data-cw-test] {
    pointer-events: auto;
    touch-action: manipulation;
}

.morse-page .reference-columns {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.morse-page .reference-card.is-letters {
    grid-column: 1 / -1;
}

.morse-page .reference-card.is-letters .reference-table {
    grid-template-columns: repeat(4, minmax(0, 1fr));
}

.morse-page .reference-card:not(.is-letters) .reference-table {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.morse-page .reference-item strong,
.morse-page .reference-item code {
    white-space: nowrap;
}

@media (max-width: 900px) {
    .morse-page .reference-card.is-letters .reference-table {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

@media (max-width: 700px) {
    .morse-page .reference-columns {
        grid-template-columns: 1fr;
    }

    .morse-page .reference-card.is-letters {
        grid-column: auto;
    }

    .morse-page .reference-card.is-letters .reference-table {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 390px) {
    .morse-page .reference-card.is-letters .reference-table,
    .morse-page .reference-card:not(.is-letters) .reference-table {
        grid-template-columns: 1fr;
    }
}
