CoolFace
Apppublic

MAALOUFimad02/Machine_Learning_Training

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
feedback.html1150 linesDownload Raw Back to root
1<!DOCTYPE html>2<html lang="fr">3<head>4  <meta charset="UTF-8">5  <meta name="viewport" content="width=device-width, initial-scale=1.0">6  <title>Questions & Feedback — ML Academy</title>7  <link rel="stylesheet" href="css/shared.css">8  <style>9    /* PAGE HERO */10    .feedback-hero {11      background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);12      border-bottom: 1px solid var(--border-color);13      padding: var(--space-3xl) var(--space-xl);14      text-align: center;15    }16 17    .feedback-hero-label {18      font-family: 'JetBrains Mono', monospace;19      font-size: 0.75rem;20      color: var(--secondary);21      text-transform: uppercase;22      letter-spacing: 2px;23      margin-bottom: var(--space-md);24    }25 26    .feedback-hero-title {27      font-size: clamp(2rem, 5vw, 3rem);28      font-weight: 700;29      color: var(--text-primary);30      margin-bottom: var(--space-md);31    }32 33    .feedback-hero-subtitle {34      font-size: 1.1rem;35      color: var(--text-secondary);36      max-width: 600px;37      margin: 0 auto;38    }39 40    /* FEEDBACK CONTAINER */41    .feedback-container {42      max-width: 800px;43      margin: 0 auto;44      padding: var(--space-2xl) var(--space-xl);45    }46 47    /* FORM PROGRESS */48    .form-progress {49      display: flex;50      gap: var(--space-sm);51      margin-bottom: var(--space-xl);52    }53 54    .progress-step {55      flex: 1;56      height: 4px;57      background: var(--bg-tertiary);58      border-radius: 2px;59      transition: background var(--transition-base);60    }61 62    .progress-step.active {63      background: linear-gradient(90deg, var(--primary), var(--secondary));64    }65 66    /* FORM CARDS */67    .form-card {68      background: var(--bg-card);69      border: 1px solid var(--border-color);70      border-radius: var(--radius-lg);71      overflow: hidden;72      margin-bottom: var(--space-lg);73      transition: all var(--transition-base);74    }75 76    .form-card:hover {77      border-color: var(--border-light);78    }79 80    .form-card-header {81      display: flex;82      align-items: center;83      gap: var(--space-md);84      padding: var(--space-lg) var(--space-xl);85      background: var(--bg-tertiary);86      border-bottom: 1px solid var(--border-color);87    }88 89    .form-card-icon {90      width: 36px;91      height: 36px;92      background: linear-gradient(135deg, var(--primary), var(--secondary));93      border-radius: var(--radius-md);94      display: flex;95      align-items: center;96      justify-content: center;97      font-size: 1rem;98      font-weight: 700;99      color: white;100    }101 102    .form-card-title {103      font-size: 1.1rem;104      font-weight: 600;105      color: var(--text-primary);106    }107 108    .form-card-body {109      padding: var(--space-xl);110    }111 112    /* FORM ELEMENTS */113    .form-row {114      margin-bottom: var(--space-lg);115    }116 117    .form-row:last-child {118      margin-bottom: 0;119    }120 121    .form-label {122      display: block;123      font-size: 0.85rem;124      font-weight: 500;125      color: var(--text-primary);126      margin-bottom: var(--space-sm);127    }128 129    .form-label .required {130      color: var(--danger);131      margin-left: var(--space-xs);132    }133 134    .form-label .hint {135      font-size: 0.75rem;136      color: var(--text-muted);137      font-weight: 400;138      margin-left: var(--space-sm);139    }140 141    /* STAR RATING */142    .star-rating {143      display: flex;144      gap: var(--space-sm);145    }146 147    .star {148      font-size: 2rem;149      cursor: pointer;150      transition: all var(--transition-fast);151      filter: grayscale(1);152      opacity: 0.4;153    }154 155    .star:hover,156    .star.active {157      filter: grayscale(0);158      opacity: 1;159      transform: scale(1.2);160    }161 162    .star-rating-text {163      font-size: 0.85rem;164      color: var(--text-muted);165      margin-left: var(--space-md);166      align-self: center;167    }168 169    /* DIFFICULTY BUTTONS */170    .difficulty-buttons {171      display: flex;172      gap: var(--space-sm);173      flex-wrap: wrap;174    }175 176    .difficulty-btn {177      padding: var(--space-sm) var(--space-md);178      background: var(--bg-tertiary);179      border: 1px solid var(--border-color);180      border-radius: var(--radius-md);181      color: var(--text-secondary);182      font-size: 0.9rem;183      cursor: pointer;184      transition: all var(--transition-base);185    }186 187    .difficulty-btn:hover {188      border-color: var(--primary);189      color: var(--text-primary);190    }191 192    .difficulty-btn.selected {193      background: rgba(99, 102, 241, 0.2);194      border-color: var(--primary);195      color: var(--primary-light);196    }197 198    /* RADIO & CHECKBOX GROUPS */199    .radio-group,200    .checkbox-group {201      display: flex;202      flex-direction: column;203      gap: var(--space-sm);204    }205 206    .radio-option,207    .checkbox-option {208      display: flex;209      align-items: flex-start;210      gap: var(--space-md);211      padding: var(--space-md);212      background: var(--bg-tertiary);213      border: 1px solid var(--border-color);214      border-radius: var(--radius-md);215      cursor: pointer;216      transition: all var(--transition-base);217    }218 219    .radio-option:hover,220    .checkbox-option:hover {221      border-color: var(--primary);222      background: var(--bg-hover);223    }224 225    .radio-option input,226    .checkbox-option input {227      margin-top: 2px;228      accent-color: var(--primary);229      width: 18px;230    }231 232    .radio-label,233    .checkbox-label {234      font-size: 0.9rem;235      color: var(--text-secondary);236    }237 238    /* SUBMIT BUTTON */239    .submit-btn {240      width: 100%;241      padding: var(--space-md);242      background: linear-gradient(135deg, var(--primary), var(--primary-dark));243      color: white;244      border: none;245      border-radius: var(--radius-md);246      font-family: 'Inter', sans-serif;247      font-size: 1rem;248      font-weight: 600;249      cursor: pointer;250      transition: all var(--transition-base);251      display: flex;252      align-items: center;253      justify-content: center;254      gap: var(--space-sm);255    }256 257    .submit-btn:hover {258      transform: translateY(-2px);259      box-shadow: var(--shadow-glow);260    }261 262    .submit-btn:disabled {263      opacity: 0.6;264      cursor: not-allowed;265      transform: none;266    }267 268    /* SUCCESS MESSAGE */269    .success-message {270      display: none;271      background: rgba(16, 185, 129, 0.1);272      border: 1px solid rgba(16, 185, 129, 0.3);273      border-radius: var(--radius-lg);274      padding: var(--space-3xl);275      text-align: center;276      animation: scaleIn 0.5s ease;277    }278 279    .success-message.show {280      display: block;281    }282 283    .success-icon {284      width: 60px;285      height: 60px;286      background: linear-gradient(135deg, var(--success), #059669);287      border-radius: 50%;288      display: flex;289      align-items: center;290      justify-content: center;291      font-size: 1.5rem;292      font-weight: 700;293      color: white;294      margin: 0 auto var(--space-md);295      animation: bounce 1s ease infinite;296    }297 298    .success-title {299      font-size: 1.5rem;300      font-weight: 700;301      color: var(--success);302      margin-bottom: var(--space-sm);303    }304 305    .success-text {306      font-size: 1rem;307      color: var(--text-secondary);308      margin-bottom: var(--space-xl);309    }310 311    /* DATA EXPORT SECTION */312    .export-section {313      background: var(--bg-card);314      border: 1px solid var(--border-color);315      border-radius: var(--radius-lg);316      padding: var(--space-xl);317      margin-top: var(--space-xl);318    }319 320    .export-title {321      font-size: 1rem;322      font-weight: 600;323      color: var(--text-primary);324      margin-bottom: var(--space-md);325    }326 327    .export-buttons {328      display: flex;329      gap: var(--space-md);330      flex-wrap: wrap;331    }332 333    .export-btn {334      display: flex;335      align-items: center;336      gap: var(--space-sm);337      padding: var(--space-sm) var(--space-md);338      background: var(--bg-tertiary);339      border: 1px solid var(--border-color);340      border-radius: var(--radius-md);341      color: var(--text-secondary);342      font-size: 0.85rem;343      cursor: pointer;344      transition: all var(--transition-base);345      text-decoration: none;346    }347 348    .export-btn:hover {349      border-color: var(--primary);350      color: var(--text-primary);351    }352 353    /* FAQ SECTION */354    .faq-section {355      margin-top: var(--space-3xl);356    }357 358    .faq-header {359      text-align: center;360      margin-bottom: var(--space-xl);361    }362 363    .faq-title {364      font-size: 1.5rem;365      font-weight: 700;366      color: var(--text-primary);367      margin-bottom: var(--space-sm);368    }369 370    .faq-subtitle {371      font-size: 0.95rem;372      color: var(--text-secondary);373    }374 375    .faq-item {376      background: var(--bg-card);377      border: 1px solid var(--border-color);378      border-radius: var(--radius-md);379      margin-bottom: var(--space-md);380      overflow: hidden;381      transition: all var(--transition-base);382    }383 384    .faq-item:hover {385      border-color: var(--border-light);386    }387 388    .faq-question {389      display: flex;390      justify-content: space-between;391      align-items: center;392      padding: var(--space-lg) var(--space-xl);393      cursor: pointer;394      background: var(--bg-tertiary);395      transition: background var(--transition-base);396    }397 398    .faq-question:hover {399      background: var(--bg-hover);400    }401 402    .faq-question-text {403      font-size: 0.95rem;404      font-weight: 500;405      color: var(--text-primary);406    }407 408    .faq-arrow {409      color: var(--primary);410      transition: transform var(--transition-base);411    }412 413    .faq-item.open .faq-arrow {414      transform: rotate(180deg);415    }416 417    .faq-answer {418      max-height: 0;419      overflow: hidden;420      transition: max-height var(--transition-slow);421    }422 423    .faq-item.open .faq-answer {424      max-height: 500px;425    }426 427    .faq-answer-content {428      padding: var(--space-lg) var(--space-xl);429      font-size: 0.9rem;430      color: var(--text-secondary);431      line-height: 1.7;432      border-top: 1px solid var(--border-color);433    }434 435    .faq-answer-content code {436      background: rgba(99, 102, 241, 0.1);437      padding: 2px 6px;438      border-radius: 4px;439      font-family: 'JetBrains Mono', monospace;440      font-size: 0.8rem;441      color: var(--primary-light);442    }443 444    /* CONTACT INFO */445    .contact-info {446      display: grid;447      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));448      gap: var(--space-lg);449      margin-top: var(--space-2xl);450      padding-top: var(--space-2xl);451      border-top: 1px solid var(--border-color);452    }453 454    .contact-item {455      text-align: center;456      padding: var(--space-lg);457      background: var(--bg-card);458      border: 1px solid var(--border-color);459      border-radius: var(--radius-md);460      transition: all var(--transition-base);461    }462 463    .contact-item:hover {464      border-color: var(--primary);465      transform: translateY(-3px);466    }467 468    .contact-icon {469      width: 40px;470      height: 40px;471      background: linear-gradient(135deg, var(--primary), var(--secondary));472      border-radius: var(--radius-md);473      display: flex;474      align-items: center;475      justify-content: center;476      font-size: 1rem;477      font-weight: 700;478      color: white;479      margin: 0 auto var(--space-sm);480    }481 482    .contact-label {483      font-size: 0.85rem;484      font-weight: 600;485      color: var(--text-primary);486      margin-bottom: var(--space-xs);487    }488 489    .contact-value {490      font-size: 0.8rem;491      color: var(--text-muted);492    }493 494    .contact-link {495      color: var(--primary-light);496      text-decoration: none;497    }498 499    .contact-link:hover {500      text-decoration: underline;501    }502 503    /* AUTHOR FOOTER */504    .author-footer {505      background: var(--bg-secondary);506      border-top: 1px solid var(--border-color);507      padding: var(--space-xl);508      text-align: center;509    }510 511    .author-info {512      display: flex;513      justify-content: center;514      gap: var(--space-xl);515      flex-wrap: wrap;516      margin-bottom: var(--space-md);517    }518 519    .author-link {520      display: flex;521      align-items: center;522      gap: var(--space-sm);523      color: var(--text-secondary);524      text-decoration: none;525      font-size: 0.9rem;526      transition: color var(--transition-base);527    }528 529    .author-link:hover {530      color: var(--primary-light);531    }532 533    .author-link svg {534      width: 18px;535      height: 18px;536      fill: currentColor;537    }538  </style>539</head>540<body>541  <!-- Particles Background -->542  <div class="particles-container">543    <div class="particle"></div>544    <div class="particle"></div>545    <div class="particle"></div>546    <div class="particle"></div>547    <div class="particle"></div>548  </div>549 550  <!-- Navigation -->551  <nav class="navbar">552    <a href="index.html" class="navbar-brand">553      <div class="brand-logo">ML</div>554      <span>ML Academy</span>555    </a>556    <div class="navbar-nav">557      <a href="index.html" class="nav-link">558        <span class="nav-icon">[H]</span>559        <span>Accueil</span>560      </a>561      <a href="cours.html" class="nav-link">562        <span class="nav-icon">[C]</span>563        <span>Cours</span>564      </a>565      <a href="tp.html" class="nav-link">566        <span class="nav-icon">[T]</span>567        <span>TPs</span>568      </a>569      <a href="feedback.html" class="nav-link active">570        <span class="nav-icon">[F]</span>571        <span>Contact</span>572      </a>573    </div>574    <div class="nav-badge">575      <div class="dot"></div>576      <span>Google Colab Ready</span>577    </div>578  </nav>579 580  <!-- Page Wrapper -->581  <div class="page-wrapper">582    <!-- Hero -->583    <section class="feedback-hero">584      <div class="feedback-hero-label">Retours & Questions</div>585      <h1 class="feedback-hero-title">Questions & Feedback</h1>586      <p class="feedback-hero-subtitle">587        Un point pas clair ? Une suggestion d'amelioration ? 588        Nous sommes la pour vous aider et ameliorer la formation.589      </p>590    </section>591 592    <!-- Feedback Container -->593    <div class="feedback-container">594      595      <!-- Success Message -->596      <div class="success-message" id="successMessage">597        <div class="success-icon">OK</div>598        <h2 class="success-title">Merci pour votre retour !</h2>599        <p class="success-text">600          Vos reponses ont ete enregistrees. Nous les analyserons et vous repondrons 601          dans les plus brefs delais.602        </p>603        <a href="index.html" class="btn btn-outline">Retour a l'accueil</a>604      </div>605 606      <!-- Form -->607      <form id="feedbackForm">608        <!-- Progress -->609        <div class="form-progress">610          <div class="progress-step active"></div>611          <div class="progress-step"></div>612          <div class="progress-step"></div>613        </div>614 615        <!-- Card 1: Identification -->616        <div class="form-card scroll-animate">617          <div class="form-card-header">618            <div class="form-card-icon">I</div>619            <h2 class="form-card-title">Identification <span style="font-size: 0.8rem; color: var(--text-muted); font-weight: 400;">(optionnel)</span></h2>620          </div>621          <div class="form-card-body">622            <div style="display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-md);">623              <div class="form-row">624                <label class="form-label">Prenom / Nom</label>625                <input type="text" class="form-input" placeholder="Ex: Jean Dupont" id="name">626              </div>627              <div class="form-row">628                <label class="form-label">Email</label>629                <input type="email" class="form-input" placeholder="jean@example.com" id="email">630              </div>631            </div>632            <div class="form-row" style="margin-bottom: 0;">633              <label class="form-label">Sujet de projet</label>634              <select class="form-select" id="project">635                <option value="">— Selectionner —</option>636                <option value="classification">Classification</option>637                <option value="regression">Regression</option>638                <option value="nlp">NLP / Texte</option>639                <option value="computer-vision">Computer Vision</option>640                <option value="time-series">Series Temporelles</option>641                <option value="other">Autre</option>642              </select>643            </div>644          </div>645        </div>646 647        <!-- Card 2: Evaluation -->648        <div class="form-card scroll-animate">649          <div class="form-card-header">650            <div class="form-card-icon">E</div>651            <h2 class="form-card-title">Evaluation de la formation</h2>652          </div>653          <div class="form-card-body">654            <div class="form-row">655              <label class="form-label">Note globale <span class="required">*</span></label>656              <div style="display: flex; align-items: center;">657                <div class="star-rating" id="starRating">658                  <span class="star" data-value="1">*</span>659                  <span class="star" data-value="2">*</span>660                  <span class="star" data-value="3">*</span>661                  <span class="star" data-value="4">*</span>662                  <span class="star" data-value="5">*</span>663                </div>664                <span class="star-rating-text" id="ratingText">Cliquez pour noter</span>665              </div>666              <input type="hidden" id="ratingValue" value="0">667            </div>668 669            <div class="form-row">670              <label class="form-label">Niveau de difficulte <span class="required">*</span></label>671              <div class="difficulty-buttons" id="difficultyButtons">672                <button type="button" class="difficulty-btn" data-value="tres-facile">Tres facile</button>673                <button type="button" class="difficulty-btn" data-value="facile">Facile</button>674                <button type="button" class="difficulty-btn" data-value="adapte">Adapte</button>675                <button type="button" class="difficulty-btn" data-value="difficile">Difficile</button>676                <button type="button" class="difficulty-btn" data-value="tres-difficile">Trop difficile</button>677              </div>678              <input type="hidden" id="difficultyValue" value="">679            </div>680 681            <div class="form-row" style="margin-bottom: 0;">682              <label class="form-label">Rythme de la formation</label>683              <div class="radio-group">684                <label class="radio-option">685                  <input type="radio" name="rythme" value="trop-lent">686                  <span class="radio-label">Trop lent — on aurait pu aller plus vite</span>687                </label>688                <label class="radio-option">689                  <input type="radio" name="rythme" value="bien" checked>690                  <span class="radio-label">Bien rythme — equilibre parfait</span>691                </label>692                <label class="radio-option">693                  <input type="radio" name="rythme" value="trop-rapide">694                  <span class="radio-label">Trop rapide — difficile a suivre</span>695                </label>696              </div>697            </div>698          </div>699        </div>700 701        <!-- Card 3: Content -->702        <div class="form-card scroll-animate">703          <div class="form-card-header">704            <div class="form-card-icon">C</div>705            <h2 class="form-card-title">Contenu de la formation</h2>706          </div>707          <div class="form-card-body">708            <div class="form-row">709              <label class="form-label">Parties les plus utiles <span class="hint">(plusieurs choix possibles)</span></label>710              <div class="checkbox-group">711                <label class="checkbox-option">712                  <input type="checkbox" name="utile" value="preprocessing">713                  <span class="checkbox-label">Pretraitement des donnees</span>714                </label>715                <label class="checkbox-option">716                  <input type="checkbox" name="utile" value="regression">717                  <span class="checkbox-label">Regression Lineaire & Logistique</span>718                </label>719                <label class="checkbox-option">720                  <input type="checkbox" name="utile" value="randomforest">721                  <span class="checkbox-label">Random Forest & XGBoost</span>722                </label>723                <label class="checkbox-option">724                  <input type="checkbox" name="utile" value="neuralnets">725                  <span class="checkbox-label">Reseaux de Neurones (Keras)</span>726                </label>727                <label class="checkbox-option">728                  <input type="checkbox" name="utile" value="lstm">729                  <span class="checkbox-label">LSTM & Series Temporelles</span>730                </label>731                <label class="checkbox-option">732                  <input type="checkbox" name="utile" value="cnn">733                  <span class="checkbox-label">CNN & Computer Vision</span>734                </label>735                <label class="checkbox-option">736                  <input type="checkbox" name="utile" value="nlp">737                  <span class="checkbox-label">NLP & Transformers</span>738                </label>739                <label class="checkbox-option">740                  <input type="checkbox" name="utile" value="tps">741                  <span class="checkbox-label">Travaux Pratiques (TPs)</span>742                </label>743              </div>744            </div>745 746            <div class="form-row" style="margin-bottom: 0;">747              <label class="form-label">Points difficiles a comprendre</label>748              <div class="checkbox-group">749                <label class="checkbox-option">750                  <input type="checkbox" name="difficile" value="overfitting">751                  <span class="checkbox-label">Overfitting / Underfitting</span>752                </label>753                <label class="checkbox-option">754                  <input type="checkbox" name="difficile" value="normalisation">755                  <span class="checkbox-label">Normalisation et Data Leakage</span>756                </label>757                <label class="checkbox-option">758                  <input type="checkbox" name="difficile" value="hyperparameters">759                  <span class="checkbox-label">Choix des hyperparametres</span>760                </label>761                <label class="checkbox-option">762                  <input type="checkbox" name="difficile" value="lstm-gates">763                  <span class="checkbox-label">Les portes du LSTM</span>764                </label>765                <label class="checkbox-option">766                  <input type="checkbox" name="difficile" value="backprop">767                  <span class="checkbox-label">Backpropagation</span>768                </label>769                <label class="checkbox-option">770                  <input type="checkbox" name="difficile" value="metrics">771                  <span class="checkbox-label">Choix des metriques d'evaluation</span>772                </label>773              </div>774            </div>775          </div>776        </div>777 778        <!-- Card 4: Questions -->779        <div class="form-card scroll-animate">780          <div class="form-card-header">781            <div class="form-card-icon">Q</div>782            <h2 class="form-card-title">Vos questions</h2>783          </div>784          <div class="form-card-body">785            <div class="form-row">786              <label class="form-label">Question principale <span class="required">*</span></label>787              <textarea class="form-textarea" placeholder="Decrivez votre question ou le point qui n'est pas clair..." id="mainQuestion" required></textarea>788            </div>789 790            <div class="form-row">791              <label class="form-label">Question sur le code / les TPs <span class="hint">(optionnel)</span></label>792              <textarea class="form-textarea" placeholder="Si vous avez une question specifique sur un notebook ou du code..." id="codeQuestion"></textarea>793            </div>794 795            <div class="form-row" style="margin-bottom: 0;">796              <label class="form-label">Lien avec votre projet <span class="hint">(optionnel)</span></label>797              <textarea class="form-textarea" placeholder="Comment cette formation peut-elle vous aider dans votre projet personnel ?" id="projectLink"></textarea>798            </div>799          </div>800        </div>801 802        <!-- Card 5: Suggestions -->803        <div class="form-card scroll-animate">804          <div class="form-card-header">805            <div class="form-card-icon">S</div>806            <h2 class="form-card-title">Suggestions d'amelioration</h2>807          </div>808          <div class="form-card-body">809            <div class="form-row">810              <label class="form-label">Ce que vous auriez aime voir de plus</label>811              <div class="checkbox-group">812                <label class="checkbox-option">813                  <input type="checkbox" name="suggestion" value="plus-tp">814                  <span class="checkbox-label">Plus de temps sur les TPs</span>815                </label>816                <label class="checkbox-option">817                  <input type="checkbox" name="suggestion" value="plus-theorie">818                  <span class="checkbox-label">Plus de theorie et d'equations</span>819                </label>820                <label class="checkbox-option">821                  <input type="checkbox" name="suggestion" value="plus-datasets">822                  <span class="checkbox-label">Plus de datasets differents</span>823                </label>824                <label class="checkbox-option">825                  <input type="checkbox" name="suggestion" value="deployment">826                  <span class="checkbox-label">Deploiement de modeles (API, Streamlit)</span>827                </label>828                <label class="checkbox-option">829                  <input type="checkbox" name="suggestion" value="mLOps">830                  <span class="checkbox-label">MLOps et gestion de modeles</span>831                </label>832                <label class="checkbox-option">833                  <input type="checkbox" name="suggestion" value="viz">834                  <span class="checkbox-label">Plus de visualisations interactives</span>835                </label>836              </div>837            </div>838 839            <div class="form-row" style="margin-bottom: 0;">840              <label class="form-label">Commentaire libre</label>841              <textarea class="form-textarea" placeholder="Toute suggestion ou remarque est la bienvenue..." id="freeComment"></textarea>842            </div>843          </div>844        </div>845 846        <!-- Submit -->847        <button type="submit" class="submit-btn" id="submitBtn">848          Envoyer mon feedback849        </button>850        <p style="text-align: center; font-size: 0.8rem; color: var(--text-muted); margin-top: var(--space-md);">851          Vos reponses nous aident a ameliorer la formation pour les promotions futures.852        </p>853      </form>854 855      <!-- Data Export Section -->856      <div class="export-section scroll-animate" id="exportSection" style="display: none;">857        <h3 class="export-title">Exporter les donnees</h3>858        <p style="font-size: 0.85rem; color: var(--text-secondary); margin-bottom: var(--space-md);">859          Telechargez les feedbacks collectes pour analyse.860        </p>861        <div class="export-buttons">862          <button class="export-btn" onclick="feedbackStorage.downloadFeedbacks()">863            <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">864              <path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>865            </svg>866            JSON867          </button>868          <button class="export-btn" onclick="feedbackStorage.exportToCSV()">869            <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">870              <path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>871            </svg>872            CSV (Excel)873          </button>874          <button class="export-btn" onclick="showFeedbackStats()">875            <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">876              <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/>877            </svg>878            Statistiques879          </button>880        </div>881      </div>882 883      <!-- FAQ Section -->884      <section class="faq-section">885        <div class="faq-header scroll-animate">886          <h2 class="faq-title">Questions frequentes</h2>887          <p class="faq-subtitle">Consultez d'abord ces reponses avant de soumettre votre question.</p>888        </div>889 890        <div class="faq-item scroll-animate">891          <div class="faq-question" onclick="toggleFaq(this)">892            <span class="faq-question-text">Pourquoi normaliser APRES le split et pas avant ?</span>893            <span class="faq-arrow">v</span>894          </div>895          <div class="faq-answer">896            <div class="faq-answer-content">897              Si vous normalisez avant le split, vous calculez le min/max sur l'ensemble des donnees (train + test). 898              Votre modele "voit" donc indirectement les donnees de test pendant l'entrainement — c'est le 899              <strong>data leakage</strong>. La regle : <strong>fit sur train seulement, transform sur train ET test</strong>.900            </div>901          </div>902        </div>903 904        <div class="faq-item scroll-animate">905          <div class="faq-question" onclick="toggleFaq(this)">906            <span class="faq-question-text">Quelle est la difference entre MAE et RMSE ?</span>907            <span class="faq-arrow">v</span>908          </div>909          <div class="faq-answer">910            <div class="faq-answer-content">911              <strong>MAE</strong> (Mean Absolute Error) = moyenne des erreurs absolues. 912              <strong>RMSE</strong> (Root Mean Squared Error) = racine de la moyenne des erreurs au carre. 913              La difference cle : RMSE <strong>penalise davantage les grandes erreurs</strong> car on eleve au carre. 914              En ingenierie, RMSE >= MAE toujours.915            </div>916          </div>917        </div>918 919        <div class="faq-item scroll-animate">920          <div class="faq-question" onclick="toggleFaq(this)">921            <span class="faq-question-text">Comment savoir si mon modele fait de l'overfitting ?</span>922            <span class="faq-arrow">v</span>923          </div>924          <div class="faq-answer">925            <div class="faq-answer-content">926              Comparez les metriques sur <strong>train</strong> ET <strong>test</strong>. 927              <strong>Overfitting</strong> = R2 train tres eleve (0.99) mais R2 test beaucoup plus bas (0.65). 928              <strong>Bonne generalisation</strong> = R2 train ≈ R2 test (ex: 0.96 vs 0.94). 929              Solution : Dropout, Early Stopping, regularisation L2.930            </div>931          </div>932        </div>933 934        <div class="faq-item scroll-animate">935          <div class="faq-question" onclick="toggleFaq(this)">936            <span class="faq-question-text">Quand utiliser Random Forest vs Neural Networks ?</span>937            <span class="faq-arrow">v</span>938          </div>939          <div class="faq-answer">940            <div class="faq-answer-content">941              <strong>Random Forest</strong> : donnees tabulaires, besoin d'interpretabilite, 942              peu de temps de tuning. <strong>Neural Networks</strong> : donnees complexes (images, texte), 943              beaucoup de donnees disponibles, ressources computationnelles importantes.944            </div>945          </div>946        </div>947 948        <div class="faq-item scroll-animate">949          <div class="faq-question" onclick="toggleFaq(this)">950            <span class="faq-question-text">Comment adapter le code a mes propres donnees ?</span>951            <span class="faq-arrow">v</span>952          </div>953          <div class="faq-answer">954            <div class="faq-answer-content">955              Remplacez <code>df = pd.read_csv("vos_donnees.csv")</code>. Verifiez avec 956              <code>df.head()</code> et <code>df.describe()</code>. Adaptez la liste des features 957              et la variable cible. Ajoutez <code>df.dropna()</code> pour supprimer les NaN. 958              Le reste du pipeline reste identique !959            </div>960          </div>961        </div>962      </section>963 964      <!-- Contact Info -->965      <div class="contact-info">966        <div class="contact-item scroll-animate">967          <div class="contact-icon">@</div>968          <div class="contact-label">Email</div>969          <div class="contact-value">970            <a href="mailto:imadmaalouf02@gmail.com" class="contact-link">imadmaalouf02@gmail.com</a>971          </div>972        </div>973        <div class="contact-item scroll-animate">974          <div class="contact-icon">GH</div>975          <div class="contact-label">GitHub</div>976          <div class="contact-value">977            <a href="https://github.com/imadmaalouf02" target="_blank" class="contact-link">github.com/imadmaalouf02</a>978          </div>979        </div>980        <div class="contact-item scroll-animate">981          <div class="contact-icon">HF</div>982          <div class="contact-label">Hugging Face</div>983          <div class="contact-value">984            <a href="https://huggingface.co/spaces/MAALOOUF/ML_Training" target="_blank" class="contact-link">ML Training Space</a>985          </div>986        </div>987      </div>988 989    </div>990 991    <!-- Author Footer -->992    <footer class="author-footer">993      <div class="author-info">994        <a href="mailto:imadmaalouf02@gmail.com" class="author-link">995          <svg viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>996          imadmaalouf02@gmail.com997        </a>998        <a href="https://github.com/imadmaalouf02" target="_blank" class="author-link">999          <svg viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>1000          GitHub1001        </a>1002        <a href="https://huggingface.co/spaces/MAALOOUF/ML_Training" target="_blank" class="author-link">1003          <svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>1004          Hugging Face Space1005        </a>1006      </div>1007    </footer>1008 1009    <!-- Footer -->1010    <footer class="footer">1011      <p class="footer-text">1012        ML Academy — Questions & Feedback — 1013        <span class="footer-brand">GE-MCI 4A</span> — 2025/20261014      </p>1015      <p class="footer-text" style="margin-top: var(--space-sm); font-size: 0.75rem; color: var(--text-muted);">1016        Formateur : Imad Maalouf1017      </p>1018    </footer>1019  </div>1020 1021  <!-- Scripts -->1022  <script src="js/shared.js"></script>1023  <script src="js/feedback-storage.js"></script>1024  <script>1025    // Scroll animations1026    const observerOptions = {1027      threshold: 0.1,1028      rootMargin: '0px 0px -50px 0px'1029    };1030 1031    const observer = new IntersectionObserver((entries) => {1032      entries.forEach(entry => {1033        if (entry.isIntersecting) {1034          entry.target.classList.add('visible');1035        }1036      });1037    }, observerOptions);1038 1039    document.querySelectorAll('.scroll-animate').forEach(el => {1040      observer.observe(el);1041    });1042 1043    // Star rating1044    const stars = document.querySelectorAll('.star');1045    const ratingValue = document.getElementById('ratingValue');1046    const ratingText = document.getElementById('ratingText');1047    const ratingLabels = ['', 'Insuffisant', 'Passable', 'Bien', 'Tres bien', 'Excellent !'];1048 1049    stars.forEach(star => {1050      star.addEventListener('click', () => {1051        const value = parseInt(star.dataset.value);1052        ratingValue.value = value;1053        ratingText.textContent = ratingLabels[value];1054        1055        stars.forEach((s, i) => {1056          s.classList.toggle('active', i < value);1057        });1058 1059        // Update progress1060        document.querySelectorAll('.progress-step')[1].classList.add('active');1061      });1062    });1063 1064    // Difficulty buttons1065    const diffButtons = document.querySelectorAll('.difficulty-btn');1066    const difficultyValue = document.getElementById('difficultyValue');1067 1068    diffButtons.forEach(btn => {1069      btn.addEventListener('click', () => {1070        diffButtons.forEach(b => b.classList.remove('selected'));1071        btn.classList.add('selected');1072        difficultyValue.value = btn.dataset.value;1073      });1074    });1075 1076    // FAQ toggle1077    function toggleFaq(element) {1078      const faqItem = element.parentElement;1079      faqItem.classList.toggle('open');1080    }1081 1082    // Form submission1083    const form = document.getElementById('feedbackForm');1084    const successMessage = document.getElementById('successMessage');1085    const submitBtn = document.getElementById('submitBtn');1086    const exportSection = document.getElementById('exportSection');1087 1088    form.addEventListener('submit', (e) => {1089      e.preventDefault();1090 1091      // Validation1092      const rating = ratingValue.value;1093      const difficulty = difficultyValue.value;1094      const mainQuestion = document.getElementById('mainQuestion').value.trim();1095 1096      if (rating === '0') {1097        alert('Veuillez donner une note a la formation.');1098        return;1099      }1100 1101      if (!difficulty) {1102        alert('Veuillez indiquer le niveau de difficulte percu.');1103        return;1104      }1105 1106      if (!mainQuestion) {1107        alert('Veuillez poser au moins une question principale.');1108        return;1109      }1110 1111      // Collect data1112      const formData = {1113        name: document.getElementById('name').value,1114        email: document.getElementById('email').value,1115        project: document.getElementById('project').value,1116        rating: rating,1117        difficulty: difficulty,1118        rythme: document.querySelector('input[name="rythme"]:checked')?.value,1119        utiles: [...document.querySelectorAll('input[name="utile"]:checked')].map(cb => cb.value),1120        difficiles: [...document.querySelectorAll('input[name="difficile"]:checked')].map(cb => cb.value),1121        mainQuestion: mainQuestion,1122        codeQuestion: document.getElementById('codeQuestion').value,1123        projectLink: document.getElementById('projectLink').value,1124        suggestions: [...document.querySelectorAll('input[name="suggestion"]:checked')].map(cb => cb.value),1125        freeComment: document.getElementById('freeComment').value,1126        timestamp: new Date().toISOString()1127      };1128 1129      // Submit to storage1130      submitFeedback(formData);1131 1132      // Show success1133      form.style.display = 'none';1134      successMessage.classList.add('show');1135      exportSection.style.display = 'block';1136      document.querySelectorAll('.progress-step')[2].classList.add('active');1137      window.scrollTo({ top: 0, behavior: 'smooth' });1138    });1139 1140    // Update progress on scroll1141    window.addEventListener('scroll', () => {1142      const mainQuestion = document.getElementById('mainQuestion')?.value.trim();1143      if (mainQuestion) {1144        document.querySelectorAll('.progress-step')[2].classList.add('active');1145      }1146    });1147  </script>1148</body>1149</html>1150