/* ========================================================== M. Courcelle — Labo Ordinateur Feuille de style autonome (aucune dépendance externe) Encodage UTF-8 ========================================================== */ :root { /* Palette beige */ --bg: #F0EFEA; --bg2: #E8E6E0; --bg3: #DDDBD4; --white: #FFFFFF; /* Texte */ --text: #1A1A1A; --text2: #444444; --dim: #888888; /* Bordures et ombres */ --border: #B0ADA8; --border2: #CCCAC4; --shadow: 0 8px 32px rgba(0,0,0,.10), 0 2px 6px rgba(0,0,0,.06); --shadow-sm: 0 2px 8px rgba(0,0,0,.08); /* Couleurs arc-en-ciel */ --apple-r: #E03A3E; --apple-o: #F58220; --apple-y: #FDB827; --apple-g: #61BB46; --apple-b: #009DDC; --apple-p: #963D97; --accent: #009DDC; --accent2: #0077AA; /* Couleurs fonctionnelles */ --c-entree: #009DDC; --c-sortie: #F58220; --c-uc: #963D97; --c-ok: #61BB46; --c-err: #E03A3E; /* Typographie : piles système, aucune police à télécharger */ --fd: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --ft: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --fm: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; --fs-xs: 0.78rem; --fs-sm: 0.90rem; --fs-md: 1.00rem; --fs-lg: 1.13rem; --fs-xl: 1.30rem; --fs-2xl: 1.70rem; --radius: 8px; --radius-lg: 12px; --transition: all .20s ease; --menubar-h: 30px; --labo: #E03A3E; } /* Mode dyslexique : sans police externe, on agit sur l'espacement */ body.dyslexic { --fs-md: 1.10rem; --fs-sm: 1.00rem; } body.dyslexic p, body.dyslexic li, body.dyslexic .cat-item-text, body.dyslexic .qcm-opt { line-height: 2.0 !important; letter-spacing: .04em !important; word-spacing: .10em !important; } /* ── Reset ── */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; } body { background: var(--bg); color: var(--text); font-family: var(--ft); font-size: var(--fs-md); line-height: 1.65; display: flex; flex-direction: column; min-height: 100vh; overflow-x: hidden; } img { max-width: 100%; display: block; } a { color: var(--accent); text-decoration: none; transition: var(--transition); } a:hover { color: var(--accent2); } /* ========================================================== MENUBAR ========================================================== */ .menubar { position: sticky; top: 0; z-index: 20000; background: rgba(255,255,254,.94); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid var(--border); height: var(--menubar-h); display: flex; align-items: center; padding: 0 .75rem; user-select: none; } .apple-stripes { display: flex; gap: 2px; align-items: flex-end; height: 14px; margin-right: .5rem; flex-shrink: 0; } .apple-stripes div { width: 3px; border-radius: 2px; } .as1 { height: 14px; background: var(--apple-g); } .as2 { height: 11px; background: var(--apple-y); } .as3 { height: 13px; background: var(--apple-o); } .as4 { height: 10px; background: var(--apple-r); } .as5 { height: 12px; background: var(--apple-p); } .as6 { height: 9px; background: var(--apple-b); } .mb-logo { font-size: .80rem; font-weight: 800; color: var(--text); padding: 0 .5rem; line-height: var(--menubar-h); white-space: nowrap; border-radius: 4px; } .mb-logo:hover { background: rgba(0,0,0,.06); color: var(--text); } .mb-item { position: relative; height: var(--menubar-h); display: flex; align-items: center; } .mb-trigger { display: flex; align-items: center; height: var(--menubar-h); padding: 0 .55rem; font-size: .74rem; font-weight: 500; color: var(--text); cursor: default; border-radius: 4px; white-space: nowrap; } .mb-item:hover .mb-trigger { background: var(--apple-b); color: #fff; } .mb-dropdown { display: none; position: absolute; top: calc(100% + 1px); left: 0; min-width: 220px; background: rgba(245,244,240,.98); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 6px; box-shadow: 0 8px 30px rgba(0,0,0,.18); padding: .3rem 0; z-index: 20001; } .mb-item:hover .mb-dropdown { display: block; } .mb-dd-item { display: flex; align-items: center; justify-content: space-between; padding: .3rem 1rem; font-size: .78rem; color: var(--text); gap: 1.5rem; white-space: nowrap; } .mb-dd-item:hover { background: var(--apple-b); color: #fff; border-radius: 4px; margin: 0 .3rem; padding: .3rem .7rem; } .mb-dd-item.dim { color: var(--dim); pointer-events: none; } .mb-dd-sep { height: 1px; background: var(--border2); margin: .3rem .5rem; } .mb-dd-shortcut { font-family: var(--fm); font-size: .66rem; color: var(--dim); } .mb-dd-item:hover .mb-dd-shortcut { color: rgba(255,255,255,.75); } .mb-right { margin-left: auto; display: flex; align-items: center; gap: .5rem; } .mb-dyslexic-btn { display: flex; align-items: center; gap: .35rem; background: none; border: none; cursor: pointer; font-family: var(--fm); font-size: .66rem; color: var(--dim); padding: 0 .4rem; height: var(--menubar-h); border-radius: 3px; } .mb-dyslexic-btn:hover { background: rgba(0,0,0,.07); color: var(--text); } body.dyslexic .mb-dyslexic-btn { color: var(--apple-b); } .mb-dy-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--border); flex-shrink: 0; } body.dyslexic .mb-dy-dot { background: var(--apple-b); } /* Hamburger + menu mobile */ .mb-hamburger { display: none; flex-direction: column; justify-content: center; gap: 4px; background: none; border: none; cursor: pointer; padding: 0 .4rem; height: var(--menubar-h); border-radius: 3px; } .mb-hamburger span { display: block; width: 17px; height: 1.5px; background: var(--text); border-radius: 2px; transition: transform .2s, opacity .2s; } .mb-hamburger.open span:nth-child(1) { transform: translateY(5.5px) rotate(45deg); } .mb-hamburger.open span:nth-child(2) { opacity: 0; } .mb-hamburger.open span:nth-child(3) { transform: translateY(-5.5px) rotate(-45deg); } .mb-mobile-menu { display: none; position: fixed; top: var(--menubar-h); left: 0; right: 0; bottom: 0; background: rgba(245,244,240,.98); z-index: 19999; overflow-y: auto; padding: .5rem 0 2rem; border-top: 1px solid var(--border); } .mb-mobile-menu.open { display: block; } .mb-mob-section { padding: .75rem 1rem .25rem; } .mb-mob-label { font-family: var(--fm); font-size: .62rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--dim); padding: 0 .25rem; } .mb-mob-item { display: block; padding: .65rem .5rem; font-size: .92rem; color: var(--text); border-radius: 8px; } .mb-mob-item:hover { background: rgba(0,0,0,.05); color: var(--text); } .mb-mob-sep { height: 1px; background: var(--border2); margin: .5rem 1rem; } @media (max-width: 900px) { .mb-item { display: none; } .mb-hamburger { display: flex; } } /* ========================================================== BUREAU + FENÊTRES ========================================================== */ .page-desktop { padding: 2rem; flex: 1; background: radial-gradient(ellipse 60% 40% at 90% 10%, rgba(224,58,62,.05) 0%, transparent 60%), var(--bg); } .page-window { background: #fff; border: 1px solid var(--border2); border-radius: 12px; box-shadow: 0 8px 32px rgba(0,0,0,.09), 0 2px 6px rgba(0,0,0,.05); overflow: hidden; max-width: 1060px; margin: 0 auto 1.5rem; } .page-win-chrome { background: linear-gradient(to bottom, #F8F7F4, #E8E6E0); border-bottom: 1px solid var(--border2); padding: .5rem .9rem; display: flex; align-items: center; gap: .5rem; user-select: none; } .traffic { display: flex; gap: 5px; } .t-r, .t-y, .t-g { width: 12px; height: 12px; border-radius: 50%; } .t-r { background: #FF5F57; border: 1px solid #E0443E; } .t-y { background: #FEBC2E; border: 1px solid #D9A01C; } .t-g { background: #28C840; border: 1px solid #1BAD2E; } .page-win-title { flex: 1; text-align: center; font-family: var(--fm); font-size: .74rem; font-weight: 600; color: var(--dim); } .page-win-body { padding: 2rem 2.5rem; } .page-statusbar { background: var(--bg2); border-top: 1px solid var(--border2); padding: .38rem 1rem; font-family: var(--fm); font-size: .68rem; color: var(--dim); display: flex; justify-content: space-between; gap: 1rem; } /* ── Titres et fil d'Ariane ── */ .page-breadcrumb { font-size: var(--fs-xs); color: var(--dim); margin-bottom: .75rem; display: flex; gap: .4rem; align-items: center; flex-wrap: wrap; } .page-breadcrumb a { color: var(--text2); } .page-breadcrumb a:hover { color: var(--text); } .page-h1 { font-family: var(--fd); font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 900; letter-spacing: -.03em; line-height: 1.1; color: var(--text); margin-bottom: .6rem; } .page-h1 em { color: var(--labo); font-style: normal; } .page-lead { font-size: var(--fs-sm); color: var(--text2); line-height: 1.75; margin-bottom: 1.25rem; max-width: 560px; } .section-sub { font-size: var(--fs-sm); color: var(--text2); line-height: 1.7; margin-bottom: 1.5rem; max-width: 620px; } .back-link { display: inline-flex; align-items: center; gap: .4rem; font-family: var(--fm); font-size: var(--fs-xs); color: var(--text2); background: var(--bg2); border: 1px solid var(--border2); border-radius: 8px; padding: .4rem .9rem; margin-bottom: 1.25rem; cursor: pointer; } .back-link:hover { background: var(--bg3); color: var(--text); } .rainbow-line { display: flex; height: 3px; border-radius: 2px; overflow: hidden; margin-bottom: 1.75rem; } .rainbow-line div { flex: 1; } /* ── Hero ── */ .hero-layout { display: flex; gap: 3rem; align-items: center; } .hero-text { flex: 1; min-width: 0; } .hero-visual-side { flex: 0 0 160px; display: flex; flex-direction: column; align-items: center; gap: 1rem; } .hero-big-icon { width: 90px; height: 90px; border-radius: 22px; display: flex; align-items: center; justify-content: center; font-size: 2.8rem; background: rgba(224,58,62,.09); box-shadow: 0 4px 18px rgba(224,58,62,.12); } .hero-labo-badge { font-family: var(--fm); font-size: .64rem; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; color: var(--labo); padding: .2rem .65rem; border: 1px solid rgba(224,58,62,.25); border-radius: 99px; background: rgba(224,58,62,.06); } .lecon-meta { display: flex; gap: 1.25rem; flex-wrap: wrap; } .lecon-meta-item { font-family: var(--fm); font-size: var(--fs-xs); color: var(--dim); display: flex; align-items: center; gap: .35rem; } .lecon-meta-item strong { color: var(--c-entree); } /* ========================================================== IMAGES : repli si le fichier n'est pas encore en place ========================================================== */ .img-todo { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .4rem; min-height: 180px; padding: 1.5rem; background: repeating-linear-gradient(45deg, var(--bg2), var(--bg2) 12px, var(--bg3) 12px, var(--bg3) 24px); border: 2px dashed var(--border); border-radius: var(--radius); font-family: var(--fm); font-size: var(--fs-xs); color: var(--text2); text-align: center; } .img-todo strong { color: var(--labo); font-size: var(--fs-sm); } .img-todo span { color: var(--dim); } figure.lecon-figure { margin: 1.25rem auto; max-width: 720px; border: 1px solid var(--border2); border-radius: var(--radius); overflow: hidden; background: var(--bg2); } figure.lecon-figure img { width: 100%; height: auto; } figure.lecon-figure figcaption { font-family: var(--fm); font-size: var(--fs-xs); color: var(--dim); padding: .5rem 1rem; text-align: center; } .figure-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } @media (max-width: 700px) { .figure-duo { grid-template-columns: 1fr; } } /* ========================================================== IMAGE INTERACTIVE (hotspots) ========================================================== */ .periph-img-wrap { position: relative; display: block; max-width: 860px; margin: 0 auto; border-radius: var(--radius); overflow: hidden; box-shadow: 0 4px 24px rgba(0,0,0,.12); border: 1px solid var(--border2); background: var(--bg2); } .periph-img-wrap img { display: block; width: 100%; height: auto; } .hs-dot { position: absolute; transform: translate(-50%, -50%); width: 32px; height: 32px; border-radius: 50%; cursor: pointer; z-index: 10; display: flex; align-items: center; justify-content: center; transition: transform .2s ease; border: 2px solid rgba(255,255,255,.6); } .hs-dot::before { content: ''; position: absolute; inset: 0; border-radius: 50%; animation: hs-pulse 2s ease-out infinite; } .hs-dot.entree { background: rgba(0,157,220,.85); box-shadow: 0 0 0 3px rgba(0,157,220,.25); } .hs-dot.entree::before { background: rgba(0,157,220,.4); } .hs-dot.sortie { background: rgba(245,130,32,.85); box-shadow: 0 0 0 3px rgba(245,130,32,.25); } .hs-dot.sortie::before { background: rgba(245,130,32,.4); } .hs-dot.uc { background: rgba(150,61,151,.85); box-shadow: 0 0 0 3px rgba(150,61,151,.25); } .hs-dot.uc::before { background: rgba(150,61,151,.4); } .hs-dot:hover { transform: translate(-50%,-50%) scale(1.2); } .hs-dot.active { transform: translate(-50%,-50%) scale(1.3); } .hs-dot-icon { font-size: .8rem; position: relative; z-index: 1; } @keyframes hs-pulse { 0% { transform: scale(1); opacity: .8; } 70% { transform: scale(2.2); opacity: 0; } 100% { transform: scale(2.2); opacity: 0; } } .hs-infobox { max-width: 860px; margin: .5rem auto 0; background: var(--bg2); border: 1px solid var(--border2); border-top: 3px solid var(--c-entree); border-radius: 0 0 var(--radius) var(--radius); padding: 1rem 1.25rem; display: none; } .hs-infobox.visible { display: block; } .hs-infobox.cat-sortie { border-top-color: var(--c-sortie); } .hs-infobox.cat-uc { border-top-color: var(--c-uc); } .hs-infobox-header { display: flex; align-items: center; gap: .6rem; margin-bottom: .4rem; } .hs-infobox-emoji { font-size: 1.4rem; flex-shrink: 0; } .hs-infobox-name { font-family: var(--fd); font-size: var(--fs-md); font-weight: 800; color: var(--text); flex: 1; } .hs-infobox-badge { font-family: var(--fm); font-size: .64rem; padding: .15rem .5rem; border-radius: 3px; text-transform: uppercase; letter-spacing: .08em; flex-shrink: 0; } .badge-entree { background: rgba(0,157,220,.1); color: var(--c-entree); border: 1px solid rgba(0,157,220,.25); } .badge-sortie { background: rgba(245,130,32,.1); color: var(--c-sortie); border: 1px solid rgba(245,130,32,.25); } .badge-uc { background: rgba(150,61,151,.1); color: var(--c-uc); border: 1px solid rgba(150,61,151,.25); } .hs-infobox-close { background: none; border: none; color: var(--dim); font-size: 1.1rem; cursor: pointer; padding-left: .75rem; } .hs-infobox-close:hover { color: var(--text); } .hs-infobox-desc { font-size: var(--fs-sm); color: var(--text2); line-height: 1.65; margin-bottom: .35rem; } .hs-infobox-detail { font-family: var(--fm); font-size: var(--fs-xs); color: var(--dim); font-style: italic; } .hs-hint { text-align: center; font-family: var(--fm); font-size: var(--fs-xs); color: var(--dim); margin-top: .75rem; } /* ========================================================== CARTES CATÉGORIES ========================================================== */ .cat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1rem; } .cat-card { background: var(--bg); border: 1px solid var(--border2); border-radius: 10px; padding: 1.25rem 1.4rem; position: relative; overflow: hidden; } .cat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; } .cat-card.entree::before { background: var(--c-entree); } .cat-card.sortie::before { background: var(--c-sortie); } .cat-card.uc::before { background: var(--c-uc); } .cat-card-header { display: flex; align-items: center; gap: .75rem; margin-bottom: .85rem; } .cat-card-icon { font-size: 1.75rem; } .cat-card-title { font-family: var(--fd); font-size: var(--fs-sm); font-weight: 800; color: var(--text); } .cat-card-subtitle { font-family: var(--fm); font-size: var(--fs-xs); margin-top: .1rem; } .cat-card.entree .cat-card-subtitle { color: var(--c-entree); } .cat-card.sortie .cat-card-subtitle { color: var(--c-sortie); } .cat-card.uc .cat-card-subtitle { color: var(--c-uc); } .cat-card-def { font-size: var(--fs-sm); color: var(--text2); line-height: 1.65; margin-bottom: 1rem; } .cat-item-list { list-style: none; display: flex; flex-direction: column; gap: .4rem; } .cat-item { display: flex; align-items: flex-start; gap: .6rem; font-size: var(--fs-sm); color: var(--text2); } .cat-item-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; margin-top: .45em; } .cat-item-text { flex: 1; line-height: 1.55; } .entree .cat-item-dot { background: var(--c-entree); } .sortie .cat-item-dot { background: var(--c-sortie); } .uc .cat-item-dot { background: var(--c-uc); } .cat-item strong { color: var(--text); } /* ========================================================== GRILLE DE CARTES (hub vocabulaire / accueil) ========================================================== */ .notion-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 1rem; } .notion-card { background: var(--white); border: 1px solid var(--border2); border-radius: var(--radius-lg); padding: 1.25rem; cursor: pointer; text-align: left; width: 100%; font-family: var(--ft); color: inherit; box-shadow: var(--shadow-sm); transition: var(--transition); position: relative; overflow: hidden; } .notion-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--card-color, var(--accent)); opacity: 0; transition: var(--transition); } .notion-card:hover { transform: translateY(-3px); border-color: var(--card-color, var(--accent)); box-shadow: var(--shadow); } .notion-card:hover::before { opacity: 1; } .notion-card-icon { font-size: 2rem; display: block; margin-bottom: .6rem; } .notion-card-title { font-family: var(--fd); font-size: var(--fs-md); font-weight: 700; color: var(--text); margin-bottom: .25rem; } .notion-card-desc { font-size: var(--fs-sm); color: var(--text2); line-height: 1.5; } .notion-card-tag { display: inline-block; margin-top: .7rem; font-family: var(--fm); font-size: .62rem; letter-spacing: .1em; text-transform: uppercase; color: var(--card-color, var(--accent)); border: 1px solid var(--card-color, var(--accent)); border-radius: 4px; padding: .1rem .45rem; opacity: .8; } /* ========================================================== CONTENU D'UNE CARTE ========================================================== */ .carte-title { font-family: var(--fd); font-size: var(--fs-2xl); font-weight: 900; color: var(--text); letter-spacing: -.02em; padding-left: .8rem; border-left: 4px solid var(--labo); margin-bottom: 1.25rem; display: flex; align-items: center; gap: .5rem; } .carte-intro { font-size: var(--fs-md); color: var(--text2); line-height: 1.8; margin-bottom: 1.25rem; } .carte-h3 { font-family: var(--fd); font-size: var(--fs-lg); font-weight: 800; color: var(--accent); margin: 1.75rem 0 .9rem; } .carte-list { list-style: none; display: flex; flex-direction: column; gap: .55rem; margin-bottom: 1rem; } .carte-list li { display: flex; align-items: flex-start; gap: .65rem; font-size: var(--fs-md); color: var(--text2); line-height: 1.6; } .carte-list li::before { content: '●'; color: var(--labo); font-size: .6rem; margin-top: .55em; flex-shrink: 0; } .carte-list strong { color: var(--text); } code, .kbd, .term { font-family: var(--fm); font-size: .88em; border-radius: 5px; padding: .12em .45em; } .term { background: rgba(245,130,32,.10); color: var(--apple-o); border: 1px solid rgba(245,130,32,.28); } .kbd { background: var(--bg2); color: var(--text); border: 1px solid var(--border); box-shadow: 0 1px 0 var(--border); } .callout { display: flex; gap: .9rem; align-items: flex-start; padding: 1rem 1.25rem; border-radius: var(--radius); border-left: 4px solid; margin: 1.25rem 0; font-size: var(--fs-md); color: var(--text2); line-height: 1.7; } .callout .callout-icon { font-size: 1.3rem; flex-shrink: 0; } .callout.tip { background: rgba(97,187,70,.08); border-color: var(--apple-g); } .callout.info { background: rgba(0,157,220,.07); border-color: var(--apple-b); } .callout.warning { background: rgba(253,184,39,.10); border-color: var(--apple-y); } .callout strong { color: var(--text); } /* ========================================================== EXERCICES — commun ========================================================== */ .exo-num { font-family: var(--fm); font-size: .64rem; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; color: var(--labo); margin-bottom: .3rem; } .exo-title { font-family: var(--fd); font-size: var(--fs-md); font-weight: 800; color: var(--text); margin-bottom: .3rem; } .exo-desc { font-size: var(--fs-sm); color: var(--text2); line-height: 1.6; margin-bottom: 1.5rem; } .exo-btn { display: inline-flex; align-items: center; gap: .5rem; font-family: var(--fm); font-size: var(--fs-sm); padding: .55rem 1.2rem; border-radius: var(--radius); border: none; cursor: pointer; transition: filter .15s; } .exo-btn-primary { background: var(--labo); color: #fff; font-weight: 600; } .exo-btn-primary:hover { filter: brightness(1.1); } .exo-btn-reset { background: var(--bg2); color: var(--text2); border: 1px solid var(--border2); } .exo-btn-reset:hover { background: var(--bg3); color: var(--text); } .exo-actions { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; margin-top: 1rem; } .exo-feedback { margin-top: 1rem; padding: .85rem 1.1rem; border-radius: var(--radius); font-size: var(--fs-sm); line-height: 1.6; display: none; } .exo-feedback.success { background: rgba(97,187,70,.08); border: 1px solid rgba(97,187,70,.3); color: #16a34a; display: block; } .exo-feedback.error { background: rgba(224,58,62,.07); border: 1px solid rgba(224,58,62,.25); color: var(--c-err); display: block; } .exo-feedback.partial { background: rgba(253,184,39,.08); border: 1px solid rgba(253,184,39,.3); color: #b45309; display: block; } /* ── Glisser-déposer ── */ .dd-items-pool { display: flex; flex-wrap: wrap; gap: .6rem; padding: 1rem; background: var(--bg2); border: 1px dashed var(--border); border-radius: var(--radius); min-height: 64px; margin-bottom: 1.25rem; } .dd-item, .dd-item-placed { display: flex; align-items: center; gap: .45rem; font-family: var(--fm); font-size: var(--fs-sm); color: var(--text); background: #fff; border: 1px solid var(--border2); border-radius: 6px; padding: .35rem .75rem; cursor: grab; user-select: none; box-shadow: 0 1px 3px rgba(0,0,0,.07); } .dd-item:active, .dd-item-placed:active { cursor: grabbing; opacity: .6; } .dd-item.dragging { opacity: .4; } .dd-item.correct { border-color: rgba(97,187,70,.6); background: rgba(97,187,70,.08); } .dd-item.incorrect { border-color: rgba(224,58,62,.5); background: rgba(224,58,62,.07); } .dd-item.dd-selected, .dd-item-placed.dd-selected { border-color: var(--c-entree); background: rgba(0,157,220,.10); box-shadow: 0 0 0 2px rgba(0,157,220,.3); } .dd-zones { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 1.25rem; } .dd-zone { min-height: 120px; padding: .75rem; border-radius: var(--radius); border: 2px dashed; display: flex; flex-direction: column; gap: .5rem; transition: background .15s; } .dd-zone-label { font-family: var(--fd); font-size: var(--fs-xs); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; text-align: center; margin-bottom: .2rem; } .dd-zone.entree { border-color: rgba(0,157,220,.35); } .dd-zone.entree .dd-zone-label { color: var(--c-entree); } .dd-zone.sortie { border-color: rgba(245,130,32,.35); } .dd-zone.sortie .dd-zone-label { color: var(--c-sortie); } .dd-zone.dragover { background: rgba(0,157,220,.05); border-color: rgba(0,157,220,.6); } .dd-zone.sortie.dragover { background: rgba(245,130,32,.05); border-color: rgba(245,130,32,.6); } .dd-zone-empty { font-family: var(--fm); font-size: var(--fs-xs); color: var(--dim); text-align: center; margin: auto; font-style: italic; } .dd-zone.dd-zone-ready { border-style: solid; } .dd-select-hint { font-family: var(--fm); font-size: var(--fs-xs); color: var(--c-entree); text-align: center; margin: .5rem 0 .75rem; } /* ── Texte à trou ── */ .tt-pool { display: flex; flex-wrap: wrap; gap: .6rem; padding: 1.1rem; background: var(--bg2); border: 1px solid var(--border2); border-radius: var(--radius); min-height: 60px; margin-bottom: 1.25rem; } .tt-text { background: var(--bg2); border: 1px solid var(--border2); border-radius: var(--radius); padding: 1.5rem; font-size: var(--fs-md); color: var(--text2); line-height: 3.2; } .tt-blank { display: inline-flex; align-items: center; justify-content: center; min-width: 150px; height: 2.2rem; padding: 0 .6rem; background: #fff; border: 1px solid var(--border2); border-bottom: 2px dashed var(--apple-o); border-radius: 6px; vertical-align: middle; font-family: var(--fm); font-size: var(--fs-sm); color: var(--text); cursor: pointer; } .tt-blank.empty::after { content: '…'; color: var(--dim); } .tt-blank.dragover { background: rgba(0,157,220,.07); border-color: var(--c-entree); } .tt-blank.correct { border-color: var(--apple-g); background: rgba(97,187,70,.10); border-bottom-style: solid; } .tt-blank.incorrect { border-color: var(--apple-r); background: rgba(224,58,62,.08); border-bottom-style: solid; } .tt-blank.ready { border-color: var(--c-entree); } /* ── QCM ── */ .qcm-list { display: flex; flex-direction: column; gap: 1.25rem; } .qcm-q { background: var(--bg); border: 1px solid var(--border2); border-radius: 10px; padding: 1.1rem 1.25rem; } .qcm-q-num { font-family: var(--fm); font-size: .64rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--labo); margin-bottom: .3rem; } .qcm-q-enonce { font-size: var(--fs-sm); color: var(--text); line-height: 1.6; margin-bottom: .85rem; font-weight: 600; } .qcm-opts { display: flex; flex-direction: column; gap: .45rem; } .qcm-opt { display: flex; align-items: flex-start; gap: .7rem; font-size: var(--fs-sm); color: var(--text2); cursor: pointer; padding: .5rem .65rem; border-radius: 8px; border: 1px solid var(--border2); background: #fff; width: 100%; transition: background .15s, border-color .15s; } .qcm-opt:hover { background: var(--bg2); border-color: var(--border); } .qcm-opt-letter { min-width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--border); display: flex; align-items: center; justify-content: center; font-family: var(--fm); font-size: .64rem; color: var(--dim); flex-shrink: 0; margin-top: .05rem; } .qcm-opt.selected { border-color: rgba(0,157,220,.35); color: var(--text); } .qcm-opt.selected .qcm-opt-letter { border-color: var(--c-entree); background: rgba(0,157,220,.12); color: var(--c-entree); } .qcm-opt.correct { border-color: rgba(97,187,70,.4); background: rgba(97,187,70,.05); color: var(--text); } .qcm-opt.correct .qcm-opt-letter { border-color: var(--c-ok); background: rgba(97,187,70,.15); color: #16a34a; } .qcm-opt.wrong { border-color: rgba(224,58,62,.35); } .qcm-opt.wrong .qcm-opt-letter { border-color: var(--c-err); background: rgba(224,58,62,.12); color: var(--c-err); } .qcm-expl { margin-top: .6rem; padding: .5rem .75rem; border-radius: 6px; font-size: var(--fs-xs); line-height: 1.55; display: none; } .qcm-expl.show { display: block; } .qcm-expl.ok { background: rgba(97,187,70,.08); color: #16a34a; border: 1px solid rgba(97,187,70,.25); } .qcm-expl.ko { background: rgba(224,58,62,.06); color: var(--c-err); border: 1px solid rgba(224,58,62,.2); } .qcm-submit-row { margin-top: 1.5rem; display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; } .qcm-score { font-family: var(--fd); font-size: var(--fs-md); font-weight: 800; color: var(--text); display: none; } .score-col-good { color: #16a34a; } .score-col-mid { color: var(--c-entree); } .score-col-bad { color: var(--c-err); } /* ========================================================== FOOTER ========================================================== */ footer { background: var(--bg2); border-top: 1px solid var(--border2); padding: 1.1rem 2rem; margin-top: auto; } .footer-inner { max-width: 1060px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; } .footer-logo { font-family: var(--fd); font-size: var(--fs-lg); font-weight: 800; letter-spacing: -.02em; line-height: 1; } .footer-copy { font-size: var(--fs-xs); color: var(--dim); } .footer-links { display: flex; gap: 1.5rem; list-style: none; flex-wrap: wrap; } .footer-links a { font-size: var(--fs-xs); color: var(--dim); } .footer-links a:hover { color: var(--text); } /* ========================================================== RESPONSIVE ========================================================== */ @media (max-width: 768px) { .page-desktop { padding: 1rem; } .page-win-body { padding: 1.25rem; } .hero-layout { flex-direction: column; } .hero-visual-side { display: none; } .cat-grid, .dd-zones { grid-template-columns: 1fr; } .notion-grid { grid-template-columns: 1fr 1fr; } .hs-dot { width: 26px; height: 26px; } .hs-dot-icon { font-size: .7rem; } .tt-text { line-height: 2.8; } .footer-inner { flex-direction: column; align-items: flex-start; } } @media (max-width: 480px) { .notion-grid { grid-template-columns: 1fr; } } /* ========================================================== TABLEAUX DE COURS ========================================================== */ .cours-table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); margin: 1rem 0 1.25rem; border: 1px solid var(--border2); border-radius: var(--radius); overflow: hidden; } .cours-table th { background: var(--bg2); color: var(--text); font-family: var(--fd); font-size: var(--fs-xs); font-weight: 800; text-align: left; padding: .6rem .9rem; border-bottom: 1px solid var(--border2); } .cours-table td { padding: .55rem .9rem; color: var(--text2); border-bottom: 1px solid var(--border2); line-height: 1.55; } .cours-table tr:last-child td { border-bottom: none; } .cours-table tr:hover td { background: var(--bg); color: var(--text); } .cours-table strong { color: var(--text); } /* Schéma entrée → traitement → sortie */ .flux { display: flex; align-items: stretch; gap: .75rem; margin: 1.25rem 0; flex-wrap: wrap; } .flux-etape { flex: 1; min-width: 150px; border: 1px solid var(--border2); border-radius: 10px; padding: 1rem; text-align: center; background: var(--bg); position: relative; } .flux-etape::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; } .flux-etape.e::before { background: var(--c-entree); } .flux-etape.t::before { background: var(--c-uc); } .flux-etape.s::before { background: var(--c-sortie); } .flux-icone { font-size: 1.8rem; display: block; margin-bottom: .4rem; } .flux-titre { font-family: var(--fd); font-size: var(--fs-sm); font-weight: 800; color: var(--text); margin-bottom: .25rem; } .flux-etape.e .flux-titre { color: var(--c-entree); } .flux-etape.t .flux-titre { color: var(--c-uc); } .flux-etape.s .flux-titre { color: var(--c-sortie); } .flux-desc { font-size: var(--fs-xs); color: var(--text2); line-height: 1.5; } .flux-fleche { display: flex; align-items: center; color: var(--dim); font-size: 1.3rem; flex: 0 0 auto; } @media (max-width: 700px) { .flux-fleche { display: none; } }