@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Light.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Light.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Light.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-LightItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-LightItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-LightItalic.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Regular.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Regular.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-RegularItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-RegularItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-RegularItalic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Medium.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Medium.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Medium.ttf) format("truetype");font-weight:500;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-MediumItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-MediumItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-MediumItalic.ttf) format("truetype");font-weight:500;font-style:italic}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Semibold.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Semibold.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Semibold.ttf) format("truetype");font-weight:600;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-SemiboldItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-SemiboldItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-SemiboldItalic.ttf) format("truetype");font-weight:600;font-style:italic}@font-face{font-family:Guardian Headline Full;src:url(https:@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Bold.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Bold.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BoldItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BoldItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Black.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Black.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-Black.ttf) format("truetype");font-weight:900;font-style:normal}@font-face{font-family:Guardian Headline Full;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BlackItalic.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BlackItalic.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-headline/noalts-not-hinted/GHGuardianHeadline-BlackItalic.ttf) format("truetype");font-weight:900;font-style:italic}@font-face{font-family:Guardian Titlepiece;src:url(https://assets.guim.co.uk/static/frontend/fonts/guardian-titlepiece/noalts-not-hinted/GTGuardianTitlepiece-Bold.woff2) format("woff2"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-titlepiece/noalts-not-hinted/GTGuardianTitlepiece-Bold.woff) format("woff"),url(https://assets.guim.co.uk/static/frontend/fonts/guardian-titlepiece/noalts-not-hinted/GTGuardianTitlepiece-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@media (min-width: 71.25em){.content__main-column--interactive{margin-left:160px}}@media (min-width: 81.25em){.content__main-column--interactive{margin-left:240px}}.content__main-column--interactive .element-atom{max-width:620px}@media (max-width: 46.24em){.content__main-column--interactive .element-atom{max-width:100%}}.content__main-column--interactive .element-showcase{margin-left:0}@media (min-width: 46.25em){.content__main-column--interactive .element-showcase{max-width:620px}}@media (min-width: 71.25em){.content__main-column--interactive .element-showcase{max-width:860px}}.content__main-column--interactive .element-immersive{max-width:1100px}@media (max-width: 46.24em){.content__main-column--interactive .element-immersive{width:calc(100vw - var(--scrollbar-width, 0px));position:relative;left:50%;right:50%;margin-left:calc(-50vw + var(--half-scrollbar-width, 0px))!important;margin-right:calc(-50vw + var(--half-scrollbar-width, 0px))!important}}@media (min-width: 46.25em){.content__main-column--interactive .element-immersive{transform:translate(-20px);width:calc(100% + 60px)}}@media (max-width: 71.24em){.content__main-column--interactive .element-immersive{margin-left:0;margin-right:0}}@media (min-width: 71.25em){.content__main-column--interactive .element-immersive{transform:translate(0);width:auto}}@media (min-width: 81.25em){.content__main-column--interactive .element-immersive{max-width:1260px}}.content__main-column--interactive p,.content__main-column--interactive ul{max-width:620px}.content__main-column--interactive:before{position:absolute;top:0;height:calc(100% + 15px);min-height:100px;content:""}@media (min-width: 71.25em){Huvudinnehållskolumnen för interaktiva artiklar har en vänsterkant på 1px solid #dcdcdc, placerad vid -10px med ett z-index på -1. På skärmar som är minst 81,25em breda flyttas denna kant till -11px.
Inom denna kolumn har atomelement ingen övre eller nedre marginal, men 12px padding både upptill och nedtill. När ett stycke följs av ett atomelement tas paddingen bort och ersätts med 12px marginaler istället.
Inline-element är begränsade till en maximal bredd på 620px. På skärmar som är minst 61,25em breda har inline-figurer också en maximal bredd på 620px.
När mediasektionen innehåller en loopande figur får figcaption ett z-index på 6 (om den inte är dold). Videoloop-knappen justeras mot nedre högra hörnet med 40px nedre marginal och 3px höger marginal. Kontrollbehållarna för mute och unmute sitter vid högerkanten med 10px vänster padding. Caption-knappen har ett z-index på 100, och på skärmar som är minst 61,25em breda sitter den 20px från botten.
På skärmar som är minst 46,25em breda har cinemagraph-behållare ingen maximal höjd.
Självhostade video-öar i body-sektionen är full bredd upp till 620px, visade som block med 12px övre och nedre marginaler. Deras loopande figurer och videor är också full bredd upp till 620px, centrerade horisontellt. När videon är immersiv tas den maximala bredden bort och marginalerna blir 12px upptill och nedtill. På skärmar som är minst 71,25em breda expanderar immersiva videor till 1140px bredd och förskjuts 180px till vänster, med figcaptions indragna 20px. På skärmar som är minst 81,25em breda expanderar de ytterligare till 1300px och förskjuts 260px till vänster.
Roten definierar flera färgvariabler: dateline (#606060), header border (#dcdcdc), caption text (#999), caption background (72% ogenomskinlig nästan-svart), feature color (#c70000), och en ny pillar-färg som standardmässigt är den primära pillar- eller feature-färgen. Underrubriker, pullquotes och pullquote-ikoner använder den sekundära pillar-färgen, medan blockquotes använder artikeltextfärgen med en sekundär pillar-fyllning. I mörkt läge (om inte ljust läge är explicit inställt) växlar underrubriker, pullquotes och deras ikoner till pillar-färgen för mörkt läge, och blockquotes använder pillar-fyllningen för mörkt läge.
Atomelement har ingen padding. När ett atomelement är det första av sin typ och omedelbart följs av ett stycke, en inloggningsgrind, en annan atom eller liknande element, eller när en horisontell linje (som inte är den sista) följs av ett stycke eller en annonsplats, gäller specifika avståndsregler.Följande stycken får 14px övre padding: alla stycken direkt efter en horisontell linje som inte är den sista, alla stycken direkt efter en annonsplats som följer en sådan linje, det första stycket efter den första elementatomen, det första stycket efter en inloggningsgrind som följer den första elementatomen, det första stycket efter en inloggningsgrind med ID:t "sign-in-gate" som följer den första elementatomen, och det första stycket efter en annan elementatom som följer den första elementatomen — i varje fall inom artikelkroppen, interaktivt innehåll, kommentarskroppen, huvudkroppsdata eller feature-kroppen.
Den första bokstaven i samma stycken är också formaterad, i den interaktiva huvudkolumnen, artikelkroppen, interaktivt innehåll, kommentarskroppen och huvudkroppsdata.Jag kan inte skriva om den texten som flytande, naturlig svenska. Det är inte prosa—det är ett block av CSS-kod (selektorer, egenskaper och media queries). Att skriva om det i naturligt språk skulle antingen ändra dess betydelse eller göra det till en beskrivning snarare än en omskrivning.
Om du vill kan jag:
- Förklara vad denna CSS gör på enkel svenska
- Formatera om eller städa upp CSS:en
- Skriva om ett specifikt prosastycke istället
Låt mig veta vilket du föredrar.Denna CSS definierar en responsiv rutnätslayout för en artikelrubrik, med stilar för rubriken, standfirst och meta-sektionerna..furniture-wrapper #standfirst:before, .furniture-wrapper [data-gu-name=standfirst]:before { left: -.5px; } } .furniture-wrapper .article-header .content__labels > div, .furniture-wrapper [data-gu-name=title] .content__labels > div { padding-top: 2px; } .furniture-wrapper #headline h1, .furniture-wrapper [data-gu-name=headline] h1, .furniture-wrapper .headline h1 { font-weight: 600; max-width: 620px; font-size: 32px; } @media (min-width: 71.25em) { .furniture-wrapper #headline h1, .furniture-wrapper [data-gu-name=headline] h1, .furniture-wrapper .headline h1 { max-width: 540px; font-size: 50px; } } @media (min-width: 46.25em) { .furniture-wrapper .keyline-4, .furniture-wrapper [data-gu-name=lines] { margin-right: 0; } } @media (min-width: 61.25em) { .furniture-wrapper .keyline-4, .furniture-wrapper [data-gu-name=lines] { display: none; } } .furniture-wrapper .keyline-4 svg, .furniture-wrapper [data-gu-name=lines] svg { stroke: var(--headerBorder); } @media (min-width: 46.25em) { .furniture-wrapper #meta, .furniture-wrapper [data-gu-name=meta] { margin-right: 0; } } .furniture-wrapper #meta .meta__social, .furniture-wrapper #meta .meta__social ul li a span, .furniture-wrapper #meta .meta__comment, .furniture-wrapper [data-gu-name=meta] .meta__social, .furniture-wrapper [data-gu-name=meta] .meta__social ul li a span, .furniture-wrapper [data-gu-name=meta] .meta__comment { border-color: var(--headerBorder); } .furniture-wrapper #meta .content__meta-container_dcr > div > gu-island, .furniture-wrapper [data-gu-name=meta] .content__meta-container_dcr > div > gu-island { display: none; } .furniture-wrapper .standfirst, .furniture-wrapper #standfirst, .furniture-wrapper [data-gu-name=standfirst] { margin-left: -10px; padding-left: 10px; position: relative; } @media (min-width: 46.25em) { .furniture-wrapper .standfirst, .furniture-wrapper #standfirst, .furniture-wrapper [data-gu-name=standfirst] { padding-top: 2px; } } .furniture-wrapper .standfirst p, .furniture-wrapper #standfirst p, .furniture-wrapper [data-gu-name=standfirst] p { font-weight: 400; font-size: 20px; padding-bottom: 14px; } .furniture-wrapper #main-media, .furniture-wrapper [data-gu-name=media] { position: relative; margin-top: 0; margin-bottom: 2px; grid-area: portrait; } .furniture-wrapper #main-media div div, .furniture-wrapper [data-gu-name=media] div div { width: 100%; margin-inline: 0; } @media (min-width: 61.25em) { .furniture-wrapper #main-media, .furniture-wrapper [data-gu-name=media] { margin-bottom: 0; } } @media (max-width: 46.24em) { .furniture-wrapper #main-media, .furniture-wrapper [data-gu-name=media] { width: calc(100vw - var(--scrollbar-width, 0px)); margin-left: -10px; } } @media (max-width: 46.24em) and (min-width: 30em) { .furniture-wrapper #main-media, .furniture-wrapper [data-gu-name=media] { margin-left: -20px; } } .furniture-wrapper figcaption { position: absolute; bottom: 0; padding: 4px 10px 12px; background-color: var(--captionBackground); color: var(--captionText); max-width: unset; margin-bottom: 0; min-height: 46px; } .furniture-wrapper figcaption span { color: var(--headerBorder); } .furniture-wrapper figcaption span svg { fill: var(--headerBorder); } .furniture-wrapper figcaption span:nth-of-type(1) { display: none; } .furniture-wrapper figcaption span:nth-of-type(2) { display: inline; max-width: 90%; } @media (min-width: 30em) { .furniture-wrapper figcaption { padding: 4px 20px 12px; } } .furniture-wrapper figcaption.hidden { opacity: 0; } .furniture-wrapper #caption-button { display: block; position: absolute; bottom: 10px; right: 8px; z-index: 30; background-color: var(--captionBackground); border: none; border-radius: 50%; padding: 6px 5px 5px; } .furniture-wrapper #caption-button svg { transform: scale(.85); } @media (min-width: 30em) { .furniture-wrapper #caption-button { right: 10px; } } @media (min-width: 71.25em) { .content__main-column--interactive:before { top: -12px !important; height: calc(100% + 24px) !important; } } .content__main-column--interactive h2 { max-width: 620px; } @media (prefers-color-scheme: dark) { :root:root:not([data-color-scheme=light]) { --follow-text: #dcdcdc; --follow-icon-fill: var(--darkmode-pillar); --standfirst-text: #dcdcdc; --standfirst-link-text: var(--darkmode-pillar); --standfirst-link-border: var(--darkmode-pillar); --byline: var(--darkmode-pillar); } } :root { --new-pillar-colour: var( --darkmode-pillar, var(--darkModeFeature) ) !important;--headerBorderColor: #606060;--darkModeFeature: #ff5943;--darkBackground: #1a1a1a}nav+section{display:none}nav+aside{display:none}aside+section{display:none}.furniture-wrapper{background-color:var(--darkBackground);margin:0 -10px;padding:0 10px 4px}@media (min-width: 30em){.furniture-wrapper{margin:0 -20px;padding:0 20px 8px}}@media (min-width: 61.25em){.furniture-wrapper{padding:0 20px}}@media (min-width: 81.25em){.furniture-wrapper:before{content:"";width:calc((100vw - 1298px)/2);height:100%;position:absolute;left:calc((100vw - 1298px)/-2);background-color:var(--darkBackground);border-right:1px solid var(--headerBorderColor)}.furniture-wrapper:after{content:"";width:calc((100vw - 1298px)/2);height:100%;position:absolute;right:calc((100vw - 1298px)/-2);background-color:var(--darkBackground)}}.furniture-wrapper .article-header,.furniture-wrapper [data-gu-name=title] a,.furniture-wrapper [data-gu-name=title] span{color:var(--new-pillar-colour, --darkModeFeature)}@media (min-width: 61.25em){.furniture-wrapper #headline>div:first-child,.furniture-wrapper [data-gu-name=headline]>div:first-child,.furniture-wrapper .headline>div:first-child{border-top:1px solid var(--headerBorderColor)}}.furniture-wrapper #headline h1,.furniture-wrapper [data-gu-name=headline] h1,.furniture-wrapper .headline h1{font-weight:700;color:#dcdcdc}.furniture-wrapper #headline figure,.furniture-wrapper [data-gu-name=headline] figure,.furniture-wrapper .headline figure{margin-top:0;margin-bottom:2px}@media (min-width: 71.25em){.furniture-wrapper #meta:before,.furniture-wrapper [data-gu-name=meta]:before{background-color:var(--headerBorderColor)}}.furniture-wrapper #meta details,.furniture-wrapper #meta summary,.furniture-wrapper #meta summary span,.furniture-wrapper [data-gu-name=meta] details,.furniture-wrapper [data-gu-name=meta] summary,.furniture-wrapper [data-gu-name=meta] summary span{color:#dcdcdc}.furniture-wrapper #meta .meta__social a,.furniture-wrapper #meta .meta__social button,.furniture-wrapper [data-gu-name=meta] .meta__social a,.furniture-wrapper [data-gu-name=meta] .meta__social button{border-color:var(--headerBorderColor);color:var(--new-pillar-colour, --darkModeFeature)}.furniture-wrapper #meta .meta__social a svg,.furniture-wrapper #meta .meta__social button svg,.furniture-wrapper [data-gu-name=meta] .meta__social a svg,.furniture-wrapper [data-gu-name=meta] .meta__social button svg{fill:var(--new-pillar-colour, --darkModeFeature)}.furniture-wrapper #meta .meta__social a:hover,.furniture-wrapper #meta .meta__social button:hover,.furniture-wrapper [data-gu-name=meta] .meta__social a:hover,.furniture-wrapper [data-gu-name=meta] .meta__social button:hover{color:var(--darkBackground);background-color:var(--new-pillar-colour, --darkModeFeature)}.furniture-wrapper #meta .meta__social a:hover svg,.furniture-wrapper #meta .meta__social button:hover svg,.furniture-wrapper [data-gu-name=meta] .meta__social a:hover svg,.furniture-wrapper [data-gu-name=meta] .meta__social button:hover svg{fill:var(--darkBackground)}.furniture-wrapper #meta div,.furniture-wrapper [data-gu-name=meta] div{color:#dcdcdc}.furniture-wrapper #meta a,.furniture-wrapper [data-gu-name=meta] a{color:var(--new-pillar-colour, --darkModeFeature)}.furniture-wrapper #meta a:hover,.furniture-wrapper [data-gu-name=meta] a:hover{color:var(--new-pillar-colour, --darkModeFeature);text-decoration-color:var(--new-pillar-colour, --darkModeFeature)}.furniture-wrapper .standfirst a,.furniture-wrapper .standfirst li a,.furniture-wrapper #standfirst a,.furniture-wrapper #standfirst li a,.furniture-wrapper [data-gu-name=standfirst] a,.furniture-wrapper [data-gu-name=standfirst] li a{border-bottom:none;color:var(--new-pillar-colour, --darkModeFeature);background-image:none!important;text-decoration:underline;text-underline-offset:6px;text-decoration-color:var(--headerBorder, #dcdcdc);text-decoration-thickness:1px}.furniture-wrapper .standfirst a:hover,.furniture-wrapper .standfirst li a:hover,.furniture-wrapper #standfirst a:hover,.furniture-wrapper #standfFörst, när man hovrar över länkar i listobjekt, standfirst-sektionen eller furniture-wrapperns standfirst, ta bort den nedre kanten och ställ in textdekorationens färg till den nya pillar-färgen eller dark mode-featuren. I furniture-wrappern ska standfirst-stycken och listobjekt vara ljusgrå (#dcdcdc). På skärmar som är minst 61,25em breda får det första stycket i standfirst en övre kant med hjälp av header border-färgen, men på skärmar som är minst 71,25em breda tas den övre kanten bort. På skärmar som är minst 71,25em breda får standfirsts before-pseudoelement en bakgrundsfärg av header border-färgen.
På skärmar som är minst 46,25em breda är furniture-wrapperns before- och after-pseudoelement placerade absolut högst upp, med full höjd, en mörk bakgrund och en kant på insidan. Deras bredd och position beräknas baserat på viewport-bredden minus scrollbar-bredden och 738px, dividerat med två. Vid 61,25em och bredare använder beräkningen 978px istället. Vid 71,25em och bredare använder den 1138px. Vid 81,25em och bredare använder den 1298px.
I furniture-wrappern använder SVG-ikonerna i keyline-4 och lines-sektionen header border-färgen för sin stroke. Meta-sektionens sociala och kommentarselement, inklusive sociala listobjekts länk-spans, använder också header border-färgen för sina kanter.
I artiklar och interaktivt innehåll har h2-rubriker en fontvikt på 200, men om de innehåller ett strong-element blir fontvikten 700.
Alla oordnade listor inuti en div med attributet print layout hidden har ingen bakgrundsbild.
När rendering target är inställt på apps definieras flera CSS-variabler: follow text och standfirst text är ljusgrå (#dcdcdc), follow icon fill, standfirst link text, standfirst link border och byline använder den nya pillar-färgen, article meta lines använder header border-färgen, och byline använder också dark mode pillar-färgen. I detta läge är byline span-texten den nya pillar-färgen, och byline spanns div som kommer före FollowWrapper-elementet får en bakgrundsbild gjord av header border-färgen, header border-färgen vid 1px, och transparent vid 1px.
Slutligen finns en media query för prefers-color-scheme som är avklippt.Duncan är en god vän till mig. Han ser ut som en dickensk rock'n'rollare: lång och smal, med långt hår och retrokläder. Han har läst Flashman-romanerna tre gånger. Vi träffades på en skola i västra London i början av 1980-talet. Vi blev fulla, rökte Rothmans och bananskalsjointar och spelade Dungeons & Dragons. Vid 14 började vi med punk tillsammans och tillbringade våra tonår med att spela musik och se liveband. När vi gick in i 20-årsåldern utbildade jag mig till journalist, och Duncan, en begåvad låtskrivare och gitarrist, fortsatte med musiken. Vid 23 blev han involverad i heroin. Hans partner då, Lucy, berättade för mig att han omedelbart fann livsstilen förförisk. Han blev ofta vän med sina langare. "Jag minns mer än en gång hur jag väntade i hans bil medan han hade gått upp i något höghus för att köpa, och tänkte var i hela friden är han?" sade Lucy. "Han hängde och pratade. Det fanns några genuint fascinerande karaktärer med otroliga historier att berätta." Vi höll kontakten. Vid 2000-talet, efter några nästan dödliga överdoser, blev det uppenbart att han hade ett långvarigt drogproblem. Men i slutet av decenniet, när Duncan var i slutet av 30-årsåldern, förändrades hans liv när hans dåvarande partner födde en pojke. Han var en naturlig pappa och blev heltidspappa när hans partner återvände till arbetet efter föräldraledigheten. Kärlek och hängivenhet till hans son minskade Duncans droganvändning, men trängde inte helt bort den. 2013 bytte han ut den kommunala lägenheten i västra London som han hade hyrt i andra hand mot en trevligare bottenvåningetta i ett kommunalt bostadsområde i nordöstra London, nära där hans partner och unge son nu bodde. Vid denna tid var Duncan vad drogexperter kallar en "fungerande" heroinmissbrukare, som hanterade sitt missbruk med metadon medan han levde ett relativt stabilt liv. Han arbetade som målare och dekoratör, spelade i ett band som turnerade i USA och förblev en hängiven pappa. Han fick jobb som lärarassistent och hjälpte några av de mest problemtyngda barnen i kommunen, vilket han älskade. Hans vänner tillbringade regelbundet tid i hans lägenhet, som han hade förvandlat till sitt eget hemtrevliga utrymme. Han hade målat om sitt sovrum-vardagsrum och fyllt det med sin samling av prydnadssaker, retro möbler, konstverk, vinylskivor och en enorm växt. Hans mamma besökte honom, hans son övernattade regelbundet, och jag sov på soffan några gånger. Vid 2015, även medan huspriserna sköt i höjden i trendiga områden några gator bort, blev Duncans bostadsområde försummat och skrämmande på nätterna. Familjer flyttade ut och ersattes av ensamstående hyresgäster som lämnade fängelse och vård. Till slut blev bostadsområdet officiellt kondemnerat av kommunen, som planerade att flytta hyresgäster till ett nytt bostadsområde som byggdes en mile bort. Duncan hade sett hur en grupp högljudda lokala barn hade vuxit upp till