@conduction/docusaurus-preset 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MISSING_COMPONENTS.md +109 -0
- package/README.md +171 -0
- package/package.json +59 -0
- package/src/components/AgentTrace/AgentTrace.jsx +128 -0
- package/src/components/AgentTrace/AgentTrace.module.css +115 -0
- package/src/components/AppMock/AppMock.jsx +86 -0
- package/src/components/AppMock/AppMock.module.css +629 -0
- package/src/components/AppMock/variants/DeciDeskMock.jsx +71 -0
- package/src/components/AppMock/variants/DocuDeskMock.jsx +69 -0
- package/src/components/AppMock/variants/LarpingAppMock.jsx +59 -0
- package/src/components/AppMock/variants/MyDashBiMock.jsx +135 -0
- package/src/components/AppMock/variants/MyDashMock.jsx +96 -0
- package/src/components/AppMock/variants/MyDashTilesMock.jsx +103 -0
- package/src/components/AppMock/variants/MyDashWidgetsMock.jsx +123 -0
- package/src/components/AppMock/variants/NLDesignMock.jsx +70 -0
- package/src/components/AppMock/variants/OpenCatalogiMock.jsx +61 -0
- package/src/components/AppMock/variants/OpenConnectorMock.jsx +83 -0
- package/src/components/AppMock/variants/OpenRegisterMock.jsx +100 -0
- package/src/components/AppMock/variants/OpenWooMock.jsx +61 -0
- package/src/components/AppMock/variants/PipelinQMock.jsx +88 -0
- package/src/components/AppMock/variants/ProcestMock.jsx +87 -0
- package/src/components/AppMock/variants/SoftwareCatalogMock.jsx +71 -0
- package/src/components/AppMock/variants/ZaakAfhandelAppMock.jsx +71 -0
- package/src/components/AppsGrid/AppsGrid.jsx +84 -0
- package/src/components/AppsGrid/AppsGrid.module.css +46 -0
- package/src/components/AppsPreview/AppsPreview.jsx +85 -0
- package/src/components/AppsPreview/AppsPreview.module.css +128 -0
- package/src/components/Clients/Clients.jsx +205 -0
- package/src/components/Clients/Clients.module.css +166 -0
- package/src/components/ComposeBlock/ComposeBlock.jsx +70 -0
- package/src/components/ComposeBlock/ComposeBlock.module.css +74 -0
- package/src/components/ConductionBg/ConductionBg.jsx +150 -0
- package/src/components/ConductionBg/ConductionBg.module.css +41 -0
- package/src/components/ContentCard/ContentCard.jsx +126 -0
- package/src/components/ContentCard/ContentCard.module.css +84 -0
- package/src/components/ContentDetailHero/ContentDetailHero.jsx +136 -0
- package/src/components/ContentDetailHero/ContentDetailHero.module.css +96 -0
- package/src/components/ContentTypeFilter/ContentTypeFilter.jsx +103 -0
- package/src/components/ContentTypeFilter/ContentTypeFilter.module.css +60 -0
- package/src/components/ContentTypeFilter/contentTypes.js +58 -0
- package/src/components/CookieCli/CookieCli.jsx +223 -0
- package/src/components/CookieCli/CookieCli.module.css +166 -0
- package/src/components/CtaBanner/CtaBanner.jsx +61 -0
- package/src/components/CtaBanner/CtaBanner.module.css +65 -0
- package/src/components/DetailHero/DetailHero.jsx +143 -0
- package/src/components/DetailHero/DetailHero.module.css +154 -0
- package/src/components/Diagrams/Diagrams.jsx +148 -0
- package/src/components/EmployeeCard/EmployeeCard.jsx +127 -0
- package/src/components/EmployeeCard/EmployeeCard.module.css +144 -0
- package/src/components/ExternalAppShelf/ExternalAppShelf.jsx +61 -0
- package/src/components/ExternalAppShelf/ExternalAppShelf.module.css +90 -0
- package/src/components/FAQ/FAQ.jsx +42 -0
- package/src/components/FAQ/FAQ.module.css +74 -0
- package/src/components/FacetedFilters/FacetedFilters.jsx +125 -0
- package/src/components/FacetedFilters/FacetedFilters.module.css +133 -0
- package/src/components/FeatureGrid/FeatureGrid.jsx +94 -0
- package/src/components/FeatureGrid/FeatureGrid.module.css +114 -0
- package/src/components/FeatureList/FeatureList.jsx +54 -0
- package/src/components/FeatureList/FeatureList.module.css +52 -0
- package/src/components/FeaturedCard/FeaturedCard.jsx +101 -0
- package/src/components/FeaturedCard/FeaturedCard.module.css +98 -0
- package/src/components/GameModal/GameModal.jsx +197 -0
- package/src/components/GameModal/GameModal.module.css +184 -0
- package/src/components/Hero/Hero.jsx +101 -0
- package/src/components/Hero/Hero.module.css +95 -0
- package/src/components/HexBackground/HexBackground.jsx +56 -0
- package/src/components/HexBackground/HexBackground.module.css +73 -0
- package/src/components/HexNetwork/HexNetwork.jsx +141 -0
- package/src/components/HexNetwork/HexNetwork.module.css +187 -0
- package/src/components/HexRain/HexRain.jsx +81 -0
- package/src/components/HowSteps/HowSteps.jsx +57 -0
- package/src/components/HowSteps/HowSteps.module.css +52 -0
- package/src/components/ManagedCommonGround/ManagedCommonGround.jsx +78 -0
- package/src/components/ManagedCommonGround/ManagedCommonGround.module.css +16 -0
- package/src/components/NewsletterCta/NewsletterCta.jsx +83 -0
- package/src/components/NewsletterCta/NewsletterCta.module.css +103 -0
- package/src/components/PairCard/PairCard.jsx +58 -0
- package/src/components/PairCard/PairCard.module.css +54 -0
- package/src/components/PartnerCard/PartnerCard.jsx +130 -0
- package/src/components/PartnerCard/PartnerCard.module.css +198 -0
- package/src/components/PartnerDirectory/PartnerDirectory.jsx +122 -0
- package/src/components/PartnerDirectory/PartnerDirectory.module.css +25 -0
- package/src/components/PartnerSidecard/PartnerSidecard.jsx +116 -0
- package/src/components/PartnerSidecard/PartnerSidecard.module.css +185 -0
- package/src/components/Pipeline/Pipeline.jsx +198 -0
- package/src/components/Pipeline/Pipeline.module.css +206 -0
- package/src/components/PlatformDiagram/PlatformDiagram.jsx +110 -0
- package/src/components/PlatformOverview/PlatformOverview.jsx +68 -0
- package/src/components/PlatformOverview/PlatformOverview.module.css +71 -0
- package/src/components/ReferenceCard/ReferenceCard.jsx +44 -0
- package/src/components/ReferenceCard/ReferenceCard.module.css +57 -0
- package/src/components/RelatedPosts/RelatedPosts.jsx +58 -0
- package/src/components/RelatedPosts/RelatedPosts.module.css +51 -0
- package/src/components/RotatingCards/RotatingCards.jsx +98 -0
- package/src/components/RotatingCards/RotatingCards.module.css +153 -0
- package/src/components/Showcase/Showcase.jsx +129 -0
- package/src/components/Showcase/Showcase.module.css +168 -0
- package/src/components/SolutionCard/SolutionCard.jsx +83 -0
- package/src/components/SolutionCard/SolutionCard.module.css +99 -0
- package/src/components/StatsStrip/StatsStrip.jsx +38 -0
- package/src/components/StatsStrip/StatsStrip.module.css +53 -0
- package/src/components/WidgetShelf/WidgetShelf.jsx +67 -0
- package/src/components/WidgetShelf/WidgetShelf.module.css +73 -0
- package/src/components/index.js +96 -0
- package/src/components/primitives/AuthorByline.jsx +85 -0
- package/src/components/primitives/AuthorByline.module.css +57 -0
- package/src/components/primitives/BrandCitation.jsx +71 -0
- package/src/components/primitives/Button.jsx +46 -0
- package/src/components/primitives/Button.module.css +88 -0
- package/src/components/primitives/Card.jsx +42 -0
- package/src/components/primitives/Card.module.css +42 -0
- package/src/components/primitives/Eyebrow.jsx +37 -0
- package/src/components/primitives/Eyebrow.module.css +19 -0
- package/src/components/primitives/HexBullet.jsx +37 -0
- package/src/components/primitives/HexBullet.module.css +16 -0
- package/src/components/primitives/HexThumbnail.jsx +70 -0
- package/src/components/primitives/HexThumbnail.module.css +45 -0
- package/src/components/primitives/Pill.jsx +42 -0
- package/src/components/primitives/Pill.module.css +30 -0
- package/src/components/primitives/Section.jsx +51 -0
- package/src/components/primitives/Section.module.css +31 -0
- package/src/components/primitives/SectionHead.jsx +36 -0
- package/src/components/primitives/SectionHead.module.css +43 -0
- package/src/components/primitives/index.js +22 -0
- package/src/css/brand.css +158 -0
- package/src/css/tokens.css +12 -0
- package/src/data/app-downloads.js +42 -0
- package/src/diagrams/README.md +74 -0
- package/src/diagrams/cn-domain-tree.js +105 -0
- package/src/diagrams/cn-hex-prism.js +163 -0
- package/src/diagrams/cn-hex.js +181 -0
- package/src/diagrams/cn-honeycomb-bg.js +135 -0
- package/src/diagrams/cn-pipeline.js +150 -0
- package/src/diagrams/cn-platform.js +156 -0
- package/src/diagrams/cn-side-box.js +104 -0
- package/src/diagrams/index.js +28 -0
- package/src/index.js +183 -0
- package/src/theme/Footer/index.jsx +516 -0
- package/src/theme/MDXPage/index.jsx +134 -0
- package/src/theme/Navbar/index.jsx +120 -0
- package/src/theme/Navbar/styles.module.css +114 -0
- package/src/theme/brand.jsx +63 -0
- package/src/theme.js +45 -0
- package/src/utils/lazyScript.js +37 -0
- package/static/img/favicon.svg +14 -0
- package/static/img/honeycomb-scatter.svg +23 -0
- package/static/img/honeycomb-watermark.svg +108 -0
- package/static/img/logo-dark.svg +11 -0
- package/static/img/logo.svg +14 -0
- package/static/img/nextcloud-logo.svg +5 -0
- package/static/lib/canal-footer.css +418 -0
- package/static/lib/canal-footer.js +499 -0
- package/static/lib/clients-flow.js +317 -0
- package/static/lib/conduction-bg.css +50 -0
- package/static/lib/conduction-bg.js +122 -0
- package/static/lib/hex-rain.css +128 -0
- package/static/lib/hex-rain.js +284 -0
- package/static/lib/kade-cyclist.css +264 -0
- package/static/lib/kade-cyclist.js +420 -0
- package/static/lib/logo-memory.css +219 -0
- package/static/lib/logo-memory.js +540 -0
- package/static/lib/platform-diagram.css +458 -0
- package/static/lib/platform-diagram.js +414 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-86.6 -100 173.2 200" role="img" aria-label="Conduction avatar">
|
|
3
|
+
<title>Conduction avatar, drawn as three pointy-top polygons</title>
|
|
4
|
+
<!-- viewBox is the bounding box of the outer hex (R=100), no
|
|
5
|
+
internal padding. Three polygons in the same drawing
|
|
6
|
+
vocabulary as the watermark hexes:
|
|
7
|
+
1. Outer hex cobalt, the frame
|
|
8
|
+
2. Inner hex white, the empty interior (so the
|
|
9
|
+
logo reads correctly on any ground)
|
|
10
|
+
3. C-shape cobalt, sits inside the inner hex -->
|
|
11
|
+
<polygon fill="#21468B" points="0,-100 86.6,-50 86.6,50 0,100 -86.6,50 -86.6,-50"/>
|
|
12
|
+
<polygon fill="#FFFFFF" points="0,-74.5 64.5,-37.3 64.5,37.3 0,74.5 -64.5,37.3 -64.5,-37.3"/>
|
|
13
|
+
<polygon fill="#21468B" points="-0.2,-25.2 20.1,-13.5 43.7,-27.1 -0.2,-52.4 -45.6,-26.2 -45.6,26.2 -0.2,52.4 43.7,27.1 20.1,13.5 -0.2,25.2 -22,12.6 -22,-12.6"/>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 30 130 60" role="img" aria-label="Nextcloud">
|
|
3
|
+
<title>Nextcloud — official mark, no wordmark</title>
|
|
4
|
+
<path fill="#FFFFFF" d="M75.091,35.685c-12.438,0-22.981,8.433-26.248,19.857-2.84-6.06-8.994-10.305-16.082-10.305-9.748,0-17.761,8.013-17.761,17.761s8.013,17.765,17.761,17.765c7.088,0,13.242-4.248,16.082-10.309,3.268,11.426,13.81,19.861,26.248,19.861,12.346,0,22.835-8.308,26.186-19.605,2.892,5.924,8.97,10.053,15.958,10.053,9.748,0,17.765-8.017,17.765-17.765s-8.017-17.761-17.765-17.761c-6.988,0-13.065,4.127-15.958,10.05-3.352-11.296-13.84-19.601-26.186-19.601h0ZM75.091,46.11c9.39,0,16.89,7.497,16.89,16.887s-7.501,16.89-16.89,16.89-16.887-7.501-16.887-16.89,7.497-16.887,16.887-16.887ZM32.762,55.663c4.114,0,7.338,3.221,7.338,7.335s-3.225,7.338-7.338,7.338-7.335-3.225-7.335-7.338,3.221-7.335,7.335-7.335ZM117.234,55.663c4.114,0,7.338,3.221,7.338,7.335s-3.225,7.338-7.338,7.338-7.335-3.225-7.335-7.338,3.221-7.335,7.335-7.335Z"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Canal footer — randomised Amsterdam trapgevel skyline above a
|
|
3
|
+
gray kade above the cobalt-900 canal. Each house is rendered
|
|
4
|
+
as a standalone <svg> (cloned from a <template> by footer.js)
|
|
5
|
+
so the skyline rolls a fresh sequence on every page-load.
|
|
6
|
+
Adjacent house wrappers overlap by 1px (margin-right: -1px)
|
|
7
|
+
to kill the white seam.
|
|
8
|
+
|
|
9
|
+
Colour rule: items IN the canal are KNVB orange, items ON the
|
|
10
|
+
kade are cobalt or vermilion. A handful of houses fly the
|
|
11
|
+
Dutch flag from a flagpole over their gable; the cruise boat
|
|
12
|
+
flies one too at the stern.
|
|
13
|
+
============================================================ */
|
|
14
|
+
|
|
15
|
+
.canal-footer { position: relative; color: white; isolation: isolate; }
|
|
16
|
+
|
|
17
|
+
/* ---- Skyline (random row of standalone trapgevel SVGs) ---- */
|
|
18
|
+
.canal-footer .skyline {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: flex-end;
|
|
21
|
+
justify-content: flex-start;
|
|
22
|
+
height: 152px;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
}
|
|
25
|
+
.canal-footer .house-wrap {
|
|
26
|
+
position: relative;
|
|
27
|
+
flex-shrink: 0;
|
|
28
|
+
margin-right: -2px; /* 2-px overlap closes the AA seam between facades */
|
|
29
|
+
}
|
|
30
|
+
.canal-footer .house {
|
|
31
|
+
display: block;
|
|
32
|
+
shape-rendering: geometricPrecision;
|
|
33
|
+
}
|
|
34
|
+
/* Each house's CSS dimensions = ~0.6 of viewBox dims so the row stays compact. */
|
|
35
|
+
.canal-footer .h-a { width: 48px; height: 120px; }
|
|
36
|
+
.canal-footer .h-b { width: 60px; height: 132px; }
|
|
37
|
+
.canal-footer .h-c { width: 42px; height: 144px; }
|
|
38
|
+
.canal-footer .h-d { width: 54px; height: 102px; }
|
|
39
|
+
.canal-footer .h-e { width: 57px; height: 126px; }
|
|
40
|
+
.canal-footer .house.flipped { transform: scaleX(-1); }
|
|
41
|
+
|
|
42
|
+
/* "House #14" — the Conduction office. Centre of the skyline, painted
|
|
43
|
+
in light cobalt blue with a small white house-number next to the door. */
|
|
44
|
+
.canal-footer .house-conduction .house path { fill: var(--c-blue-cobalt); }
|
|
45
|
+
.canal-footer .house-conduction::after {
|
|
46
|
+
content: '14';
|
|
47
|
+
position: absolute;
|
|
48
|
+
bottom: 8px;
|
|
49
|
+
left: calc(50% + 12px);
|
|
50
|
+
color: white;
|
|
51
|
+
font-family: var(--conduction-typography-font-family-base, 'Inter', system-ui, sans-serif);
|
|
52
|
+
font-size: 9px;
|
|
53
|
+
font-weight: 700;
|
|
54
|
+
line-height: 1;
|
|
55
|
+
letter-spacing: -0.02em;
|
|
56
|
+
z-index: 2;
|
|
57
|
+
pointer-events: none;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ---- Kade (gray quay) with bikes + cars drifting along it ---- */
|
|
61
|
+
.canal-footer .kade {
|
|
62
|
+
position: relative;
|
|
63
|
+
height: 30px;
|
|
64
|
+
background: #9b9da3;
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
}
|
|
67
|
+
.canal-footer .kade::before {
|
|
68
|
+
content: '';
|
|
69
|
+
position: absolute;
|
|
70
|
+
top: 0; left: 0; right: 0;
|
|
71
|
+
height: 1px;
|
|
72
|
+
background: rgba(0,0,0,0.16);
|
|
73
|
+
}
|
|
74
|
+
.canal-footer .kade-items {
|
|
75
|
+
position: absolute; inset: 0;
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
}
|
|
78
|
+
.canal-footer .ki {
|
|
79
|
+
position: absolute;
|
|
80
|
+
bottom: 4px;
|
|
81
|
+
will-change: transform;
|
|
82
|
+
}
|
|
83
|
+
/* Per-item animation directions; durations + delays come from inline-style
|
|
84
|
+
(set by the script so they're random + slow). */
|
|
85
|
+
.canal-footer .ki-bike-1 { animation: ki-drift-r 90s linear infinite; }
|
|
86
|
+
.canal-footer .ki-bike-2 { animation: ki-drift-l 90s linear infinite; }
|
|
87
|
+
.canal-footer .ki-car-1 { animation: ki-drift-l 100s linear infinite; bottom: 6px; }
|
|
88
|
+
.canal-footer .ki-car-2 { animation: ki-drift-r 100s linear infinite; bottom: 6px; }
|
|
89
|
+
@keyframes ki-drift-r {
|
|
90
|
+
from { transform: translateX(-60px); }
|
|
91
|
+
to { transform: translateX(100vw); }
|
|
92
|
+
}
|
|
93
|
+
@keyframes ki-drift-l {
|
|
94
|
+
from { transform: translateX(100vw); }
|
|
95
|
+
to { transform: translateX(-60px); }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ---- Water (cobalt-900) with canal items + waves + footer text ---- */
|
|
99
|
+
.canal-footer .water {
|
|
100
|
+
background: var(--c-cobalt-900);
|
|
101
|
+
padding: 88px 56px 28px; /* extra top room reserves a band for the boats */
|
|
102
|
+
position: relative;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Boats, swimmer, hovercraft drifting on the canal surface. All orange. */
|
|
107
|
+
.canal-footer .canal-items {
|
|
108
|
+
position: absolute;
|
|
109
|
+
left: 0; right: 0;
|
|
110
|
+
top: 0;
|
|
111
|
+
height: 76px;
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
pointer-events: none;
|
|
114
|
+
z-index: 1;
|
|
115
|
+
}
|
|
116
|
+
.canal-footer .ci {
|
|
117
|
+
position: absolute;
|
|
118
|
+
bottom: 6px;
|
|
119
|
+
will-change: transform;
|
|
120
|
+
}
|
|
121
|
+
.canal-footer .ci-cruise { animation: ci-drift-r 220s linear infinite; bottom: 12px; }
|
|
122
|
+
.canal-footer .ci-sloep { animation: ci-drift-l 160s linear infinite; bottom: 18px; }
|
|
123
|
+
.canal-footer .ci-row { animation: ci-drift-r 260s linear infinite; bottom: 22px; }
|
|
124
|
+
.canal-footer .ci-swim { animation: ci-drift-r 400s linear infinite; bottom: 32px; }
|
|
125
|
+
.canal-footer .ci-hover { animation: ci-drift-l 120s linear infinite; bottom: 8px; }
|
|
126
|
+
.canal-footer .ci-periscope { animation: ci-drift-r 320s linear infinite; bottom: 4px; }
|
|
127
|
+
.canal-footer .ci-whale { animation: ci-drift-l 280s linear infinite; bottom: 14px; }
|
|
128
|
+
@keyframes ci-drift-r {
|
|
129
|
+
from { transform: translateX(-260px); }
|
|
130
|
+
to { transform: translateX(calc(100vw + 60px)); }
|
|
131
|
+
}
|
|
132
|
+
@keyframes ci-drift-l {
|
|
133
|
+
from { transform: translateX(calc(100vw + 60px)); }
|
|
134
|
+
to { transform: translateX(-260px); }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.canal-footer .canal-waves {
|
|
138
|
+
position: absolute;
|
|
139
|
+
inset: 0;
|
|
140
|
+
width: 100%;
|
|
141
|
+
height: 100%;
|
|
142
|
+
pointer-events: none;
|
|
143
|
+
opacity: 0.11;
|
|
144
|
+
z-index: 0;
|
|
145
|
+
}
|
|
146
|
+
.canal-footer .canal-waves path {
|
|
147
|
+
fill: none;
|
|
148
|
+
stroke: white;
|
|
149
|
+
stroke-width: 2;
|
|
150
|
+
stroke-linejoin: miter;
|
|
151
|
+
stroke-linecap: round;
|
|
152
|
+
}
|
|
153
|
+
.canal-footer .canal-waves .w1 { stroke-dasharray: 14 22; animation: canal-wave-flow 60s linear infinite; }
|
|
154
|
+
.canal-footer .canal-waves .w2 { stroke-dasharray: 18 28; animation: canal-wave-flow 110s linear infinite reverse; }
|
|
155
|
+
.canal-footer .canal-waves .w3 { stroke-dasharray: 22 36; animation: canal-wave-flow 160s linear infinite; }
|
|
156
|
+
@keyframes canal-wave-flow { to { stroke-dashoffset: -360; } }
|
|
157
|
+
|
|
158
|
+
.canal-footer .footer-grid,
|
|
159
|
+
.canal-footer .legal-bar { position: relative; z-index: 2; }
|
|
160
|
+
|
|
161
|
+
.canal-footer .footer-grid {
|
|
162
|
+
display: grid;
|
|
163
|
+
grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr;
|
|
164
|
+
gap: 48px;
|
|
165
|
+
max-width: 1280px;
|
|
166
|
+
margin: 0 auto 48px;
|
|
167
|
+
}
|
|
168
|
+
.canal-footer .brand .wm {
|
|
169
|
+
font-size: 22px; font-weight: 700;
|
|
170
|
+
letter-spacing: -0.02em; color: white;
|
|
171
|
+
margin: 0 0 12px;
|
|
172
|
+
}
|
|
173
|
+
.canal-footer .next-blue { color: var(--c-nextcloud-blue); }
|
|
174
|
+
.canal-footer .brand p {
|
|
175
|
+
font-size: 14px; line-height: 1.55;
|
|
176
|
+
color: rgba(255,255,255,0.7);
|
|
177
|
+
max-width: 32ch; margin: 0 0 24px;
|
|
178
|
+
}
|
|
179
|
+
.canal-footer .brand .triad {
|
|
180
|
+
display: flex; gap: 16px;
|
|
181
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
182
|
+
font-size: 11px; letter-spacing: 0.06em;
|
|
183
|
+
text-transform: uppercase;
|
|
184
|
+
color: rgba(255,255,255,0.55);
|
|
185
|
+
}
|
|
186
|
+
.canal-footer .brand .triad .h {
|
|
187
|
+
width: 10px; height: 12px;
|
|
188
|
+
clip-path: var(--hex-pointy-top);
|
|
189
|
+
background: var(--c-orange-knvb);
|
|
190
|
+
display: inline-block; margin-right: 6px;
|
|
191
|
+
vertical-align: middle;
|
|
192
|
+
}
|
|
193
|
+
.canal-footer .brand .socials {
|
|
194
|
+
display: flex; gap: 10px;
|
|
195
|
+
margin-top: 18px;
|
|
196
|
+
}
|
|
197
|
+
.canal-footer .brand .socials a {
|
|
198
|
+
display: inline-flex;
|
|
199
|
+
align-items: center; justify-content: center;
|
|
200
|
+
width: 34px; height: 34px;
|
|
201
|
+
border: 1px solid rgba(255,255,255,0.18);
|
|
202
|
+
border-radius: 8px;
|
|
203
|
+
color: rgba(255,255,255,0.78);
|
|
204
|
+
text-decoration: none;
|
|
205
|
+
transition: color 140ms ease, border-color 140ms ease, background 140ms ease;
|
|
206
|
+
}
|
|
207
|
+
.canal-footer .brand .socials a:hover {
|
|
208
|
+
color: var(--c-orange-knvb);
|
|
209
|
+
border-color: var(--c-orange-knvb);
|
|
210
|
+
background: rgba(255,107,0,0.08);
|
|
211
|
+
}
|
|
212
|
+
.canal-footer .brand .socials svg {
|
|
213
|
+
width: 16px; height: 16px;
|
|
214
|
+
stroke: currentColor; stroke-width: 1.8; fill: none;
|
|
215
|
+
stroke-linecap: round; stroke-linejoin: round;
|
|
216
|
+
}
|
|
217
|
+
.canal-footer .brand .socials svg .filled { fill: currentColor; stroke: none; }
|
|
218
|
+
|
|
219
|
+
/* House #14 (Conduction office) is clickable. */
|
|
220
|
+
.canal-footer .house-conduction { cursor: pointer; }
|
|
221
|
+
.canal-footer .house-conduction:hover .house path { filter: brightness(1.12); }
|
|
222
|
+
|
|
223
|
+
/* Canal items respond to clicks (override the overlay's pointer-events). */
|
|
224
|
+
.canal-footer .ci { cursor: pointer; pointer-events: auto; }
|
|
225
|
+
.canal-footer h4 {
|
|
226
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
227
|
+
font-size: 11px; letter-spacing: 0.14em;
|
|
228
|
+
text-transform: uppercase;
|
|
229
|
+
color: rgba(255,255,255,0.55);
|
|
230
|
+
font-weight: 500; margin: 0 0 16px;
|
|
231
|
+
}
|
|
232
|
+
.canal-footer ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
|
|
233
|
+
.canal-footer ul a {
|
|
234
|
+
color: rgba(255,255,255,0.85);
|
|
235
|
+
text-decoration: none; font-size: 14px;
|
|
236
|
+
}
|
|
237
|
+
.canal-footer ul a:hover { color: var(--c-orange-knvb); }
|
|
238
|
+
|
|
239
|
+
.canal-footer .legal-bar {
|
|
240
|
+
border-top: 1px solid rgba(255,255,255,0.1);
|
|
241
|
+
max-width: 1280px;
|
|
242
|
+
margin: 0 auto;
|
|
243
|
+
padding-top: 24px;
|
|
244
|
+
display: flex; justify-content: space-between; align-items: center;
|
|
245
|
+
flex-wrap: wrap; gap: 16px;
|
|
246
|
+
font-size: 12px;
|
|
247
|
+
color: rgba(255,255,255,0.55);
|
|
248
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
249
|
+
}
|
|
250
|
+
.canal-footer .legal-bar .left, .canal-footer .legal-bar .right {
|
|
251
|
+
display: flex; gap: 20px; align-items: center; flex-wrap: wrap;
|
|
252
|
+
}
|
|
253
|
+
.canal-footer .legal-bar a { color: rgba(255,255,255,0.65); text-decoration: none; }
|
|
254
|
+
.canal-footer .legal-bar a:hover { color: var(--c-orange-knvb); }
|
|
255
|
+
.canal-footer .legal-bar .legal-links {
|
|
256
|
+
display: inline-flex; gap: 8px; align-items: center;
|
|
257
|
+
}
|
|
258
|
+
.canal-footer .legal-bar .legal-links .sep { opacity: 0.4; }
|
|
259
|
+
.canal-footer .legal-bar .iso-badge {
|
|
260
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
261
|
+
padding: 5px 9px;
|
|
262
|
+
border: 1px solid rgba(255,255,255,0.25);
|
|
263
|
+
border-radius: 4px;
|
|
264
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
265
|
+
font-size: 11px;
|
|
266
|
+
letter-spacing: 0.04em;
|
|
267
|
+
color: rgba(255,255,255,0.85);
|
|
268
|
+
transition: border-color 120ms ease, color 120ms ease;
|
|
269
|
+
}
|
|
270
|
+
.canal-footer .legal-bar .iso-badge:hover {
|
|
271
|
+
border-color: var(--c-orange-knvb);
|
|
272
|
+
color: var(--c-orange-knvb);
|
|
273
|
+
}
|
|
274
|
+
.canal-footer .legal-bar .iso-badge .iso-mark {
|
|
275
|
+
font-weight: 700;
|
|
276
|
+
letter-spacing: 0.08em;
|
|
277
|
+
}
|
|
278
|
+
.canal-footer .legal-bar .iso-badge .iso-num {
|
|
279
|
+
opacity: 0.85;
|
|
280
|
+
}
|
|
281
|
+
.canal-footer .nlds-badge {
|
|
282
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
283
|
+
color: rgba(255,255,255,0.85);
|
|
284
|
+
}
|
|
285
|
+
.canal-footer .nlds-badge svg { width: 12px; height: 12px; stroke: var(--c-mint-500, #2E9866); stroke-width: 2; fill: none; }
|
|
286
|
+
|
|
287
|
+
/* ============================================================
|
|
288
|
+
Mini-game HUD: timer (60s) + counter (100 → 0). Lives in the
|
|
289
|
+
top-right of the canal band. Hidden until the player sinks
|
|
290
|
+
their first boat — first sink kicks the game off. Every sink
|
|
291
|
+
(including the original fleet drifting at page load) ticks
|
|
292
|
+
the counter down by 1; the counter flashes orange on each tick.
|
|
293
|
+
|
|
294
|
+
Boss waves trigger off counter milestones:
|
|
295
|
+
- score === 10 → cruise-ship swarm (5 ships, HP 5 each)
|
|
296
|
+
- score === 1 → battleship boss (HP 10)
|
|
297
|
+
Spawned boats use Web Animations API so their drift duration
|
|
298
|
+
can scale with the per-game speed multiplier.
|
|
299
|
+
============================================================ */
|
|
300
|
+
.canal-footer .game-hud {
|
|
301
|
+
position: absolute;
|
|
302
|
+
top: 14px;
|
|
303
|
+
right: 56px;
|
|
304
|
+
z-index: 3;
|
|
305
|
+
display: flex;
|
|
306
|
+
gap: 36px;
|
|
307
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
308
|
+
color: white;
|
|
309
|
+
pointer-events: none;
|
|
310
|
+
opacity: 0;
|
|
311
|
+
transform: translateY(-8px);
|
|
312
|
+
transition: opacity 240ms ease, transform 240ms ease;
|
|
313
|
+
}
|
|
314
|
+
.canal-footer .game-hud.active { opacity: 1; transform: translateY(0); }
|
|
315
|
+
.canal-footer .game-hud .hud-block { text-align: right; }
|
|
316
|
+
.canal-footer .game-hud .hud-num {
|
|
317
|
+
display: block;
|
|
318
|
+
font-size: 36px;
|
|
319
|
+
font-weight: 700;
|
|
320
|
+
letter-spacing: -0.03em;
|
|
321
|
+
line-height: 1;
|
|
322
|
+
font-variant-numeric: tabular-nums;
|
|
323
|
+
transition: color 200ms ease;
|
|
324
|
+
/* Dark glow keeps the digits legible while bosses drift behind them. */
|
|
325
|
+
text-shadow: 0 1px 10px rgba(11,32,73,0.95), 0 0 4px rgba(11,32,73,0.7);
|
|
326
|
+
}
|
|
327
|
+
.canal-footer .game-hud .hud-label {
|
|
328
|
+
display: block;
|
|
329
|
+
font-size: 10px;
|
|
330
|
+
letter-spacing: 0.16em;
|
|
331
|
+
text-transform: uppercase;
|
|
332
|
+
color: rgba(255,255,255,0.55);
|
|
333
|
+
margin-top: 6px;
|
|
334
|
+
text-shadow: 0 1px 6px rgba(11,32,73,0.95);
|
|
335
|
+
}
|
|
336
|
+
.canal-footer .game-hud .hud-counter.tick .hud-num { animation: hud-tick 420ms ease; }
|
|
337
|
+
@keyframes hud-tick {
|
|
338
|
+
0% { transform: scale(1); color: white; }
|
|
339
|
+
35% { transform: scale(1.45); color: var(--c-orange-knvb); }
|
|
340
|
+
100% { transform: scale(1); color: white; }
|
|
341
|
+
}
|
|
342
|
+
.canal-footer .game-hud .hud-timer.urgent .hud-num {
|
|
343
|
+
color: #ff5544;
|
|
344
|
+
animation: hud-pulse 800ms ease infinite;
|
|
345
|
+
}
|
|
346
|
+
@keyframes hud-pulse {
|
|
347
|
+
0%, 100% { opacity: 1; }
|
|
348
|
+
50% { opacity: 0.45; }
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* Game-over panel — appears below the HUD when timer hits 0
|
|
352
|
+
or the counter reaches 0 (battleship sunk = victory). */
|
|
353
|
+
.canal-footer .game-over {
|
|
354
|
+
position: absolute;
|
|
355
|
+
top: 14px;
|
|
356
|
+
right: 56px;
|
|
357
|
+
z-index: 4;
|
|
358
|
+
background: rgba(0,0,0,0.55);
|
|
359
|
+
border: 1px solid rgba(255,255,255,0.18);
|
|
360
|
+
border-radius: 8px;
|
|
361
|
+
padding: 14px 18px;
|
|
362
|
+
font-family: var(--conduction-typography-font-family-code);
|
|
363
|
+
color: white;
|
|
364
|
+
pointer-events: auto;
|
|
365
|
+
text-align: right;
|
|
366
|
+
display: none;
|
|
367
|
+
min-width: 160px;
|
|
368
|
+
}
|
|
369
|
+
.canal-footer .game-over.show { display: block; }
|
|
370
|
+
.canal-footer .game-over .go-title {
|
|
371
|
+
font-size: 11px;
|
|
372
|
+
letter-spacing: 0.16em;
|
|
373
|
+
text-transform: uppercase;
|
|
374
|
+
color: var(--c-orange-knvb);
|
|
375
|
+
margin: 0 0 6px;
|
|
376
|
+
}
|
|
377
|
+
.canal-footer .game-over .go-stat {
|
|
378
|
+
font-size: 22px; font-weight: 700;
|
|
379
|
+
letter-spacing: -0.02em;
|
|
380
|
+
line-height: 1.1;
|
|
381
|
+
margin: 0 0 12px;
|
|
382
|
+
font-variant-numeric: tabular-nums;
|
|
383
|
+
}
|
|
384
|
+
.canal-footer .game-over button {
|
|
385
|
+
font-family: inherit;
|
|
386
|
+
font-size: 11px;
|
|
387
|
+
letter-spacing: 0.12em;
|
|
388
|
+
text-transform: uppercase;
|
|
389
|
+
background: var(--c-orange-knvb);
|
|
390
|
+
color: var(--c-cobalt-900);
|
|
391
|
+
border: 0;
|
|
392
|
+
border-radius: 4px;
|
|
393
|
+
padding: 7px 14px;
|
|
394
|
+
font-weight: 700;
|
|
395
|
+
cursor: pointer;
|
|
396
|
+
}
|
|
397
|
+
.canal-footer .game-over button:hover { filter: brightness(1.1); }
|
|
398
|
+
|
|
399
|
+
/* Boss ships sit one layer above their spawned siblings so the
|
|
400
|
+
cruise-swarm and battleship draw on top of the regular drift. */
|
|
401
|
+
.canal-footer .ci.boss { z-index: 2; }
|
|
402
|
+
|
|
403
|
+
/* Damage flash on a multi-HP ship hit — pure filter so we don't
|
|
404
|
+
fight the WAAPI translateX animation. */
|
|
405
|
+
.canal-footer .ci.damaged { animation: ci-damage 240ms ease; }
|
|
406
|
+
@keyframes ci-damage {
|
|
407
|
+
0%, 100% { filter: none; }
|
|
408
|
+
35% { filter: brightness(2.6) saturate(0.4) drop-shadow(0 0 6px rgba(255,255,255,0.7)); }
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/* HP pips above bosses — orange dots that fade out on each hit. */
|
|
412
|
+
.canal-footer .ci .hp-pips .pip {
|
|
413
|
+
transition: opacity 200ms ease, fill 200ms ease;
|
|
414
|
+
}
|
|
415
|
+
.canal-footer .ci .hp-pips .pip.hit {
|
|
416
|
+
opacity: 0.18;
|
|
417
|
+
fill: rgba(255,255,255,0.4);
|
|
418
|
+
}
|