Dette er oppskriften en Claude i nettleseren skal jobbe etter når den ser
på en øvelsesside og skal lage en animasjon til øvelsesbanken. Den beskriver
formatet, målene, figurene, bevegelsesspråket og malen vi har godkjent.
Du trenger ikke lime inn hele teksten. Stå på øvelsessida, åpne Claude,
og skriv: «Les adressen under, følg den, og lag en øvelse av sida jeg står
på» – med adressen til denne siden. Da leser den oppskriften selv.
Legg til dine egne rammer: alder, antall spillere, areal, utstyr, øktlengde,
og om keeper skal være med.
Svaret limes inn i byggeren. Treffer det ikke
formatet helt, oversetter byggeren det og skriver hva den endret.
# Brief til nettleser-Claude
Alt under streken er oppskriften nettleser-Claude skal jobbe etter. Den er også
publisert som side, bygd av denne fila: `brief.html` ved siden av `ny.html`.
**Slik brukes den.** Stå på øvelsessida, åpne Claude i Chrome, og skriv:
> Les `<adressen til brief.html>`, følg den, og lag en øvelse av sida jeg står på.
Da leser den oppskriften selv, og du slipper å lime inn to sider tekst hver
gang. Alternativet er å lime inn alt under streken – det virker like godt.
Kopier adressen fra knappen på `brief.html`.
Legg til dine egne rammer hver gang: alder, antall spillere, areal, utstyr du
har, øktlengde, og om keeper skal være med.
Du får tilbake to blokker: feltene til skjemaet, og bevegelsesdataene. Begge
limes inn i `ny.html`. Treffer JSON-en ikke formatet helt, oversetter byggeren
den og skriver hva den endret – men det er en sikkerhetsnett, ikke planen.
---
**Om du har en eldre beskrivelse av dette formatet lenger opp i samtalen:
forkast den.** Bare det som står under gjelder. Formatet er flatt, det finnes
ingen `anim{}`, og bevegelser har `t` og `d` – ikke `t0` og `t1`.
Du ser på en fotballøvelse. Lag **vår egen variant** av den, som data til en
animasjonsmotor. Ikke en gjengivelse.
**Opphavsrett, ikke til forhandling.** Ikke kopier tekst, bilder eller
videoklipp fra sida. Kilden er inspirasjon og fagsjekk. Organiseringen, ordene
og bevegelsene skal være våre egne. Skriv ingenting du ikke selv har formulert.
**Gjør dette først:** les organisering og læringsmomenter, og **studer
banediagrammet før du skriver noe**. Diagrammet avgjør tre ting teksten sjelden
sier: hvilken vei målene står, hvor spillerne kommer inn fra, og **hvordan
ballen settes i spill**. Det siste er det viktigste og lettest å gjette feil på:
blir ballen levert *til* én spiller, eller slått ut i rommet slik at begge må
løpe etter den? Det avgjør om øvelsen er angriper mot forsvarer, eller et
kappløp der rollene bestemmes underveis. Er du i tvil, si det i stedet for å
velge. Beskriv det for
meg i én setning, slik at det er etterprøvbart — «to mål på kortsidene, to køer
midt på langsida», for eksempel. Ligger det video der, se bevegelsesmønsteret.
Gi meg så en kort, ærlig vurdering — hva fungerer for aldersgruppen, hva gjør
det ikke, og hva du ville endret. To til fire setninger. Ikke smiger.
**Så leverer du to blokker.**
## Blokk 1: feltene
```
Tittel: kort, med tankestrek der det passer
Id: små bokstaver, tall og bindestrek, for eksempel 3v2-overtall
Undertittel: 6–9 år · Avslutning · 4 spillere · 12 min
Alder: 6–9 år
Tema: ett stikkord, for eksempel Skåre mål
Sekunder: som regel 18
Organisering: to til fire setninger. Hvordan det settes opp, og hva som skjer
når ballen går ut
Læringsmomenter: tre linjer, én setning hver, i imperativ til spilleren
Variasjoner: tre linjer
Keeper: kan velges? på som standard?
```
Skriv æ, ø og å som vanlige bokstaver. **Aldri** `å` eller `å` —
det ødelegger fila.
## Blokk 2: bevegelsesdata som JSON
Ren JSON, ingen kommentarer, ingen `const`. Bare disse nøklene:
```json
{
"world": { "minX": -3, "maxX": 24, "minY": -2, "maxY": 23 },
"square": { "x0": 2, "y0": 0, "x1": 18, "y1": 18 },
"laneX": [],
"goals": [{ "x": 10, "y": 0, "width": 3 }],
"gates": [],
"actors": [
{ "id": "A1", "role": "attack", "start": [8, 18], "label": "1" },
{ "id": "F", "role": "defend", "start": [10, 6], "label": "F" },
{ "id": "K", "role": "keeper", "start": [10, 1.2], "label": "K", "only": "keeper" },
{ "id": "Q1", "role": "attack", "start": [9, 21], "dim": true }
],
"balls": [{ "id": "BALL", "start": [21.7, 11.1] }],
"segments": [
{ "a": "A1", "t": 1.8, "to": [9, 15], "k": "run", "trail": 1 },
{ "a": "A1", "t": "+0", "to": [9, 10], "k": "dribble", "ball": "BALL", "trail": 1 },
{ "a": "BALL", "t": "+0.2", "to": [10, 0.3], "k": "shot", "trail": 1, "goal": 1 }
],
"resets": [{ "t": 7.4, "d": 1.2 }],
"captions": [{ "t": 2.9, "d": 1.7, "text": "Gå bredt – skap plass" }],
"legend": [["run", "Løp uten ball"], ["dribble", "Føring med ball"]]
}
```
### Banen
Meter. `x` går på tvers, `y` **oppover** — `y = 0` er ved målet, høyere `y` er
lenger fra. Legg noen meter luft i `world` rundt `square`, ellers klippes
spillere som løper ut.
`square` er sonen, med kjegle i hvert hjørne. `laneX` er stiplede korridorer
inne i sonen. `gates` er porter: `{ "x0": 2, "x1": 4, "y": 16 }`.
`goals` er mål med nett, og de kan stå i alle fire retninger. Nettet skal alltid
peke **ut** av banen:
```json
{ "x": 10, "y": 0, "width": 3 } nede
{ "x": 10, "y": 24, "width": 3, "dir": "opp" } oppe
{ "x": 5, "y": 10, "width": 5, "aks": "y", "dir": "venstre" } til venstre
{ "x": 27, "y": 10, "width": 5, "aks": "y", "dir": "hoyre" } til høyre
```
Står målene på kortsidene, blir sonen liggende — og det passer lerretet bedre
enn en stående sone.
Til løyper og poster finnes tre byggeklosser til:
```json
"cones": [[6, 10], [7, 10], [8, 10], [21, 10]],
"lines": [{ "a": [6, 2.4], "b": [6, 12.6], "color": "#FFFFFF", "width": 0.13, "alpha": 0.5 }],
"boxes": [{ "x": 3.4, "y": 3.4, "w": 1.4, "h": 1.05 }]
```
`cones` er frie kjegler, til slalåm og vendepunkt. `lines` er en strek under alt
annet — en hvit banestrek gir løypa struktur, akkurat som på en ekte bane.
`boxes` er en åpen beholder på bakken.
### Figurene
`role` styrer bare fargen. `attack` og `defend` når øvelsen har faste roller,
`lag1` og `lag2` når begge spillerne er både angriper og forsvarer — samme to
farger, men et navn som stemmer. `server` er treneren, `keeper` er keeper.
Merk figurene `A` og `B` i en symmetrisk øvelse, ikke `A` og `F`.
`label` er tegnet inni sirkelen. `dim: true` er køen som venter og ikke beveger
seg. `only: "keeper"` betyr at figuren bare finnes i keeper-varianten.
### Bevegelsene — dette er det viktigste
Bare `a` og `to` er påkrevd. **Ikke skriv `f`.** Startpunktet arves fra der
figuren står, og skriver du det selv blir det bare en feilkilde.
- `t` er sekunder, eller `"+0.3"` som betyr 0,3 s etter forrige bevegelse for
samme figur — eller etter linjen over hvis figuren ikke har flyttet seg før.
Bruk relativ tid der du kan; da kan én bevegelse flyttes uten å regne om alt
- `d` kan utelates. Da regnes den av avstand og type: `run` 4,5 m/s, `jog` 2,6,
`dribble` 3,0, `pass` 9,0, `shot` 14,0. Skriv den bare når tempoet er et
poeng, for eksempel en bevisst treg vending
- `k` er `run`, `jog`, `dribble`, `pass` eller `shot`
- `ball": "BALL"` fester ballen til føreren gjennom bevegelsen. Bruk det på
alle føringer. Pasninger og skudd skrives som egne ballsegmenter
- `via": [x, y]` bøyer banen — til overlapp, buede løp og skudd rundt en
forsvarer
- `lift`: 0–1 på et ballsegment gjør ballen større midt i banen. Sett ovenfra
leses høyde som størrelse. Bruk det på vipp, lobb og innlegg
- `ballOffset` overstyrer de 0,6 m ballen ligger foran føreren. I en tett
slalåm med én meter mellom kjeglene må den ned til 0,3, ellers svinger
ballen en meter utenfor spilleren
- `trail: 1` tegner pila. `win: 1` gjør den grønn, for det som skjer etter
gjenvinning. `rot: 1` er rotasjon eller bytte. `goal: 1` eller `gate: 1` på
det avsluttende segmentet gir en ring som blinker
### Regler som må holde
- Animasjonen er rundt 18 sekunder og viser to eller tre repetisjoner, gjerne
med en variasjon mot slutten — for eksempel at forsvareren vinner ballen
- Legg en `reset` mellom repetisjonene og **en til slutt**, ellers hopper det
når animasjonen looper. En reset glir alle tilbake til startpunktene
- `duration` må dekke siste bevegelse og siste reset
- `captions` skal ikke overlappe i tid. Tre til fem stykker, korte, i imperativ
- `legend` skal bare inneholde typer som faktisk brukes
- alle `a` i segmentene må finnes i `actors` eller `balls`
### Feil som går igjen
Dette er dialekten som pleier å komme i stedet for vår. Venstre kolonne er feil,
høyre er vår:
| I stedet for | Skriv |
| --- | --- |
| `{ "anim": { ... } }` | alt på toppnivå, ingen innpakning |
| `"t0": 1.7, "t1": 3.6` | `"t": 1.7, "d": 1.9` – starttid og varighet |
| `"from": [3, 4]` | ingenting. `f` arves fra der figuren står |
| `"kind": "pass"` | `"k": "pass"` |
| `{ "b": "b1", ... }` | `{ "a": "b1", ... }` – baller og spillere er samme språk |
| `{ "b": "b1", "carry": "A1" }` | `"ball": "b1"` på A1s eget segment |
| `"team": "attack"` | `"role": "attack"` |
| `"team": "coach"` | `"role": "server"` |
| `"zones": [{ "type": "rect", ... }]` | `square`, `lines` eller `boxes` |
| `"goals": [{ "w": 3, "depth": 1.2, "dir": "left" }]` | `{ "width": 3, "aks": "y", "dir": "venstre" }` |
| `"flashes": [...]` | `"goal": 1` på det avsluttende segmentet |
| `"ease"`, `"trailFade"` | ingenting. Motoren mykner og toner ut selv |
| `"onlyKeeper": true` | `"only": "keeper"` |
| tegnforklaring med farger | `["dribble", "Føring med ball"]` – type, ikke farge |
| egen `"color"` på en figur | `role` velger fargen. Paletten ligger i motoren |
Retningene er norske: `venstre`, `hoyre`, `opp`. Nedover er standard og skrives
ikke. Står målet til side, må `aks: "y"` med, ellers legges det ned på banen.
### Ikke gjør dette
- ikke skriv `f` i segmentene
- ikke skriv escape-koder i noen tekst
- ikke pakk noe i `anim: { ... }` — alt ligger på toppnivå
- ikke bruk `const CONFIG =` eller kommentarer i JSON-en
- ikke kopier formuleringer fra kilden
---
# Malen: slik er «2 mot 1 – mot ett mål» bygd
Dette er den øvelsen oppsettet, animasjonen og ordlyden er godkjent på. Tallene
under er målt fra fila, ikke skjønn. Treffer du dem, ligner resultatet.
## Ramme
`world` er 27 × 25 m rundt en sone på 16 × 18 m. Altså fem meter luft på hver
side, fem over og to under målet — spillere som løper ut blir ikke klippet.
Målet er 3 m bredt, midt på kortsiden.
## Figurer
To angripere, én forsvarer, én server utenfor sonen, keeper som kan velges — og
**tre blasse figurer i kø** (`dim: true`) utenfor sonen. Køen er et lite grep
som gjør stor forskjell: den viser at dette er en organisert øvelse med flere
som venter, ikke fire spillere alene på en bane.
## Dramaturgi: 18 sekunder, tre repetisjoner som blir kortere
| | Tid | Hva som skjer |
| --- | --- | --- |
| Oppstilling | 0 – 1,8 s | ingen beveger seg. Sone, kjegler, mål og spillere toner inn |
| Repetisjon 1 | 1,8 – 7,0 s | server setter i gang, fører, pasning til medspiller, avslutning. Full lengde, viser grunnideen |
| Reset | 7,4 s (1,2 s) | alle glir tilbake |
| Repetisjon 2 | 8,8 – 12,7 s | kortere. Ballføreren går selv og skyter — samme idé, annen løsning |
| Reset | 13,0 s (0,4 s) | kort, tempoet øker |
| Repetisjon 3 | 13,4 – 16,2 s | kortest. **Forsvareren vinner ballen og kontrer** – variasjonen |
| Reset | 16,4 s (1,2 s) | tilbake til start før animasjonen looper |
Poenget: hver repetisjon er kortere enn den forrige, og den siste er en
variasjon der det går motsatt vei. Det gjør at atten sekunder føles som en økt,
ikke en løkke. **Legg alltid en reset helt til slutt.**
**Relativ tid kjeder fra samme figur.** Skriver du `"t": "+0.3"` på et
ballsegment rett etter en spillers løp, kjeder det fra **ballens** forrige
bevegelse hvis ballen har hatt en — ikke fra linja over. I en sekvens der
spiller og ball veksler, som å hente en ball og prøve igjen, blir rekkefølgen
stokket. Bruk absolutte tider der.
**Atten sekunder holder bare når hver repetisjon har én eier av ballen.** Skal
en repetisjon vise et eierskifte — at den som taper kappløpet jager, vinner
ballen og går motsatt vei — trenger den seks til åtte sekunder alene. Da settes
varigheten etter innholdet, ikke etter malen. «1 mot 1 – begge veier» er 27
sekunder av nettopp den grunnen. Det er innholdet som bestemmer, ikke tallet.
**Vis eierskiftet, ikke bare utfallet.** At én vinner ballen og skårer, og så
den andre i neste repetisjon, er to separate historier. Det som viser hva
øvelsen handler om, er at duellen snur *midt i* en repetisjon.
## Tempo
| Bevegelse | Varighet |
| --- | --- |
| pasning | 0,6 – 0,8 s |
| føring, ett trekk | 0,9 – 1,8 s |
| skudd | 0,5 – 0,6 s |
| forsvarer som rykker | 1,3 – 1,4 s |
| innhentingsløp | 1,1 – 1,6 s |
| takling som vinner ballen | 0,35 – 0,5 s |
| keeperens steg | 0,4 – 0,5 s |
Ballen har `pass` inn og `shot` ut som egne segmenter. Alt annet er `dribble`
med `ball` på førerens segment.
## Tekstene
Fem stykker, 19 til 37 tegn. Varighet 1,3 til 1,9 sekunder. Aldri
overlappende, og med luft imellom — de skal leses, ikke skummes.
```
2,9 s Gå bredt – skap plass til ballføreren
4,6 s Presses du? Spill diagonalt
7,5 s Nye inn med én gang
9,9 s Har du plass? Ta med ballen og skyt
14,9 s Vinner du ballen – kontre motsatt vei
```
Legg merke til formen: **to av fem er spørsmål**, og de kommer i det øyeblikket
spilleren faktisk må velge. Resten er imperativ, rettet til spilleren, aldri til
treneren. Ingen fagord. Én tekst per repetisjon, pluss en om organiseringen.
## Læringsmomentene
Tre stykker, seks til ti ord, og de dekker tre roller — én hver:
```
Ta med ballen fremover og avslutt når du ser målet. (ballføreren)
Uten ball: gå bredt og fremover så ballføreren får plass. (medspilleren)
Vinner du ballen: kontre motsatt vei. (forsvareren)
```
Variasjonene handler om hva **treneren** kan skru på — igangsetting, kraft og
vinkel, egne mål å kontre mot. Tre stykker, én setning hver.
Undertittelen er `alder · tema`, eventuelt med antall og minutter.