986 lines
73 KiB
HTML
986 lines
73 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="da">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Danske Pronominer — PD3.4 Øvelser · 200 spørgsmål</title>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Source+Serif+4:opsz,wght@8..60,400;8..60,500;8..60,600&family=Inter+Tight:wght@400;500;600&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root {
|
||
--paper: #FBF6EC;
|
||
--paper-warm: #F4ECDD;
|
||
--ink: #1F2330;
|
||
--ink-soft: #4A4F5C;
|
||
--ink-mute: #8A8E97;
|
||
--rule: #E1D6C0;
|
||
--rule-soft: #ECE3D1;
|
||
--accent: #A82F2F;
|
||
--accent-soft: #F2DDD9;
|
||
--gold: #B8893A;
|
||
--gold-soft: #F4E8D0;
|
||
--green: #3F6B4E;
|
||
--green-soft: #DDE9DC;
|
||
--blue: #2C4A6B;
|
||
--blue-soft: #DDE5EE;
|
||
--serif-display: 'Fraunces', Georgia, serif;
|
||
--serif-body: 'Source Serif 4', Georgia, serif;
|
||
--sans: 'Inter Tight', -apple-system, sans-serif;
|
||
--radius: 10px;
|
||
--radius-lg: 14px;
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
html, body {
|
||
margin: 0;
|
||
padding: 0;
|
||
background: var(--paper);
|
||
color: var(--ink);
|
||
font-family: var(--serif-body);
|
||
font-size: 16px;
|
||
line-height: 1.55;
|
||
-webkit-font-smoothing: antialiased;
|
||
}
|
||
|
||
body {
|
||
background-image:
|
||
radial-gradient(circle at 25% 15%, rgba(184, 137, 58, 0.04) 0%, transparent 40%),
|
||
radial-gradient(circle at 80% 80%, rgba(168, 47, 47, 0.03) 0%, transparent 40%);
|
||
min-height: 100vh;
|
||
}
|
||
|
||
/* ============ Header ============ */
|
||
.masthead {
|
||
max-width: 880px;
|
||
margin: 0 auto;
|
||
padding: 56px 32px 40px;
|
||
text-align: center;
|
||
border-bottom: 1px dashed var(--rule);
|
||
}
|
||
.masthead .eyebrow {
|
||
font-family: var(--sans);
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
letter-spacing: 0.25em;
|
||
text-transform: uppercase;
|
||
color: var(--accent);
|
||
margin: 0 0 16px;
|
||
}
|
||
.masthead h1 {
|
||
font-family: var(--serif-display);
|
||
font-weight: 600;
|
||
font-size: clamp(38px, 6vw, 56px);
|
||
line-height: 1.05;
|
||
letter-spacing: -0.02em;
|
||
margin: 0 0 12px;
|
||
font-variation-settings: "opsz" 144;
|
||
}
|
||
.masthead h1 em {
|
||
font-style: italic;
|
||
color: var(--accent);
|
||
font-weight: 500;
|
||
}
|
||
.masthead .lede {
|
||
font-family: var(--serif-body);
|
||
font-size: 17px;
|
||
font-style: italic;
|
||
color: var(--ink-soft);
|
||
max-width: 540px;
|
||
margin: 0 auto;
|
||
line-height: 1.55;
|
||
}
|
||
.masthead .meta-row {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: 32px;
|
||
margin-top: 28px;
|
||
font-family: var(--sans);
|
||
font-size: 12px;
|
||
letter-spacing: 0.12em;
|
||
text-transform: uppercase;
|
||
color: var(--ink-mute);
|
||
}
|
||
.masthead .meta-row span { display: flex; align-items: center; gap: 6px; }
|
||
.masthead .meta-row .dot {
|
||
width: 4px; height: 4px; border-radius: 50%;
|
||
background: var(--gold);
|
||
display: inline-block;
|
||
}
|
||
|
||
/* ============ Sticky toolbar ============ */
|
||
.toolbar {
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 50;
|
||
background: rgba(251, 246, 236, 0.96);
|
||
backdrop-filter: blur(10px);
|
||
-webkit-backdrop-filter: blur(10px);
|
||
border-bottom: 1px solid var(--rule);
|
||
}
|
||
.toolbar-inner {
|
||
max-width: 880px;
|
||
margin: 0 auto;
|
||
padding: 14px 32px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 16px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.score-block {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 18px;
|
||
font-family: var(--sans);
|
||
}
|
||
.score-stat {
|
||
display: flex;
|
||
flex-direction: column;
|
||
line-height: 1.1;
|
||
}
|
||
.score-stat .label {
|
||
font-size: 10px;
|
||
letter-spacing: 0.16em;
|
||
text-transform: uppercase;
|
||
color: var(--ink-mute);
|
||
margin-bottom: 3px;
|
||
}
|
||
.score-stat .value {
|
||
font-family: var(--serif-display);
|
||
font-size: 22px;
|
||
font-weight: 500;
|
||
letter-spacing: -0.01em;
|
||
color: var(--ink);
|
||
font-variation-settings: "opsz" 60;
|
||
}
|
||
.score-stat .value .denom { color: var(--ink-mute); font-size: 0.7em; }
|
||
.progress-bar {
|
||
flex: 1;
|
||
min-width: 120px;
|
||
max-width: 200px;
|
||
height: 4px;
|
||
background: var(--rule-soft);
|
||
border-radius: 2px;
|
||
overflow: hidden;
|
||
}
|
||
.progress-fill {
|
||
height: 100%;
|
||
background: linear-gradient(90deg, var(--green), var(--gold));
|
||
width: 0%;
|
||
transition: width 0.4s ease;
|
||
}
|
||
.toolbar-actions {
|
||
display: flex;
|
||
gap: 6px;
|
||
}
|
||
.btn {
|
||
font-family: var(--sans);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
padding: 7px 14px;
|
||
border: 1px solid var(--rule);
|
||
background: transparent;
|
||
color: var(--ink-soft);
|
||
border-radius: var(--radius);
|
||
cursor: pointer;
|
||
transition: all 0.15s;
|
||
letter-spacing: 0.01em;
|
||
}
|
||
.btn:hover { background: var(--paper-warm); border-color: var(--ink-mute); color: var(--ink); }
|
||
.btn.primary {
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
border-color: var(--ink);
|
||
}
|
||
.btn.primary:hover { background: var(--accent); border-color: var(--accent); }
|
||
.btn.danger:hover { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }
|
||
|
||
/* ============ Section navigation ============ */
|
||
.section-nav {
|
||
max-width: 880px;
|
||
margin: 24px auto 0;
|
||
padding: 0 32px;
|
||
display: flex;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
font-family: var(--sans);
|
||
font-size: 12px;
|
||
letter-spacing: 0.04em;
|
||
}
|
||
.section-nav a {
|
||
color: var(--ink-soft);
|
||
text-decoration: none;
|
||
padding: 5px 12px;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--rule);
|
||
transition: all 0.15s;
|
||
}
|
||
.section-nav a:hover { background: var(--paper-warm); border-color: var(--ink-mute); }
|
||
.section-nav a .num { color: var(--accent); font-weight: 500; margin-right: 6px; }
|
||
|
||
/* ============ Main content ============ */
|
||
main {
|
||
max-width: 880px;
|
||
margin: 0 auto;
|
||
padding: 48px 32px 96px;
|
||
}
|
||
|
||
/* ============ Section ============ */
|
||
.section { margin-bottom: 88px; }
|
||
.section:last-child { margin-bottom: 0; }
|
||
.section-header { margin-bottom: 36px; }
|
||
.section-meta {
|
||
display: flex;
|
||
align-items: baseline;
|
||
justify-content: space-between;
|
||
font-family: var(--sans);
|
||
font-size: 11px;
|
||
letter-spacing: 0.2em;
|
||
text-transform: uppercase;
|
||
color: var(--ink-mute);
|
||
padding-bottom: 12px;
|
||
border-bottom: 2px solid var(--ink);
|
||
margin-bottom: 16px;
|
||
}
|
||
.section-num { color: var(--accent); font-weight: 500; }
|
||
.section-title {
|
||
font-family: var(--serif-display);
|
||
font-size: 36px;
|
||
font-weight: 500;
|
||
letter-spacing: -0.015em;
|
||
margin: 0 0 6px;
|
||
line-height: 1.1;
|
||
font-variation-settings: "opsz" 144;
|
||
}
|
||
.section-subtitle {
|
||
font-family: var(--serif-body);
|
||
font-style: italic;
|
||
font-size: 16px;
|
||
color: var(--ink-soft);
|
||
margin: 0 0 24px;
|
||
}
|
||
.rule-card {
|
||
background: var(--paper-warm);
|
||
border: 1px solid var(--rule);
|
||
border-radius: var(--radius-lg);
|
||
padding: 20px 24px;
|
||
position: relative;
|
||
}
|
||
.rule-card::before {
|
||
content: "Regler";
|
||
position: absolute;
|
||
top: -10px;
|
||
left: 20px;
|
||
background: var(--paper);
|
||
padding: 0 10px;
|
||
font-family: var(--sans);
|
||
font-size: 10px;
|
||
letter-spacing: 0.2em;
|
||
text-transform: uppercase;
|
||
color: var(--accent);
|
||
font-weight: 500;
|
||
}
|
||
.rule-item {
|
||
display: grid;
|
||
grid-template-columns: 180px 1fr;
|
||
gap: 16px;
|
||
padding: 8px 0;
|
||
border-bottom: 1px dashed var(--rule);
|
||
align-items: baseline;
|
||
}
|
||
.rule-item:last-child { border-bottom: none; padding-bottom: 0; }
|
||
.rule-item:first-child { padding-top: 0; }
|
||
.rule-term {
|
||
font-family: var(--serif-display);
|
||
font-style: italic;
|
||
font-weight: 500;
|
||
font-size: 16px;
|
||
color: var(--accent);
|
||
font-variation-settings: "opsz" 60;
|
||
}
|
||
.rule-def {
|
||
font-family: var(--serif-body);
|
||
font-size: 14.5px;
|
||
color: var(--ink-soft);
|
||
line-height: 1.55;
|
||
}
|
||
.rule-def b { color: var(--ink); font-weight: 600; }
|
||
|
||
/* ============ Question ============ */
|
||
.question {
|
||
padding: 22px 4px;
|
||
border-bottom: 1px solid var(--rule);
|
||
scroll-margin-top: 100px;
|
||
}
|
||
.question:last-child { border-bottom: none; }
|
||
.question.answered.correct { background: linear-gradient(90deg, var(--green-soft) 0%, transparent 30%); border-radius: var(--radius); padding-left: 18px; margin-left: -22px; }
|
||
.question.answered.incorrect { background: linear-gradient(90deg, var(--accent-soft) 0%, transparent 30%); border-radius: var(--radius); padding-left: 18px; margin-left: -22px; }
|
||
|
||
.q-header {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
margin-bottom: 14px;
|
||
}
|
||
.q-number {
|
||
font-family: var(--sans);
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
letter-spacing: 0.18em;
|
||
color: var(--ink-mute);
|
||
text-transform: uppercase;
|
||
}
|
||
.q-type {
|
||
font-family: var(--sans);
|
||
font-size: 10px;
|
||
letter-spacing: 0.12em;
|
||
text-transform: uppercase;
|
||
padding: 2px 8px;
|
||
border: 1px solid var(--rule);
|
||
border-radius: 999px;
|
||
color: var(--ink-soft);
|
||
}
|
||
.q-type.multi { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); }
|
||
.q-status {
|
||
margin-left: auto;
|
||
font-family: var(--sans);
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
}
|
||
.q-status.right { color: var(--green); }
|
||
.q-status.wrong { color: var(--accent); }
|
||
|
||
.q-sentence {
|
||
font-family: var(--serif-body);
|
||
font-size: 19px;
|
||
line-height: 1.75;
|
||
color: var(--ink);
|
||
margin: 0 0 16px;
|
||
}
|
||
|
||
/* Inline inputs inside sentences */
|
||
.q-blank-input {
|
||
display: inline-block;
|
||
width: 110px;
|
||
font-family: var(--serif-body);
|
||
font-size: 18px;
|
||
font-weight: 500;
|
||
color: var(--blue);
|
||
background: transparent;
|
||
border: none;
|
||
border-bottom: 2px solid var(--ink-soft);
|
||
padding: 0 6px;
|
||
margin: 0 2px;
|
||
text-align: center;
|
||
transition: all 0.2s;
|
||
}
|
||
.q-blank-input:focus { outline: none; border-color: var(--accent); }
|
||
.q-blank-input.right { color: var(--green); border-color: var(--green); }
|
||
.q-blank-input.wrong { color: var(--accent); border-color: var(--accent); text-decoration: line-through; }
|
||
.q-blank-correction {
|
||
display: inline-block;
|
||
font-family: var(--serif-body);
|
||
font-style: italic;
|
||
font-size: 16px;
|
||
color: var(--green);
|
||
margin-left: 4px;
|
||
}
|
||
|
||
/* Multiple choice options */
|
||
.q-options {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
margin-top: 4px;
|
||
}
|
||
.q-opt {
|
||
font-family: var(--serif-body);
|
||
font-size: 16px;
|
||
padding: 7px 18px;
|
||
background: transparent;
|
||
border: 1px solid var(--ink-soft);
|
||
border-radius: var(--radius);
|
||
color: var(--ink);
|
||
cursor: pointer;
|
||
transition: all 0.15s;
|
||
}
|
||
.q-opt:hover:not(:disabled) { background: var(--paper-warm); border-color: var(--ink); }
|
||
.q-opt:disabled { cursor: default; }
|
||
.q-opt.picked.right { background: var(--green-soft); color: var(--green); border-color: var(--green); }
|
||
.q-opt.picked.wrong { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
|
||
.q-opt.show-correct {
|
||
background: var(--green-soft);
|
||
color: var(--green);
|
||
border-color: var(--green);
|
||
border-style: dashed;
|
||
}
|
||
|
||
/* Check button */
|
||
.q-check-row {
|
||
margin-top: 14px;
|
||
display: flex;
|
||
gap: 8px;
|
||
align-items: center;
|
||
}
|
||
.q-check {
|
||
font-family: var(--sans);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
padding: 7px 18px;
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
border: none;
|
||
border-radius: var(--radius);
|
||
cursor: pointer;
|
||
transition: background 0.15s;
|
||
}
|
||
.q-check:hover:not(:disabled) { background: var(--accent); }
|
||
.q-check:disabled { opacity: 0.4; cursor: default; }
|
||
.q-hint {
|
||
font-family: var(--serif-body);
|
||
font-style: italic;
|
||
font-size: 13px;
|
||
color: var(--ink-mute);
|
||
}
|
||
|
||
/* Feedback */
|
||
.q-feedback {
|
||
display: none;
|
||
margin-top: 14px;
|
||
padding: 12px 16px;
|
||
border-radius: var(--radius);
|
||
font-size: 14.5px;
|
||
line-height: 1.55;
|
||
font-family: var(--serif-body);
|
||
}
|
||
.q-feedback.show { display: block; }
|
||
.q-feedback.correct {
|
||
background: var(--green-soft);
|
||
color: #2A4A36;
|
||
border-left: 3px solid var(--green);
|
||
}
|
||
.q-feedback.incorrect {
|
||
background: var(--accent-soft);
|
||
color: #6B1F1F;
|
||
border-left: 3px solid var(--accent);
|
||
}
|
||
.q-feedback.reveal {
|
||
background: var(--blue-soft);
|
||
color: var(--blue);
|
||
border-left: 3px solid var(--blue);
|
||
}
|
||
.q-feedback .fb-icon {
|
||
font-family: var(--serif-display);
|
||
font-weight: 600;
|
||
font-style: italic;
|
||
margin-right: 6px;
|
||
}
|
||
.q-feedback .fb-correct-answer {
|
||
font-family: var(--serif-display);
|
||
font-style: italic;
|
||
font-weight: 500;
|
||
font-size: 1.05em;
|
||
}
|
||
.q-feedback .fb-explain {
|
||
display: block;
|
||
margin-top: 6px;
|
||
color: var(--ink-soft);
|
||
font-size: 13.5px;
|
||
}
|
||
|
||
/* ============ Footer ============ */
|
||
footer {
|
||
max-width: 880px;
|
||
margin: 0 auto;
|
||
padding: 32px;
|
||
border-top: 1px dashed var(--rule);
|
||
text-align: center;
|
||
font-family: var(--serif-body);
|
||
font-style: italic;
|
||
font-size: 14px;
|
||
color: var(--ink-mute);
|
||
}
|
||
footer .flag { color: var(--accent); }
|
||
|
||
/* ============ Score summary modal ============ */
|
||
.summary-card {
|
||
display: none;
|
||
position: fixed;
|
||
bottom: 24px;
|
||
right: 24px;
|
||
background: var(--paper);
|
||
border: 1px solid var(--ink);
|
||
border-radius: var(--radius-lg);
|
||
padding: 18px 22px;
|
||
box-shadow: 0 10px 40px rgba(31, 35, 48, 0.15);
|
||
z-index: 100;
|
||
font-family: var(--sans);
|
||
max-width: 280px;
|
||
}
|
||
.summary-card.show { display: block; }
|
||
.summary-card .close {
|
||
position: absolute;
|
||
top: 8px; right: 12px;
|
||
background: none; border: none;
|
||
font-size: 20px; cursor: pointer;
|
||
color: var(--ink-mute);
|
||
font-family: var(--serif-display);
|
||
}
|
||
.summary-card .close:hover { color: var(--accent); }
|
||
.summary-card h3 {
|
||
font-family: var(--serif-display);
|
||
font-style: italic;
|
||
font-size: 20px;
|
||
margin: 0 0 8px;
|
||
color: var(--accent);
|
||
font-variation-settings: "opsz" 60;
|
||
}
|
||
.summary-card .summary-total {
|
||
font-family: var(--serif-display);
|
||
font-size: 32px;
|
||
font-weight: 500;
|
||
letter-spacing: -0.01em;
|
||
margin: 6px 0;
|
||
}
|
||
.summary-card .summary-detail {
|
||
font-size: 12px;
|
||
color: var(--ink-soft);
|
||
line-height: 1.6;
|
||
}
|
||
|
||
/* ============ Responsive ============ */
|
||
@media (max-width: 640px) {
|
||
.masthead { padding: 36px 20px 28px; }
|
||
.masthead .meta-row { gap: 16px; flex-wrap: wrap; }
|
||
.toolbar-inner { padding: 12px 20px; gap: 12px; }
|
||
.progress-bar { display: none; }
|
||
main { padding: 32px 20px 64px; }
|
||
.section-title { font-size: 28px; }
|
||
.q-sentence { font-size: 17px; }
|
||
.rule-item { grid-template-columns: 1fr; gap: 4px; }
|
||
.section-nav { padding: 0 20px; }
|
||
.q-blank-input { width: 90px; font-size: 16px; }
|
||
}
|
||
|
||
/* ============ Print ============ */
|
||
@media print {
|
||
.toolbar, .section-nav, .q-check-row, .summary-card { display: none !important; }
|
||
.q-feedback.show { display: block !important; }
|
||
body { background: white; }
|
||
.question { page-break-inside: avoid; }
|
||
main { padding: 20px; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header class="masthead">
|
||
<p class="eyebrow">Prøve i Dansk 3 · Modul 3.4</p>
|
||
<h1>Danske <em>pronominer</em></h1>
|
||
<p class="lede">Et komplet praksisbatteri på 200 spørgsmål, der dækker personlige, refleksive, relative og ubestemte pronominer — med stigende sværhedsgrad fra enkle udfyldninger til sammensatte afsnit.</p>
|
||
<div class="meta-row">
|
||
<span><span class="dot"></span>200 spørgsmål</span>
|
||
<span><span class="dot"></span>5 sektioner</span>
|
||
<span><span class="dot"></span>40 sammensatte opgaver</span>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="toolbar">
|
||
<div class="toolbar-inner">
|
||
<div class="score-block">
|
||
<div class="score-stat">
|
||
<span class="label">Korrekte</span>
|
||
<span class="value"><span id="score">0</span><span class="denom"> / <span id="answered">0</span></span></span>
|
||
</div>
|
||
<div class="progress-bar"><div class="progress-fill" id="progress-fill"></div></div>
|
||
</div>
|
||
<div class="toolbar-actions">
|
||
<button class="btn" id="btn-reveal">Vis alle svar</button>
|
||
<button class="btn" id="btn-print">Print</button>
|
||
<button class="btn danger" id="btn-reset">Nulstil</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<nav class="section-nav" aria-label="Sektioner">
|
||
<a href="#section-1"><span class="num">1</span>Personlige & ejestedord</a>
|
||
<a href="#section-2"><span class="num">2</span>Refleksive</a>
|
||
<a href="#section-3"><span class="num">3</span>Relative</a>
|
||
<a href="#section-4"><span class="num">4</span>Ubestemte</a>
|
||
<a href="#section-5"><span class="num">5</span>Avanceret</a>
|
||
</nav>
|
||
|
||
<main>
|
||
|
||
<section class="section" id="section-1" data-section="1">
|
||
<header class="section-header">
|
||
<div class="section-meta">
|
||
<span class="section-num">Sektion 1</span>
|
||
<span class="section-count">Q1 – Q50</span>
|
||
</div>
|
||
<h2 class="section-title">Personlige og ejestedord</h2>
|
||
<p class="section-subtitle">Personal pronouns and possessives</p>
|
||
<div class="rule-card">
|
||
<div class="rule-item"><span class="rule-term">Objektsform</span><span class="rule-def">mig · dig · ham · hende · den · det · os · jer · dem</span></div><div class="rule-item"><span class="rule-term">Ejestedord 1. person</span><span class="rule-def">min (en-ord) · mit (et-ord) · mine (flertal) · vores (flertal, alt sammen)</span></div><div class="rule-item"><span class="rule-term">Ejestedord 2. person</span><span class="rule-def">din · dit · dine · jeres (flertal)</span></div><div class="rule-item"><span class="rule-term">3. person ejestedord</span><span class="rule-def">hans · hendes · dens · dets · deres — ændrer sig aldrig</span></div>
|
||
</div>
|
||
</header>
|
||
<div class="questions">
|
||
</div>
|
||
</section>
|
||
<section class="section" id="section-2" data-section="2">
|
||
<header class="section-header">
|
||
<div class="section-meta">
|
||
<span class="section-num">Sektion 2</span>
|
||
<span class="section-count">Q51 – Q100</span>
|
||
</div>
|
||
<h2 class="section-title">Refleksive pronominer</h2>
|
||
<p class="section-subtitle">Reflexive pronouns: sig, sin, sit, sine</p>
|
||
<div class="rule-card">
|
||
<div class="rule-item"><span class="rule-term">sig</span><span class="rule-def">3. person refleksiv objekt (han, hun, den, det, de). 1./2. person bruger mig, dig, os, jer.</span></div><div class="rule-item"><span class="rule-term">sin / sit / sine</span><span class="rule-def">Refleksiv ejestedord — bruges når <b>ejeren er sætningens subjekt</b> (3. person). sin (en-ord) · sit (et-ord) · sine (flertal).</span></div><div class="rule-item"><span class="rule-term">hans / hendes / deres</span><span class="rule-def">Bruges når ejeren <b>ikke</b> er subjektet.</span></div>
|
||
</div>
|
||
</header>
|
||
<div class="questions">
|
||
</div>
|
||
</section>
|
||
<section class="section" id="section-3" data-section="3">
|
||
<header class="section-header">
|
||
<div class="section-meta">
|
||
<span class="section-num">Sektion 3</span>
|
||
<span class="section-count">Q101 – Q130</span>
|
||
</div>
|
||
<h2 class="section-title">Relative pronominer</h2>
|
||
<p class="section-subtitle">Relative pronouns: som, der, hvis</p>
|
||
<div class="rule-card">
|
||
<div class="rule-item"><span class="rule-term">som</span><span class="rule-def">Virker altid — både som subjekt og objekt i bisætningen.</span></div><div class="rule-item"><span class="rule-term">der</span><span class="rule-def">Kun når substantivet er <b>subjekt</b> i bisætningen — kan aldrig være objekt.</span></div><div class="rule-item"><span class="rule-term">hvis</span><span class="rule-def">Viser ejerskab (= engelsk "whose").</span></div>
|
||
</div>
|
||
</header>
|
||
<div class="questions">
|
||
</div>
|
||
</section>
|
||
<section class="section" id="section-4" data-section="4">
|
||
<header class="section-header">
|
||
<div class="section-meta">
|
||
<span class="section-num">Sektion 4</span>
|
||
<span class="section-count">Q131 – Q160</span>
|
||
</div>
|
||
<h2 class="section-title">Ubestemte pronominer</h2>
|
||
<p class="section-subtitle">Indefinite pronouns: man, nogen/noget/nogle, ingen</p>
|
||
<div class="rule-card">
|
||
<div class="rule-item"><span class="rule-term">man</span><span class="rule-def">Generelt: "en, folk".</span></div><div class="rule-item"><span class="rule-term">nogen</span><span class="rule-def">Person (someone/anyone), ofte i spørgsmål og negationer.</span></div><div class="rule-item"><span class="rule-term">noget</span><span class="rule-def">Ikke-tællelig eller abstrakt (something/anything).</span></div><div class="rule-item"><span class="rule-term">nogle</span><span class="rule-def">Flertal tællelig i positive sætninger — lyder ens som nogen!</span></div><div class="rule-item"><span class="rule-term">ingen</span><span class="rule-def">Ingen person / nobody.</span></div>
|
||
</div>
|
||
</header>
|
||
<div class="questions">
|
||
</div>
|
||
</section>
|
||
<section class="section" id="section-5" data-section="5">
|
||
<header class="section-header">
|
||
<div class="section-meta">
|
||
<span class="section-num">Sektion 5</span>
|
||
<span class="section-count">Q161 – Q200</span>
|
||
</div>
|
||
<h2 class="section-title">Blandet og avanceret</h2>
|
||
<p class="section-subtitle">Mixed & complex: multiple pronouns per sentence</p>
|
||
<div class="rule-card">
|
||
<div class="rule-item"><span class="rule-term">2 pronominer</span><span class="rule-def">Q161–170: sætninger med to manglende pronominer.</span></div><div class="rule-item"><span class="rule-term">3 pronominer</span><span class="rule-def">Q171–180: tre pronominer i hver opgave.</span></div><div class="rule-item"><span class="rule-term">4 pronominer</span><span class="rule-def">Q181–190: små afsnit på 3 sætninger.</span></div><div class="rule-item"><span class="rule-term">5 pronominer</span><span class="rule-def">Q191–200: hele afsnit på 4 sætninger.</span></div>
|
||
</div>
|
||
</header>
|
||
<div class="questions">
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<footer>
|
||
<p>200 øvelser i danske pronominer <span class="flag">·</span> Sat sammen til PD3.4-forberedelse <span class="flag">·</span> God fornøjelse!</p>
|
||
</footer>
|
||
|
||
<div class="summary-card" id="summary-card">
|
||
<button class="close" id="close-summary" aria-label="Luk">×</button>
|
||
<h3>Færdig!</h3>
|
||
<div class="summary-total"><span id="sum-correct">0</span> / <span id="sum-total">0</span></div>
|
||
<div class="summary-detail" id="sum-breakdown"></div>
|
||
</div>
|
||
|
||
<script>
|
||
const QUESTIONS = [{"id": 1, "section": 1, "type": "input", "sentence": "Kender du Peter? Ja, jeg kender ___ godt.", "answers": ["ham"], "explain": "Peter = han → objektsform er ham."}, {"id": 2, "section": 1, "type": "mc", "sentence": "Vi har inviteret Anna og Lars. Vi kan godt lide ___.", "answers": ["dem"], "options": ["dem", "os", "jer"], "explain": "Anna og Lars = de → objektsform er dem."}, {"id": 3, "section": 1, "type": "input", "sentence": "Maria er sød. Jeg kan godt lide ___.", "answers": ["hende"], "explain": "Maria = hun → objektsform er hende."}, {"id": 4, "section": 1, "type": "mc", "sentence": "Tak for invitationen! Vi kommer hjem til ___.", "answers": ["jer"], "options": ["jer", "dem", "os"], "explain": "I (jer = you plural) → objektsform er jer."}, {"id": 5, "section": 1, "type": "input", "sentence": "Kan du hjælpe ___? (jeg)", "answers": ["mig"], "explain": "jeg → objektsform er mig."}, {"id": 6, "section": 1, "type": "mc", "sentence": "Hvor er bogen? Jeg kan ikke finde ___.", "answers": ["den"], "options": ["den", "det", "ham"], "explain": "en bog (en-ord) → den."}, {"id": 7, "section": 1, "type": "input", "sentence": "Børnene er trætte. Vi sender ___ i seng.", "answers": ["dem"], "explain": "børnene = de → objektsform er dem."}, {"id": 8, "section": 1, "type": "mc", "sentence": "Vi har et flot hus. Vi elsker ___.", "answers": ["det"], "options": ["den", "det", "dem"], "explain": "et hus (et-ord) → det."}, {"id": 9, "section": 1, "type": "input", "sentence": "Jeg har en god ven, Lars. Jeg taler ofte med ___.", "answers": ["ham"], "explain": "Lars = han → objektsform er ham."}, {"id": 10, "section": 1, "type": "mc", "sentence": "Min søster er flink. Jeg besøger ___ tit.", "answers": ["hende"], "options": ["ham", "hende", "den"], "explain": "min søster = hun → hende."}, {"id": 11, "section": 1, "type": "input", "sentence": "Lars og jeg er gode venner. Han hjælper altid ___. (jeg)", "answers": ["mig"], "explain": "jeg → mig som objekt."}, {"id": 12, "section": 1, "type": "mc", "sentence": "Når du har tid, så ring til ___. (jeg)", "answers": ["mig"], "options": ["mig", "dig", "ham"], "explain": "jeg → mig."}, {"id": 13, "section": 1, "type": "input", "sentence": "Hej børn! Jeg har en gave til ___.", "answers": ["jer"], "explain": "børn = I (du i flertal) → jer."}, {"id": 14, "section": 1, "type": "mc", "sentence": "Min mand laver mad til ___. (jeg)", "answers": ["mig"], "options": ["mig", "ham", "sig"], "explain": "jeg → mig."}, {"id": 15, "section": 1, "type": "input", "sentence": "Min nye cykel er flot. Jeg cykler på ___ hver dag.", "answers": ["den"], "explain": "en cykel (en-ord) → den."}, {"id": 16, "section": 1, "type": "input", "sentence": "Det er ___ bil. (jeg)", "answers": ["min"], "explain": "en bil (en-ord) + 1. person sg → min."}, {"id": 17, "section": 1, "type": "mc", "sentence": "Hvor er ___ hus? (du)", "answers": ["dit"], "options": ["din", "dit", "dine"], "explain": "et hus (et-ord) + 2. person sg → dit."}, {"id": 18, "section": 1, "type": "input", "sentence": "___ børn leger i haven. (vi)", "answers": ["Vores"], "explain": "1. person flertal er altid vores."}, {"id": 19, "section": 1, "type": "mc", "sentence": "Det er ___ jakke. (han)", "answers": ["hans"], "options": ["hans", "hendes", "deres"], "explain": "han → hans (uændret)."}, {"id": 20, "section": 1, "type": "input", "sentence": "Det er Marias bog. Det er ___ bog.", "answers": ["hendes"], "explain": "Maria = hun → hendes."}, {"id": 21, "section": 1, "type": "mc", "sentence": "___ bil er rød. (jeg)", "answers": ["Min"], "options": ["Min", "Mit", "Mine"], "explain": "en bil → min."}, {"id": 22, "section": 1, "type": "input", "sentence": "Hvor er ___ nøgler? (du)", "answers": ["dine"], "explain": "nøgler (flertal) + 2. person sg → dine."}, {"id": 23, "section": 1, "type": "mc", "sentence": "Vi elsker ___ familie. (vi)", "answers": ["vores"], "options": ["vores", "jeres", "deres"], "explain": "1. person flertal → vores."}, {"id": 24, "section": 1, "type": "input", "sentence": "Peter har en søn. ___ søn hedder Anders. (han)", "answers": ["Hans"], "explain": "Peter = han → hans."}, {"id": 25, "section": 1, "type": "mc", "sentence": "___ mor bor i Aarhus. (jeg)", "answers": ["Min"], "options": ["Min", "Mit", "Mine"], "explain": "en mor → min."}, {"id": 26, "section": 1, "type": "input", "sentence": "Det er ___ telefon. (jeg)", "answers": ["min"], "explain": "en telefon → min."}, {"id": 27, "section": 1, "type": "mc", "sentence": "Børnene leger med ___ legetøj. (de)", "answers": ["deres"], "options": ["deres", "sine", "sit"], "explain": "de → deres (her er børnene ikke subjekt af sætningen som ejer legetøjet... vent — de ER subjektet. Men deres bruges hyppigere end sine ved flertal. Begge accepteres traditionelt.)"}, {"id": 28, "section": 1, "type": "input", "sentence": "Hvor er ___ pas? (du)", "answers": ["dit"], "explain": "et pas + 2. person sg → dit."}, {"id": 29, "section": 1, "type": "mc", "sentence": "Sara har en cykel. ___ cykel er ny. (hun)", "answers": ["Hendes"], "options": ["Hendes", "Hans", "Deres"], "explain": "Sara = hun → hendes."}, {"id": 30, "section": 1, "type": "input", "sentence": "Det er ___ værelser. (jeg)", "answers": ["mine"], "explain": "værelser (flertal) → mine."}, {"id": 31, "section": 1, "type": "mc", "sentence": "Hvad er ___ navn? (du)", "answers": ["dit"], "options": ["din", "dit", "dine"], "explain": "et navn → dit."}, {"id": 32, "section": 1, "type": "input", "sentence": "___ lærer er meget sød. (vi)", "answers": ["Vores"], "explain": "1. person flertal → vores."}, {"id": 33, "section": 1, "type": "mc", "sentence": "Jeg har set ___ ven. (du)", "answers": ["din"], "options": ["din", "dit", "dine"], "explain": "en ven → din."}, {"id": 34, "section": 1, "type": "input", "sentence": "___ kollega er fra Sverige. (han)", "answers": ["Hans"], "explain": "han → hans."}, {"id": 35, "section": 1, "type": "mc", "sentence": "Er det ___ bil eller min? (du)", "answers": ["din"], "options": ["din", "dit", "dine"], "explain": "en bil → din."}, {"id": 36, "section": 1, "type": "input", "sentence": "Lars er ___ bedste ven. (jeg)", "answers": ["min"], "explain": "en ven (en-ord) → min."}, {"id": 37, "section": 1, "type": "mc", "sentence": "Pigen har en stor hund. Hun går ofte tur med ___.", "answers": ["den"], "options": ["den", "ham", "hende"], "explain": "en hund (en-ord, dyr) → den."}, {"id": 38, "section": 1, "type": "input", "sentence": "Anders og Sara har en lille kat. ___ kat hedder Mis.", "answers": ["Deres"], "explain": "Anders og Sara = de → deres."}, {"id": 39, "section": 1, "type": "mc", "sentence": "Vi besøger ___ bedsteforældre i weekenden. (vi)", "answers": ["vores"], "options": ["vores", "jeres", "deres"], "explain": "1. person flertal → vores."}, {"id": 40, "section": 1, "type": "input", "sentence": "Det er ___ ferie. Vi har planlagt den længe. (vi)", "answers": ["vores"], "explain": "vi → vores."}, {"id": 41, "section": 1, "type": "mc", "sentence": "Du skal hilse på ___ familie. (jeg)", "answers": ["min"], "options": ["min", "mit", "mine"], "explain": "en familie → min."}, {"id": 42, "section": 1, "type": "input", "sentence": "Børnene skriver et brev til ___ bedstemor. (de)", "answers": ["deres"], "explain": "de → deres."}, {"id": 43, "section": 1, "type": "mc", "sentence": "Han laver mad. ___ mad er meget lækker. (han)", "answers": ["Hans"], "options": ["Hans", "Hendes", "Sin"], "explain": "han → hans (her er mad subjekt, ikke han, så sin går ikke)."}, {"id": 44, "section": 1, "type": "input", "sentence": "Vi elsker ___ nye lejlighed. (vi)", "answers": ["vores"], "explain": "vi → vores."}, {"id": 45, "section": 1, "type": "mc", "sentence": "Peter har en bil. Han kører tit i ___.", "answers": ["den"], "options": ["den", "det", "ham"], "explain": "en bil → den (når vi henviser til bilen)."}, {"id": 46, "section": 1, "type": "input", "sentence": "Jeg har glemt ___ briller. (jeg)", "answers": ["mine"], "explain": "briller (flertal) → mine."}, {"id": 47, "section": 1, "type": "mc", "sentence": "Hvor er ___ tasker? (I, flertal)", "answers": ["jeres"], "options": ["jeres", "vores", "deres"], "explain": "I → jeres."}, {"id": 48, "section": 1, "type": "input", "sentence": "Børnene har ___ eget værelse hver. (de)", "answers": ["deres"], "explain": "de → deres."}, {"id": 49, "section": 1, "type": "mc", "sentence": "Han har en søster. ___ søster bor i Odense. (han)", "answers": ["Hans"], "options": ["Hans", "Hendes", "Sin"], "explain": "han → hans (søster er subjekt, ikke han)."}, {"id": 50, "section": 1, "type": "input", "sentence": "Vi har inviteret ___ til frokost. (du)", "answers": ["dig"], "explain": "du → dig."}, {"id": 51, "section": 2, "type": "input", "sentence": "Han vasker ___ hver morgen.", "answers": ["sig"], "explain": "3. person (han) refleksiv = sig."}, {"id": 52, "section": 2, "type": "mc", "sentence": "Jeg morer ___ til festen.", "answers": ["mig"], "options": ["mig", "sig", "dig"], "explain": "1. person bruger normal objektsform (mig), aldrig sig."}, {"id": 53, "section": 2, "type": "input", "sentence": "Børnene glæder ___ til ferien.", "answers": ["sig"], "explain": "3. person flertal refleksiv = sig."}, {"id": 54, "section": 2, "type": "mc", "sentence": "Du må passe på ___.", "answers": ["dig"], "options": ["sig", "dig", "mig"], "explain": "2. person bruger normal objektsform (dig)."}, {"id": 55, "section": 2, "type": "input", "sentence": "Hun føler ___ syg i dag.", "answers": ["sig"], "explain": "3. person (hun) refleksiv = sig."}, {"id": 56, "section": 2, "type": "mc", "sentence": "Vi keder ___ til mødet.", "answers": ["os"], "options": ["os", "sig", "jer"], "explain": "1. person flertal bruger normal objektsform (os)."}, {"id": 57, "section": 2, "type": "input", "sentence": "Lars klæder ___ på.", "answers": ["sig"], "explain": "3. person (han) refleksiv = sig."}, {"id": 58, "section": 2, "type": "mc", "sentence": "Jeg har skåret ___ i fingeren.", "answers": ["mig"], "options": ["mig", "sig", "dig"], "explain": "1. person → mig."}, {"id": 59, "section": 2, "type": "input", "sentence": "Anna har sat ___ på sofaen.", "answers": ["sig"], "explain": "3. person (hun) refleksiv = sig."}, {"id": 60, "section": 2, "type": "mc", "sentence": "Pas på, du skal ikke slå ___!", "answers": ["dig"], "options": ["sig", "dig", "mig"], "explain": "2. person → dig."}, {"id": 61, "section": 2, "type": "input", "sentence": "Han har glædet ___ hele ugen.", "answers": ["sig"], "explain": "han → sig."}, {"id": 62, "section": 2, "type": "mc", "sentence": "Børnene har lært at klæde ___ på selv.", "answers": ["sig"], "options": ["sig", "dem", "os"], "explain": "børnene = de → sig som refleksiv."}, {"id": 63, "section": 2, "type": "input", "sentence": "Jeg vasker ___, før jeg går i seng.", "answers": ["mig"], "explain": "1. person → mig."}, {"id": 64, "section": 2, "type": "mc", "sentence": "Hun har gemt ___ bag sofaen.", "answers": ["sig"], "options": ["sig", "hende", "sin"], "explain": "hun → sig (refleksiv objekt)."}, {"id": 65, "section": 2, "type": "input", "sentence": "Vi skal forberede ___ til eksamen.", "answers": ["os"], "explain": "vi → os."}, {"id": 66, "section": 2, "type": "mc", "sentence": "Du skal ikke bekymre ___ om det.", "answers": ["dig"], "options": ["sig", "dig", "mig"], "explain": "du → dig."}, {"id": 67, "section": 2, "type": "input", "sentence": "Han har lige barberet ___.", "answers": ["sig"], "explain": "han → sig."}, {"id": 68, "section": 2, "type": "mc", "sentence": "Hun har klippet ___ i håret.", "answers": ["sig"], "options": ["sig", "hende", "sin"], "explain": "hun har gjort det på sig selv → sig."}, {"id": 69, "section": 2, "type": "input", "sentence": "Vi har taget ___ god tid til det.", "answers": ["os"], "explain": "vi → os."}, {"id": 70, "section": 2, "type": "mc", "sentence": "Han skyndte ___ hjem fra arbejde.", "answers": ["sig"], "options": ["sig", "ham", "han"], "explain": "han → sig."}, {"id": 71, "section": 2, "type": "mc", "sentence": "Peter besøger ___ mor i weekenden. (Peters egen)", "answers": ["sin"], "options": ["sin", "sit", "sine"], "explain": "Peter er subjekt og ejer mor (en-ord) → sin."}, {"id": 72, "section": 2, "type": "mc", "sentence": "Anna har glemt ___ pas. (Annas eget)", "answers": ["sit"], "options": ["sin", "sit", "sine"], "explain": "et pas (et-ord), Anna er subjekt og ejer det → sit."}, {"id": 73, "section": 2, "type": "mc", "sentence": "Lars taler med ___ kolleger. (Lars' egne)", "answers": ["sine"], "options": ["sin", "sit", "sine"], "explain": "kolleger (flertal), Lars er subjekt → sine."}, {"id": 74, "section": 2, "type": "input", "sentence": "Hun læser ___ bog. (hendes egen, en bog)", "answers": ["sin"], "explain": "en bog + hun ejer den + hun er subjekt → sin."}, {"id": 75, "section": 2, "type": "mc", "sentence": "Han sælger ___ hus. (hans eget)", "answers": ["sit"], "options": ["sin", "sit", "sine"], "explain": "et hus + han er subjekt → sit."}, {"id": 76, "section": 2, "type": "input", "sentence": "Peter elsker ___ børn. (hans egne, flertal)", "answers": ["sine"], "explain": "børn (flertal) + Peter er subjekt → sine."}, {"id": 77, "section": 2, "type": "mc", "sentence": "Maria besøger ___ veninde. (hendes egen)", "answers": ["sin"], "options": ["sin", "sit", "sine"], "explain": "en veninde + Maria er subjekt → sin."}, {"id": 78, "section": 2, "type": "input", "sentence": "Han har mistet ___ ur. (hans eget, et ur)", "answers": ["sit"], "explain": "et ur + han er subjekt → sit."}, {"id": 79, "section": 2, "type": "mc", "sentence": "Han taler med ___ datter. (hans egen)", "answers": ["sin"], "options": ["sin", "sit", "sine"], "explain": "en datter + han er subjekt → sin."}, {"id": 80, "section": 2, "type": "input", "sentence": "Hun har sendt ___ brev. (hendes eget, et brev)", "answers": ["sit"], "explain": "et brev + hun er subjekt → sit."}, {"id": 81, "section": 2, "type": "mc", "sentence": "Han har solgt ___ gamle bil. (hans egen)", "answers": ["sin"], "options": ["sin", "sit", "sine"], "explain": "en bil + han er subjekt → sin."}, {"id": 82, "section": 2, "type": "input", "sentence": "Han har inviteret ___ venner. (hans egne)", "answers": ["sine"], "explain": "venner (flertal) + han er subjekt → sine."}, {"id": 83, "section": 2, "type": "mc", "sentence": "Anna kører ___ bil på arbejde. (hendes egen)", "answers": ["sin"], "options": ["sin", "sit", "sine"], "explain": "en bil + Anna er subjekt → sin."}, {"id": 84, "section": 2, "type": "input", "sentence": "Han har glemt ___ paraply. (hans egen)", "answers": ["sin"], "explain": "en paraply + han er subjekt → sin."}, {"id": 85, "section": 2, "type": "mc", "sentence": "Hun har malet ___ køkken. (hendes eget)", "answers": ["sit"], "options": ["sin", "sit", "sine"], "explain": "et køkken + hun er subjekt → sit."}, {"id": 86, "section": 2, "type": "input", "sentence": "Peter elsker ___ nye sko. (hans egne)", "answers": ["sine"], "explain": "sko (flertal) + Peter er subjekt → sine."}, {"id": 87, "section": 2, "type": "mc", "sentence": "Hun pakker ___ kufferter. (hendes egne)", "answers": ["sine"], "options": ["sin", "sit", "sine"], "explain": "kufferter (flertal) + hun er subjekt → sine."}, {"id": 88, "section": 2, "type": "input", "sentence": "Hun har mistet ___ telefon. (hendes egen)", "answers": ["sin"], "explain": "en telefon + hun er subjekt → sin."}, {"id": 89, "section": 2, "type": "mc", "sentence": "Lars er stolt af ___ arbejde. (hans eget)", "answers": ["sit"], "options": ["sin", "sit", "sine"], "explain": "et arbejde + Lars er subjekt → sit."}, {"id": 90, "section": 2, "type": "input", "sentence": "Han har talt med ___ chef. (hans egen)", "answers": ["sin"], "explain": "en chef + han er subjekt → sin."}, {"id": 91, "section": 2, "type": "mc", "sentence": "Maria besøger Peter og ___ kone. (Peters kone — Maria er subjekt)", "answers": ["hans"], "options": ["sin", "hans"], "explain": "Subjektet er Maria. Konen tilhører Peter (objektet), ikke subjektet → hans."}, {"id": 92, "section": 2, "type": "mc", "sentence": "Peter besøger Anna og ___ datter. (Annas datter — Peter er subjekt)", "answers": ["hendes"], "options": ["sin", "hendes"], "explain": "Subjektet er Peter. Datteren tilhører Anna → hendes."}, {"id": 93, "section": 2, "type": "mc", "sentence": "Lars er på ferie med ___ kone. (Lars' egen — Lars er subjekt)", "answers": ["sin"], "options": ["sin", "hans"], "explain": "Lars er subjekt og ejer konen → sin."}, {"id": 94, "section": 2, "type": "mc", "sentence": "Anna har inviteret Lars og ___ kone. (Lars' kone — Anna er subjekt)", "answers": ["hans"], "options": ["sin", "hans"], "explain": "Anna er subjekt, konen tilhører Lars → hans."}, {"id": 95, "section": 2, "type": "input", "sentence": "Han kører Maria hjem i ___ bil. (hans egen bil)", "answers": ["sin"], "explain": "han er subjekt, ejer bilen → sin."}, {"id": 96, "section": 2, "type": "mc", "sentence": "Hun låner penge af Peter og ___ bror. (Peters bror — hun er subjekt)", "answers": ["hans"], "options": ["sin", "hans"], "explain": "Hun er subjekt, broren tilhører Peter → hans."}, {"id": 97, "section": 2, "type": "input", "sentence": "Peter har lavet maden hos ___ mor. (Peters egen)", "answers": ["sin"], "explain": "Peter er subjekt og ejer mor → sin."}, {"id": 98, "section": 2, "type": "mc", "sentence": "Maria køber en gave til Lars og ___ kone. (Lars' kone)", "answers": ["hans"], "options": ["sin", "hans"], "explain": "Maria er subjekt, konen er Lars' → hans."}, {"id": 99, "section": 2, "type": "input", "sentence": "De har solgt ___ hus til naboen. (deres eget)", "answers": ["deres"], "alt": ["sit"], "explain": "de = flertal subjekt. Både 'deres' og 'sit' er teknisk korrekte, men deres er mest brugt."}, {"id": 100, "section": 2, "type": "mc", "sentence": "Peter og Lars besøger ___ forældre sammen. (deres egne)", "answers": ["deres"], "options": ["sine", "deres"], "alt": ["sine"], "explain": "Flertal subjekt. Begge accepteres traditionelt, men 'deres' bruges typisk."}, {"id": 101, "section": 3, "type": "mc", "sentence": "Bogen, ___ jeg læser nu, er meget spændende.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "Bogen er OBJEKT i bisætningen (jeg læser bogen) → kun som."}, {"id": 102, "section": 3, "type": "input", "sentence": "Pigen, ___ cykel er væk, er ked af det.", "answers": ["hvis"], "explain": "Viser ejerskab (pigens cykel) → hvis."}, {"id": 103, "section": 3, "type": "mc", "sentence": "Filmen, ___ vi så i går, var rigtig god.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "filmen er objekt (vi så filmen) → som."}, {"id": 104, "section": 3, "type": "mc", "sentence": "Kvinden, ___ hund løber i parken, er min nabo.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (kvindens hund) → hvis."}, {"id": 105, "section": 3, "type": "input", "sentence": "Manden, ___ bor ved siden af mig, er meget flink.", "answers": ["der"], "alt": ["som"], "explain": "manden er subjekt i bisætningen → både der og som er ok."}, {"id": 106, "section": 3, "type": "mc", "sentence": "Kagen, ___ min mor bagte, smagte godt.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "kagen er objekt (min mor bagte kagen) → som."}, {"id": 107, "section": 3, "type": "mc", "sentence": "Drengen, ___ navn jeg ikke kan huske, ringede i går.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (drengens navn) → hvis."}, {"id": 108, "section": 3, "type": "input", "sentence": "Læreren, ___ underviser i dansk, er meget dygtig.", "answers": ["der"], "alt": ["som"], "explain": "læreren er subjekt → både der og som."}, {"id": 109, "section": 3, "type": "mc", "sentence": "Brevet, ___ jeg fik i går, var fra min mor.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "brevet er objekt (jeg fik brevet) → som."}, {"id": 110, "section": 3, "type": "mc", "sentence": "Studenten, ___ eksamen var i går, er nervøs.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (studentens eksamen) → hvis."}, {"id": 111, "section": 3, "type": "input", "sentence": "Jeg kender en pige, ___ taler fem sprog.", "answers": ["der"], "alt": ["som"], "explain": "pigen er subjekt → der eller som."}, {"id": 112, "section": 3, "type": "mc", "sentence": "Den person, ___ vi mødte til festen, var rar.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "personen er objekt (vi mødte personen) → som."}, {"id": 113, "section": 3, "type": "mc", "sentence": "Det er familien, ___ datter går i samme klasse som mit barn.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (familiens datter) → hvis."}, {"id": 114, "section": 3, "type": "input", "sentence": "Pakken, ___ kom i dag, er fra min far.", "answers": ["der"], "alt": ["som"], "explain": "pakken er subjekt → der eller som."}, {"id": 115, "section": 3, "type": "mc", "sentence": "Mit barn, ___ jeg er meget stolt af, læser meget.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "barnet er objekt for 'stolt af' → som."}, {"id": 116, "section": 3, "type": "mc", "sentence": "Drengen, ___ forældre bor i Aarhus, læser i København.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (drengens forældre) → hvis."}, {"id": 117, "section": 3, "type": "input", "sentence": "Den sang, ___ vi hørte i radioen, var dejlig.", "answers": ["som"], "explain": "sangen er objekt (vi hørte sangen) → kun som."}, {"id": 118, "section": 3, "type": "mc", "sentence": "Manden, ___ vi taler om, kommer i morgen.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "manden er objekt (vi taler om manden) → som."}, {"id": 119, "section": 3, "type": "mc", "sentence": "Bilen, ___ farve er rød, er min.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (bilens farve) → hvis."}, {"id": 120, "section": 3, "type": "input", "sentence": "Naboen, ___ altid er hjælpsom, har en hund.", "answers": ["der"], "alt": ["som"], "explain": "naboen er subjekt → der eller som."}, {"id": 121, "section": 3, "type": "mc", "sentence": "Lejligheden, ___ jeg lige har købt, er meget stor.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "lejligheden er objekt (jeg købte lejligheden) → som."}, {"id": 122, "section": 3, "type": "mc", "sentence": "Pigen, ___ mor er læge, vil også være læge.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (pigens mor) → hvis."}, {"id": 123, "section": 3, "type": "input", "sentence": "Bogen, ___ ligger på bordet, er min.", "answers": ["der"], "alt": ["som"], "explain": "bogen er subjekt → der eller som."}, {"id": 124, "section": 3, "type": "mc", "sentence": "Min ven, ___ jeg har kendt i mange år, bor i Aarhus.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "vennen er objekt (jeg har kendt vennen) → som."}, {"id": 125, "section": 3, "type": "mc", "sentence": "Manden, ___ bog jeg har lånt, hedder Peter.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (mandens bog) → hvis."}, {"id": 126, "section": 3, "type": "input", "sentence": "Læreren, ___ vi alle elsker, er meget sjov.", "answers": ["som"], "explain": "læreren er objekt (vi elsker læreren) → kun som."}, {"id": 127, "section": 3, "type": "mc", "sentence": "Hunden, ___ ejer er min ven, hedder Buddy.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (hundens ejer) → hvis."}, {"id": 128, "section": 3, "type": "mc", "sentence": "Filmen, ___ jeg så i går, var ikke særlig god.", "answers": ["som"], "options": ["som", "der", "hvis"], "explain": "filmen er objekt (jeg så filmen) → som."}, {"id": 129, "section": 3, "type": "input", "sentence": "Pigen, ___ sidder ved siden af mig, hedder Sara.", "answers": ["der"], "alt": ["som"], "explain": "pigen er subjekt → der eller som."}, {"id": 130, "section": 3, "type": "mc", "sentence": "Den studerende, ___ bog er forsvundet, leder overalt.", "answers": ["hvis"], "options": ["som", "der", "hvis"], "explain": "Ejerskab (den studerendes bog) → hvis."}, {"id": 131, "section": 4, "type": "input", "sentence": "I Danmark spiser ___ meget rugbrød.", "answers": ["man"], "explain": "Generelt 'folk/man' → man."}, {"id": 132, "section": 4, "type": "mc", "sentence": "Vil du have ___ kaffe?", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "kaffe er ikke-tællelig (mængde) → noget."}, {"id": 133, "section": 4, "type": "mc", "sentence": "Jeg har ___ gode venner i Aarhus.", "answers": ["nogle"], "options": ["nogen", "noget", "nogle"], "explain": "Positiv sætning + flertal tællelig → nogle (med l)."}, {"id": 134, "section": 4, "type": "input", "sentence": "Er der ___ hjemme?", "answers": ["nogen"], "explain": "Spørgsmål om en person → nogen."}, {"id": 135, "section": 4, "type": "mc", "sentence": "Jeg kan ikke se ___ i mørket.", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "Negativ + abstrakt 'noget som helst' → noget."}, {"id": 136, "section": 4, "type": "input", "sentence": "Der er ___ i huset. Det er helt tomt.", "answers": ["ingen"], "explain": "'Ingen person' → ingen."}, {"id": 137, "section": 4, "type": "mc", "sentence": "Han bor sammen med ___ venner fra studietiden.", "answers": ["nogle"], "options": ["nogen", "noget", "nogle"], "explain": "Positiv + flertal tællelig → nogle."}, {"id": 138, "section": 4, "type": "input", "sentence": "___ siger, at vejret bliver bedre i morgen.", "answers": ["Man"], "explain": "'Folk/man siger' → Man (stort M ved sætningsstart)."}, {"id": 139, "section": 4, "type": "mc", "sentence": "Vil du have ___ at drikke?", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "'Noget at drikke' (abstrakt) → noget."}, {"id": 140, "section": 4, "type": "input", "sentence": "Jeg har købt ___ blomster til min mor.", "answers": ["nogle"], "explain": "Positiv + flertal tællelig → nogle."}, {"id": 141, "section": 4, "type": "mc", "sentence": "Der er ikke ___ mælk tilbage.", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "mælk er ikke-tællelig → noget."}, {"id": 142, "section": 4, "type": "input", "sentence": "I sommerhuset kan ___ slappe godt af.", "answers": ["man"], "explain": "Generelt 'man/folk' → man."}, {"id": 143, "section": 4, "type": "mc", "sentence": "Har du ___ idé om, hvor han er?", "answers": ["nogen"], "options": ["nogen", "noget", "nogle"], "explain": "Spørgsmål + tællelig ental → nogen."}, {"id": 144, "section": 4, "type": "mc", "sentence": "Jeg har ikke fortalt ___ om det.", "answers": ["nogen"], "options": ["nogen", "noget", "nogle"], "explain": "Negativ + person ('nogen som helst person') → nogen."}, {"id": 145, "section": 4, "type": "input", "sentence": "___ skal lære at vente på sin tur.", "answers": ["Man"], "explain": "Generelt 'folk/alle' → Man."}, {"id": 146, "section": 4, "type": "mc", "sentence": "Vil du have ___ kage?", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "kage er ikke-tællelig her (mængde) → noget."}, {"id": 147, "section": 4, "type": "input", "sentence": "Jeg vil gerne høre ___ musik nu.", "answers": ["noget"], "explain": "musik er ikke-tællelig → noget."}, {"id": 148, "section": 4, "type": "mc", "sentence": "Er der ___ tilbage at gøre?", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "Abstrakt 'noget som helst' → noget."}, {"id": 149, "section": 4, "type": "input", "sentence": "Der er ___ til at hjælpe os.", "answers": ["ingen"], "explain": "'Ingen person' → ingen."}, {"id": 150, "section": 4, "type": "mc", "sentence": "Jeg har ___ vigtigt at fortælle dig.", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "Abstrakt 'noget som helst' → noget."}, {"id": 151, "section": 4, "type": "input", "sentence": "Når ___ rejser, ser man mange spændende steder.", "answers": ["man"], "explain": "Generelt 'man' → man."}, {"id": 152, "section": 4, "type": "mc", "sentence": "Vi har ___ planer for weekenden.", "answers": ["nogle"], "options": ["nogen", "noget", "nogle"], "explain": "Positiv + flertal tællelig → nogle."}, {"id": 153, "section": 4, "type": "mc", "sentence": "Han har ___ problemer i øjeblikket.", "answers": ["nogle"], "options": ["nogen", "noget", "nogle"], "explain": "Positiv + flertal tællelig → nogle."}, {"id": 154, "section": 4, "type": "input", "sentence": "Har du ___ at sige?", "answers": ["noget"], "explain": "Abstrakt 'noget' → noget."}, {"id": 155, "section": 4, "type": "mc", "sentence": "Jeg har ikke ___ tid lige nu.", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "tid er ikke-tællelig → noget."}, {"id": 156, "section": 4, "type": "input", "sentence": "Der er ___ kage tilbage. Vi har spist det hele.", "answers": ["ingen"], "explain": "'Ingen kage' → ingen."}, {"id": 157, "section": 4, "type": "mc", "sentence": "Vil du have ___ vand?", "answers": ["noget"], "options": ["nogen", "noget", "nogle"], "explain": "vand er ikke-tællelig → noget."}, {"id": 158, "section": 4, "type": "input", "sentence": "I dette land hilser ___ med et håndtryk.", "answers": ["man"], "explain": "Generelt 'man/folk' → man."}, {"id": 159, "section": 4, "type": "mc", "sentence": "Jeg så ___ interessante film i biografen.", "answers": ["nogle"], "options": ["nogen", "noget", "nogle"], "explain": "Positiv + flertal tællelig → nogle."}, {"id": 160, "section": 4, "type": "input", "sentence": "Der er ___ derhjemme. Alle er ude.", "answers": ["ingen"], "explain": "'Ingen person' → ingen."}, {"id": 161, "section": 5, "type": "multi", "sentence": "Jeg kender Lars godt. Han er ___ bedste ven, og jeg taler tit med ___.", "answers": ["min", "ham"], "explain": "min (en ven, 1. person), ham (Lars som objekt)."}, {"id": 162, "section": 5, "type": "multi", "sentence": "Anna har en stor have. ___ have er fyldt med blomster, som ___ selv har plantet.", "answers": ["Hendes", "hun"], "explain": "Hendes (Anna ejer haven, men haven er subjekt i sætningen), hun (Anna som subjekt i bisætningen)."}, {"id": 163, "section": 5, "type": "multi", "sentence": "Peter besøger ___ mor og hjælper ___ med havearbejdet.", "answers": ["sin", "hende"], "explain": "sin (Peter er subjekt, ejer mor), hende (mor som objekt)."}, {"id": 164, "section": 5, "type": "multi", "sentence": "Børnene har glædet ___ hele ugen. ___ ferie starter i morgen.", "answers": ["sig", "Deres"], "explain": "sig (refleksiv for de), Deres (de ejer ferien, men ferien er subjekt)."}, {"id": 165, "section": 5, "type": "multi", "sentence": "Min mand laver mad. Jeg synes, at ___ mad altid er lækker, og jeg spiser ___ med stor appetit.", "answers": ["hans", "den"], "explain": "hans (manden ejer maden, men maden er subjekt), den (mad = en-ord)."}, {"id": 166, "section": 5, "type": "multi", "sentence": "Vi har en ny kollega. ___ navn er Lars, og vi kan godt lide ___.", "answers": ["Hans", "ham"], "explain": "Hans (kollegaen ejer navnet, men navnet er subjekt), ham (Lars som objekt)."}, {"id": 167, "section": 5, "type": "multi", "sentence": "Anna ringer til Peter. Hun fortæller ___, at ___ har lyst til at gå i biografen.", "answers": ["ham", "hun"], "explain": "ham (Peter som objekt), hun (Anna som subjekt i bisætningen)."}, {"id": 168, "section": 5, "type": "multi", "sentence": "Hvor er ___ briller? Jeg kan ikke finde ___. (du, flertal)", "answers": ["dine", "dem"], "explain": "dine (briller flertal, 2. person), dem (briller som objekt)."}, {"id": 169, "section": 5, "type": "multi", "sentence": "Maria er glad. ___ har lige købt ___ første bil. (en bil, hendes egen)", "answers": ["Hun", "sin"], "explain": "Hun (subjekt), sin (Maria er subjekt og ejer bilen, en-ord)."}, {"id": 170, "section": 5, "type": "multi", "sentence": "Når Peter får ___ løn, køber han noget til ___ kone. (Peters egen løn og egen kone)", "answers": ["sin", "sin"], "explain": "sin (Peter er subjekt, ejer lønnen, en-ord), sin (Peter er subjekt, ejer konen, en-ord)."}, {"id": 171, "section": 5, "type": "multi", "sentence": "Jeg har en god ven. Han hedder Lars, og ___ er ___ bedste ven. ___ taler tit sammen.", "answers": ["han", "min", "Vi"], "explain": "han (subjekt), min (en ven, 1. person), Vi (vennen og jeg sammen)."}, {"id": 172, "section": 5, "type": "multi", "sentence": "Anna er flink. Jeg kan godt lide ___. ___ er en god veninde, og ___ hjælper altid mig.", "answers": ["hende", "Hun", "hun"], "explain": "hende (Anna som objekt), Hun (subjekt), hun (subjekt i ny sætningsdel)."}, {"id": 173, "section": 5, "type": "multi", "sentence": "Børnene leger i haven. ___ har glædet ___ hele dagen, og nu er ___ trætte.", "answers": ["De", "sig", "de"], "explain": "De (subjekt), sig (refleksiv for de), de (subjekt igen)."}, {"id": 174, "section": 5, "type": "multi", "sentence": "Peter elsker ___ kone og ___ børn. ___ tager dem ofte med på ferie.", "answers": ["sin", "sine", "Han"], "explain": "sin (Peter subjekt, kone en-ord), sine (børn flertal), Han (subjekt)."}, {"id": 175, "section": 5, "type": "multi", "sentence": "Vi har en ny lærer. ___ navn er Maria. Vi kan godt lide ___, fordi ___ er meget tålmodig.", "answers": ["Hendes", "hende", "hun"], "explain": "Hendes (læreren ejer navnet, men navnet er subjekt), hende (Maria som objekt), hun (subjekt i bisætning)."}, {"id": 176, "section": 5, "type": "multi", "sentence": "Anna er på vej hjem. ___ skal hjem og lave mad til ___ mand og ___ børn. (Annas egne)", "answers": ["Hun", "sin", "sine"], "explain": "Hun (subjekt), sin (Anna ejer mand, en-ord), sine (børn flertal)."}, {"id": 177, "section": 5, "type": "multi", "sentence": "Lars er glad i dag. Han har fået ___ første job, og ___ skal starte på arbejde i ___ nye firma i morgen.", "answers": ["sit", "han", "sit"], "explain": "sit (et job, Lars ejer det), han (subjekt), sit (et firma, Lars ejer det)."}, {"id": 178, "section": 5, "type": "multi", "sentence": "Min søster har en bil. ___ kører ofte ___ veninder til arbejde i ___. (bilen)", "answers": ["Hun", "sine", "den"], "explain": "Hun (subjekt), sine (veninder flertal, hun ejer dem), den (bilen, en-ord)."}, {"id": 179, "section": 5, "type": "multi", "sentence": "Vi har inviteret Anna og Lars. ___ kommer i morgen, og vi skal lave mad til ___. Jeg håber, ___ kan lide vores mad.", "answers": ["De", "dem", "de"], "explain": "De (subjekt), dem (objekt), de (subjekt i bisætning)."}, {"id": 180, "section": 5, "type": "multi", "sentence": "Peter taler med ___ chef. ___ chef vil gerne have, at ___ kommer på arbejde i weekenden. (Peters chef)", "answers": ["sin", "Hans", "han"], "explain": "sin (Peter subjekt, chef en-ord), Hans (chefen tilhører Peter, men chefen er subjekt nu), han (Peter som subjekt i bisætning)."}, {"id": 181, "section": 5, "type": "multi", "sentence": "Anna har en god ven, Peter. ___ er meget sød ved ___. ___ taler ofte sammen om ___ problemer.", "answers": ["Han", "hende", "De", "deres"], "explain": "Han (Peter subjekt), hende (Anna objekt), De (Anna og Peter sammen), deres (flertal subjekt ejer problemer)."}, {"id": 182, "section": 5, "type": "multi", "sentence": "Vi har lige fået en hund. ___ er meget legesyg. Børnene elsker ___, og ___ leger med ___ hele dagen.", "answers": ["Den", "den", "de", "den"], "explain": "Den (hunden, en-ord), den (hunden som objekt), de (børnene), den (hunden som objekt igen)."}, {"id": 183, "section": 5, "type": "multi", "sentence": "Peter besøger ___ mor i Aarhus. ___ er glad for at se ___ og laver ___ livret. (Peters egen mor)", "answers": ["sin", "Hun", "ham", "hans"], "explain": "sin (Peter subjekt, mor en-ord), Hun (moren subjekt), ham (Peter objekt), hans (livret tilhører Peter, men livret er subjekt)."}, {"id": 184, "section": 5, "type": "multi", "sentence": "Maria og Lars rejser til Italien. ___ har glædet ___ længe. ___ skal besøge ___ familie og rejse rundt med ___ børn.", "answers": ["De", "sig", "De", "deres", "deres"], "explain": "De (subjekt), sig (refleksiv for de), De (subjekt), deres (flertal ejer familie), deres (flertal ejer børn)."}, {"id": 185, "section": 5, "type": "multi", "sentence": "Jeg har en ny kollega. ___ hedder Anna, og ___ kommer fra Sverige. Jeg kan godt lide ___, og ___ taler ofte sammen i pausen.", "answers": ["Hun", "hun", "hende", "vi"], "explain": "Hun (Anna subjekt), hun (subjekt igen), hende (Anna objekt), vi (Anna og jeg sammen)."}, {"id": 186, "section": 5, "type": "multi", "sentence": "Peter har glemt ___ telefon hjemme. ___ kone har fundet ___. Hun siger, at ___ må passe bedre på ___ ting. (Peters egne)", "answers": ["sin", "Hans", "den", "han", "sine"], "explain": "sin (Peter ejer telefon, en-ord), Hans (konen tilhører Peter, men konen er subjekt), den (telefonen, en-ord), han (Peter subjekt i bisætning), sine (ting flertal, han ejer dem)."}, {"id": 187, "section": 5, "type": "multi", "sentence": "Anna møder ___ veninde til en kop kaffe. ___ taler om ___ planer for sommeren. Bagefter går Anna hjem og laver mad til ___ kæreste. (Annas egne)", "answers": ["sin", "De", "deres", "sin"], "explain": "sin (Anna subjekt, veninde en-ord), De (Anna og veninden), deres (flertal ejer planer), sin (Anna subjekt, kæreste en-ord)."}, {"id": 188, "section": 5, "type": "multi", "sentence": "Vi har lejet et sommerhus. ___ ligger ved havet. ___ kan godt lide ___, og børnene elsker at lege i haven.", "answers": ["Det", "Vi", "det"], "explain": "Det (huset, et-ord), Vi (subjekt), det (huset som objekt)."}, {"id": 189, "section": 5, "type": "multi", "sentence": "Min søn har lige fået ___ første cykel. ___ er meget glad for ___, og ___ kører rundt med ___ hver dag.", "answers": ["sin", "Han", "den", "han", "den"], "explain": "sin (sønnen subjekt, cykel en-ord), Han (subjekt), den (cyklen), han (subjekt), den (cyklen)."}, {"id": 190, "section": 5, "type": "multi", "sentence": "Anna er på arbejde. ___ taler med ___ chef om ___ projekt. ___ chef siger, at ___ skal levere det i morgen.", "answers": ["Hun", "sin", "sit", "Hendes", "hun"], "explain": "Hun (subjekt), sin (Anna ejer chef, en-ord), sit (projekt et-ord, Anna ejer), Hendes (chefen er Annas, men chefen er subjekt nu), hun (Anna subjekt i bisætning)."}, {"id": 191, "section": 5, "type": "multi", "sentence": "Lars har en god ven. ___ ven hedder Peter. ___ taler ofte sammen om ___ liv. Når Lars har problemer, ringer ___ til Peter. Peter giver altid ___ god rådgivning.", "answers": ["Hans", "De", "deres", "han", "ham"], "explain": "Hans (Lars ejer vennen, men vennen er subjekt), De (Lars og Peter), deres (flertal ejer liv), han (Lars subjekt), ham (Lars objekt)."}, {"id": 192, "section": 5, "type": "multi", "sentence": "Anna er taget på ferie til Spanien. ___ rejser sammen med ___ mand og ___ to børn. ___ skal besøge ___ forældre, som bor i Madrid.", "answers": ["Hun", "sin", "sine", "De", "deres"], "explain": "Hun (Anna subjekt), sin (mand en-ord, Anna ejer), sine (børn flertal, Anna ejer), De (Anna og familien sammen), deres (flertal subjekt ejer forældre)."}, {"id": 193, "section": 5, "type": "multi", "sentence": "Peter har en lille datter. ___ hedder Mia og er fem år gammel. ___ leger ofte med ___ venner. Peter elsker ___ meget og bruger meget tid med ___.", "answers": ["Hun", "Hun", "sine", "hende", "hende"], "explain": "Hun (Mia subjekt), Hun (subjekt), sine (venner flertal, Mia subjekt ejer dem), hende (Mia objekt), hende (Mia objekt)."}, {"id": 194, "section": 5, "type": "multi", "sentence": "Vi har en ny kollega på arbejdet. ___ hedder Lars, og ___ kommer fra Norge. ___ taler godt dansk, men ___ accent er stadig norsk. Jeg synes, ___ er meget sympatisk.", "answers": ["Han", "han", "Han", "hans", "han"], "explain": "Han (Lars subjekt), han (subjekt), Han (subjekt), hans (Lars ejer accent, men accent er subjekt), han (Lars subjekt)."}, {"id": 195, "section": 5, "type": "multi", "sentence": "Min søster har lige købt ___ første hus. ___ er meget stolt af ___. ___ har malet alle værelser selv. Vi besøger ___ på lørdag.", "answers": ["sit", "Hun", "det", "Hun", "hende"], "explain": "sit (hus et-ord, søsteren subjekt ejer), Hun (subjekt), det (huset), Hun (subjekt), hende (søsteren som objekt)."}, {"id": 196, "section": 5, "type": "multi", "sentence": "Børnene leger udenfor. ___ har glædet ___ til at lege hele dagen. Når ___ kommer ind, skal ___ vaske ___ og spise aftensmad.", "answers": ["De", "sig", "de", "de", "sig"], "explain": "De (subjekt), sig (refleksiv), de (subjekt), de (subjekt), sig (refleksiv)."}, {"id": 197, "section": 5, "type": "multi", "sentence": "Jeg har en gammel ven, Lars. Jeg har kendt ___ siden vi var børn. ___ er en del af ___ familie. Når jeg har problemer, ringer jeg altid til ___. ___ er der altid for mig.", "answers": ["ham", "Han", "min", "ham", "Han"], "explain": "ham (Lars objekt), Han (subjekt), min (1. person), ham (objekt), Han (subjekt)."}, {"id": 198, "section": 5, "type": "multi", "sentence": "Anna og hendes mand bor i et stort hus. ___ har boet i ___ hus i 20 år. ___ elsker ___ have og bruger meget tid i ___.", "answers": ["De", "deres", "De", "deres", "den"], "explain": "De (subjekt), deres (flertal ejer hus), De (subjekt), deres (flertal ejer have), den (haven, en-ord)."}, {"id": 199, "section": 5, "type": "multi", "sentence": "Vi har inviteret nogle venner til middag på lørdag. ___ skal lave mad, og ___ kommer kl. 19. Når ___ er færdige med at spise, vil ___ se en film sammen. Jeg glæder ___ til det. (jeg)", "answers": ["Vi", "de", "vi", "vi", "mig"], "explain": "Vi (subjekt), de (vennerne), vi (alle sammen som subjekt), vi (alle sammen), mig (refleksiv for jeg)."}, {"id": 200, "section": 5, "type": "multi", "sentence": "Maria har en stor familie. ___ har tre brødre og to søstre. ___ familie samles ofte til store fester. ___ taler altid meget højt, og ___ griner meget sammen. ___ elsker dem alle sammen.", "answers": ["Hun", "Hendes", "De", "de", "Hun"], "explain": "Hun (Maria subjekt), Hendes (Maria ejer familie, men familien er subjekt), De (familien som flertal subjekt), de (subjekt), Hun (Maria subjekt)."}];
|
||
|
||
const SECTION_LABELS = {
|
||
1: "Personlige & ejestedord",
|
||
2: "Refleksive",
|
||
3: "Relative",
|
||
4: "Ubestemte",
|
||
5: "Avanceret"
|
||
};
|
||
|
||
let answeredCount = 0;
|
||
let correctCount = 0;
|
||
const state = {};
|
||
|
||
function normalize(s) {
|
||
return (s || "").toLowerCase().trim().replace(/[.,!?;:]/g, "");
|
||
}
|
||
|
||
function renderQuestion(q) {
|
||
const article = document.createElement("article");
|
||
article.className = "question";
|
||
article.id = "q-" + q.id;
|
||
article.dataset.qid = q.id;
|
||
|
||
const isMulti = q.type === "multi" || q.answers.length > 1;
|
||
const typeLabel = q.type === "mc" ? "Vælg" : (isMulti ? `${q.answers.length} pronominer` : "Skriv");
|
||
const typeClass = q.type === "multi" ? "multi" : "";
|
||
|
||
// Header
|
||
const header = document.createElement("div");
|
||
header.className = "q-header";
|
||
header.innerHTML = `
|
||
<span class="q-number">Q${q.id}</span>
|
||
<span class="q-type ${typeClass}">${typeLabel}</span>
|
||
<span class="q-status" data-qid="${q.id}"></span>
|
||
`;
|
||
article.appendChild(header);
|
||
|
||
// Sentence + interactive elements
|
||
const sentence = document.createElement("p");
|
||
sentence.className = "q-sentence";
|
||
|
||
if (q.type === "mc") {
|
||
// Single MC: render sentence with blank, then options below
|
||
const parts = q.sentence.split("___");
|
||
sentence.innerHTML = parts[0] + `<span class="mc-blank" data-blank="0">_____</span>` + parts[1];
|
||
article.appendChild(sentence);
|
||
|
||
const opts = document.createElement("div");
|
||
opts.className = "q-options";
|
||
q.options.forEach(o => {
|
||
const btn = document.createElement("button");
|
||
btn.className = "q-opt";
|
||
btn.dataset.value = o;
|
||
btn.textContent = o;
|
||
btn.addEventListener("click", () => handleMC(q.id, o, btn));
|
||
opts.appendChild(btn);
|
||
});
|
||
article.appendChild(opts);
|
||
} else {
|
||
// Input or multi-input: render sentence with inline inputs
|
||
const parts = q.sentence.split("___");
|
||
let html = "";
|
||
parts.forEach((part, i) => {
|
||
html += part;
|
||
if (i < parts.length - 1) {
|
||
html += `<input type="text" class="q-blank-input" data-qid="${q.id}" data-blank="${i}" autocomplete="off" autocapitalize="off" spellcheck="false">`;
|
||
}
|
||
});
|
||
sentence.innerHTML = html;
|
||
article.appendChild(sentence);
|
||
|
||
// Check button row
|
||
const row = document.createElement("div");
|
||
row.className = "q-check-row";
|
||
const btn = document.createElement("button");
|
||
btn.className = "q-check";
|
||
btn.textContent = "Tjek svar";
|
||
btn.dataset.qid = q.id;
|
||
btn.addEventListener("click", () => handleInput(q.id));
|
||
row.appendChild(btn);
|
||
if (q.answers.length > 1) {
|
||
const hint = document.createElement("span");
|
||
hint.className = "q-hint";
|
||
hint.textContent = `Udfyld alle ${q.answers.length} felter`;
|
||
row.appendChild(hint);
|
||
}
|
||
article.appendChild(row);
|
||
}
|
||
|
||
// Feedback area
|
||
const fb = document.createElement("div");
|
||
fb.className = "q-feedback";
|
||
fb.dataset.qid = q.id;
|
||
article.appendChild(fb);
|
||
|
||
return article;
|
||
}
|
||
|
||
function handleInput(qid) {
|
||
const q = QUESTIONS.find(x => x.id === qid);
|
||
if (state[qid]) return;
|
||
const inputs = document.querySelectorAll(`.q-blank-input[data-qid="${qid}"]`);
|
||
let allCorrect = true;
|
||
const userAnswers = [];
|
||
inputs.forEach((input, i) => {
|
||
const expected = q.answers[i];
|
||
const alts = (q.alt && Array.isArray(q.alt)) ? (typeof q.alt[i] === 'string' ? [q.alt[i]] : (q.alt[i] || [])) : [];
|
||
const userVal = input.value;
|
||
userAnswers.push(userVal);
|
||
const norm = normalize(userVal);
|
||
const isCorrect = norm === normalize(expected) || alts.some(a => norm === normalize(a));
|
||
input.disabled = true;
|
||
if (isCorrect) {
|
||
input.classList.add("right");
|
||
} else {
|
||
input.classList.add("wrong");
|
||
allCorrect = false;
|
||
// append correction
|
||
const corr = document.createElement("span");
|
||
corr.className = "q-blank-correction";
|
||
corr.textContent = `→ ${expected}`;
|
||
input.insertAdjacentElement("afterend", corr);
|
||
}
|
||
});
|
||
const btn = document.querySelector(`.q-check[data-qid="${qid}"]`);
|
||
if (btn) btn.disabled = true;
|
||
markAnswered(qid, allCorrect, q);
|
||
}
|
||
|
||
function handleMC(qid, value, btn) {
|
||
const q = QUESTIONS.find(x => x.id === qid);
|
||
if (state[qid]) return;
|
||
const expected = q.answers[0];
|
||
const alts = q.alt || [];
|
||
const norm = normalize(value);
|
||
const isCorrect = norm === normalize(expected) || alts.some(a => norm === normalize(a));
|
||
btn.classList.add("picked", isCorrect ? "right" : "wrong");
|
||
document.querySelectorAll(`#q-${qid} .q-opt`).forEach(o => {
|
||
o.disabled = true;
|
||
if (o.dataset.value === expected) o.classList.add("show-correct");
|
||
});
|
||
markAnswered(qid, isCorrect, q);
|
||
}
|
||
|
||
function markAnswered(qid, isCorrect, q) {
|
||
state[qid] = { correct: isCorrect };
|
||
const article = document.getElementById("q-" + qid);
|
||
article.classList.add("answered", isCorrect ? "correct" : "incorrect");
|
||
|
||
const status = document.querySelector(`.q-status[data-qid="${qid}"]`);
|
||
status.textContent = isCorrect ? "✓ rigtigt" : "✗ forkert";
|
||
status.classList.add(isCorrect ? "right" : "wrong");
|
||
|
||
const fb = document.querySelector(`.q-feedback[data-qid="${qid}"]`);
|
||
const correctText = q.answers.join(", ");
|
||
const altText = q.alt ? ` (eller ${(Array.isArray(q.alt) ? q.alt.flat().filter(Boolean) : [q.alt]).join(", ")})` : "";
|
||
if (isCorrect) {
|
||
fb.innerHTML = `<span class="fb-icon">✓</span> Rigtigt!<span class="fb-explain">${q.explain || ""}</span>`;
|
||
fb.className = "q-feedback show correct";
|
||
} else {
|
||
fb.innerHTML = `<span class="fb-icon">✗</span> Det rigtige svar: <span class="fb-correct-answer">${correctText}</span>${altText}<span class="fb-explain">${q.explain || ""}</span>`;
|
||
fb.className = "q-feedback show incorrect";
|
||
}
|
||
|
||
answeredCount++;
|
||
if (isCorrect) correctCount++;
|
||
updateScore();
|
||
if (answeredCount === QUESTIONS.length) showSummary();
|
||
}
|
||
|
||
function updateScore() {
|
||
document.getElementById("score").textContent = correctCount;
|
||
document.getElementById("answered").textContent = answeredCount;
|
||
const pct = (answeredCount / QUESTIONS.length) * 100;
|
||
document.getElementById("progress-fill").style.width = pct + "%";
|
||
}
|
||
|
||
function showSummary() {
|
||
const card = document.getElementById("summary-card");
|
||
document.getElementById("sum-correct").textContent = correctCount;
|
||
document.getElementById("sum-total").textContent = QUESTIONS.length;
|
||
// Per-section breakdown
|
||
const bySection = {};
|
||
QUESTIONS.forEach(q => {
|
||
if (!bySection[q.section]) bySection[q.section] = { total: 0, correct: 0 };
|
||
bySection[q.section].total++;
|
||
if (state[q.id] && state[q.id].correct) bySection[q.section].correct++;
|
||
});
|
||
const breakdown = Object.keys(bySection).map(s =>
|
||
`<div style="display:flex;justify-content:space-between;padding:3px 0"><span>${SECTION_LABELS[s]}</span><span><b>${bySection[s].correct}</b>/${bySection[s].total}</span></div>`
|
||
).join("");
|
||
document.getElementById("sum-breakdown").innerHTML = breakdown;
|
||
card.classList.add("show");
|
||
}
|
||
|
||
function revealAll() {
|
||
QUESTIONS.forEach(q => {
|
||
if (state[q.id]) return;
|
||
const article = document.getElementById("q-" + q.id);
|
||
article.classList.add("revealed");
|
||
if (q.type === "mc") {
|
||
document.querySelectorAll(`#q-${q.id} .q-opt`).forEach(o => {
|
||
o.disabled = true;
|
||
if (o.dataset.value === q.answers[0]) o.classList.add("show-correct");
|
||
});
|
||
} else {
|
||
const inputs = document.querySelectorAll(`.q-blank-input[data-qid="${q.id}"]`);
|
||
inputs.forEach((input, i) => {
|
||
if (!input.value) input.value = q.answers[i];
|
||
input.disabled = true;
|
||
input.classList.add("right");
|
||
});
|
||
const btn = document.querySelector(`.q-check[data-qid="${q.id}"]`);
|
||
if (btn) btn.disabled = true;
|
||
}
|
||
const fb = document.querySelector(`.q-feedback[data-qid="${q.id}"]`);
|
||
const correctText = q.answers.join(", ");
|
||
fb.innerHTML = `<span class="fb-icon">→</span> Svar: <span class="fb-correct-answer">${correctText}</span><span class="fb-explain">${q.explain || ""}</span>`;
|
||
fb.className = "q-feedback show reveal";
|
||
});
|
||
}
|
||
|
||
function resetAll() {
|
||
if (!confirm("Nulstil alle svar?")) return;
|
||
answeredCount = 0;
|
||
correctCount = 0;
|
||
for (const k in state) delete state[k];
|
||
document.querySelectorAll(".question").forEach(a => {
|
||
a.classList.remove("answered", "correct", "incorrect", "revealed");
|
||
});
|
||
document.querySelectorAll(".q-blank-input").forEach(i => {
|
||
i.disabled = false; i.value = ""; i.classList.remove("right", "wrong");
|
||
});
|
||
document.querySelectorAll(".q-blank-correction").forEach(c => c.remove());
|
||
document.querySelectorAll(".q-check").forEach(b => b.disabled = false);
|
||
document.querySelectorAll(".q-opt").forEach(o => {
|
||
o.disabled = false;
|
||
o.classList.remove("picked", "right", "wrong", "show-correct");
|
||
});
|
||
document.querySelectorAll(".q-feedback").forEach(fb => {
|
||
fb.className = "q-feedback"; fb.innerHTML = "";
|
||
});
|
||
document.querySelectorAll(".q-status").forEach(s => {
|
||
s.textContent = ""; s.classList.remove("right", "wrong");
|
||
});
|
||
document.getElementById("summary-card").classList.remove("show");
|
||
updateScore();
|
||
window.scrollTo({ top: 0, behavior: "smooth" });
|
||
}
|
||
|
||
// Build all question DOM nodes inside their section containers
|
||
function build() {
|
||
QUESTIONS.forEach(q => {
|
||
const sec = document.querySelector(`#section-${q.section} .questions`);
|
||
if (sec) sec.appendChild(renderQuestion(q));
|
||
});
|
||
updateScore();
|
||
}
|
||
|
||
document.getElementById("btn-reveal").addEventListener("click", revealAll);
|
||
document.getElementById("btn-reset").addEventListener("click", resetAll);
|
||
document.getElementById("btn-print").addEventListener("click", () => window.print());
|
||
document.getElementById("close-summary").addEventListener("click", () =>
|
||
document.getElementById("summary-card").classList.remove("show")
|
||
);
|
||
|
||
// Enter key checks the current input's question
|
||
document.addEventListener("keydown", (e) => {
|
||
if (e.key === "Enter" && e.target.classList && e.target.classList.contains("q-blank-input")) {
|
||
e.preventDefault();
|
||
const qid = parseInt(e.target.dataset.qid, 10);
|
||
handleInput(qid);
|
||
}
|
||
});
|
||
|
||
build();
|
||
</script>
|
||
</body>
|
||
</html>
|