Stiglo je novo izdanje. Osvježi stranu.
Pravo na uvid u kod. Otvoren protokol omogućava nezavisne operatere i interoperabilnost. Manifest
Izvor
4d7883a894b3
- server.js
- lib/auth.js
- lib/build.js
- lib/cards.js
- lib/db.js
- lib/gradovi.js
- lib/icons.js
- lib/imena.js
- lib/jezik.js
- lib/kartapodaci.js
- lib/lekcije.js
- lib/md.js
- lib/mehanika.js
- lib/mreza.js
- lib/pages.js
- lib/registar.js
- lib/routes.js
- lib/schema2.js
- lib/views.js
- seed/content.mjs
- seed/seed.mjs
- public/app.js
- public/style.css
1 @font-face{font-family:Oswald;src:url('/static/fonts/oswald-latin-wght-normal.woff2');font-weight:200 700;unicode-range:U+0000-00FF}@font-face{font-family:Plex;src:url('/static/fonts/ibm-plex-mono-latin-400-normal.woff2');unicode-range:U+0000-00FF}
2 @font-face{font-family:Oswald;src:url('/static/fonts/oswald-latin-ext-wght-normal.woff2')}@font-face{font-family:Oswald;src:url('/static/fonts/oswald-cyrillic-wght-normal.woff2');unicode-range:U+0400-052F}@font-face{font-family:Plex;src:url('/static/fonts/ibm-plex-mono-latin-ext-400-normal.woff2')}@font-face{font-family:Plex;src:url('/static/fonts/ibm-plex-mono-cyrillic-400-normal.woff2');unicode-range:U+0400-052F}
3 :root{--papir:#f3ecd8;--papir-2:#e7dec3;--sto:#cfc7b0;--tinta:#1a1714;--siva:#6b6456;--plava:#003893;--plava-2:#002a6e;--crvena:#c8102e;--zuta:#f5c400;--bijela:#fff;--zelena:#1f6b3a;--vitrina:#14110f;color-scheme:light}*{box-sizing:border-box}body{margin:20px 0;background:var(--sto);color:var(--tinta);font:16px/1.5 Georgia,'Times New Roman','Liberation Serif',serif}a{color:var(--plava);text-underline-offset:3px}a:visited{color:var(--plava-2)}button,input,select,textarea{font:inherit;max-width:100%}button,.btn{border:2px outset;background:#d8d0b8;padding:6px 12px;color:var(--tinta);cursor:pointer}button:active{border-style:inset}.primary{background:var(--crvena);color:#fff}input,select,textarea{border:2px inset;background:#fff;padding:7px;width:100%}input[type=checkbox],input[type=radio],input[type=hidden]{width:auto}textarea{min-height:140px}label{display:block;margin:10px 0;font:14px Oswald,sans-serif}form{margin:12px 0}h1,h2,h3,th,.nav,.podnaslov{font-family:Oswald,Georgia,serif;letter-spacing:.04em}h1{text-transform:uppercase;font-size:34px;border-bottom:3px double;margin:12px 0}h2{font-size:23px}h3{font-size:18px}.mono,time,small,.badge{font-family:Plex,monospace;font-size:12px}.novine{max-width:980px;margin:auto;background:var(--papir);border:2px solid var(--tinta);position:relative}header{text-align:center}.datum{border-bottom:1px solid;padding:8px}.masthead{font:700 clamp(30px,6vw,65px)/1.2 Oswald,serif;text-decoration:none;color:var(--tinta)!important;text-shadow:1px 1px 0 var(--crvena);display:block;padding-top:15px}.podnaslov{margin:6px 0 16px;font-size:13px}/* trobojka */.trobojka{height:6px;background:linear-gradient(to bottom,var(--plava) 0 33%,var(--bijela) 33% 66%,var(--crvena) 66%)}.nav{display:flex;flex-wrap:wrap;border-bottom:1px solid}.nav>a,.nav>span{padding:8px;border-right:1px solid;text-decoration:none;font-size:14px;flex-grow:1}.nav [aria-current]{background:var(--tinta);color:var(--papir)}.userbox{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px;font-size:13px}.userbox form{display:flex;gap:4px;margin:0}.userbox label{margin:0}.teletekst{background:#000;color:#ffff00;padding:5px 9px;text-align:left;font:12px Plex,monospace;overflow:hidden;max-height:48px}.teletekst a{color:#00ffff}.teletekst-page{background:#000;color:#fff;padding:15px;font-family:Plex,monospace}.teletekst-page pre{font-size:clamp(7px,2vw,16px);line-height:1;white-space:pre}main{padding:18px}footer{border-top:3px double;padding:18px;font-size:12px}footer p{margin:4px 0}/* probna-slika */.probna-slika{height:28px;background:linear-gradient(to right,#fff 0 12.5%,#ffff00 12.5% 25%,#00ffff 25% 37.5%,#00ff00 37.5% 50%,#ff00ff 50% 62.5%,#ff0000 62.5% 75%,#0000ff 75% 87.5%,#000 87.5%)}table{border-collapse:collapse;width:100%;table-layout:fixed;margin:16px 0}td,th{border:1px solid var(--tinta);padding:10px;text-align:left;overflow-wrap:anywhere}th{background:var(--plava);color:#fff;text-transform:uppercase}tr:nth-child(even){background:var(--papir-2)}.forum th:nth-child(1){width:39%}.forum th:nth-child(2),.forum th:nth-child(3){width:12%}.post .autor{width:170px;vertical-align:top;background:var(--papir-2)}.post td{vertical-align:top}.post .autor>*{display:block;margin-bottom:8px}.av{width:60px;height:60px;display:inline-block}.cols{display:grid;grid-template-columns:minmax(0,1fr) 245px;gap:18px}.panel{border:1px solid;padding:12px;margin:14px 0}.panel>h2{background:var(--tinta);color:var(--papir);margin:-12px -12px 12px;padding:5px 10px;font-size:17px}.lead p{margin-top:0}.lead,.manifest-text{column-count:2;column-rule:1px solid;column-gap:28px;text-align:justify}.lead>p:first-child:first-letter,.manifest-text>p:first-child:first-letter{float:left;font-size:58px;line-height:1;padding-right:6px}.quote{border-left:4px solid var(--crvena);margin:12px 0;padding:7px 14px;font-style:italic}.tag{background:var(--tinta);color:var(--zuta);font:12px Plex,monospace;padding:3px 5px}.protected{color:var(--crvena)}.steps,.doors{display:flex;flex-wrap:wrap;gap:8px}.steps a,.doors a{border:1px solid;padding:8px;flex:1;min-width:100px}.muted{color:var(--siva)}.sr,.skip:not(:focus){position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}:focus-visible{outline:3px solid var(--plava);outline-offset:3px}[hidden]{display:none!important}.honey{position:absolute;clip-path:inset(50%);width:1px;height:1px}.map{width:100%;height:auto}.map path[data-jed]{fill:#e9dfc2;stroke:var(--tinta);stroke-width:1.5}.map a:nth-of-type(even) path[data-jed]{fill:#e2d6b4}.map .edge{fill:none;stroke:var(--plava);stroke-dasharray:4 8;opacity:.5}.map text{font:13px Oswald,serif;fill:var(--tinta)}.map .marker{fill:var(--crvena)}.map .dij{fill:none;stroke:var(--siva);stroke-dasharray:6}.monitor{background:#b9b2a0;border:3px solid;padding:15px}.screen{background:#07120a;color:#33ff66;padding:16px;font:14px Plex,monospace;overflow-wrap:anywhere}.screen input{background:#07120a;color:#33ff66}.origin{border:2px solid;padding:10px;overflow-wrap:anywhere}iframe{width:100%;height:450px;border:1px solid}pre,code{overflow-wrap:anywhere;white-space:pre-wrap;font:13px Plex,monospace}img,svg{max-width:100%}.album{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.empty{border:2px dotted var(--siva);min-height:190px;padding:16px;color:var(--siva)}.listing{border-bottom:1px solid;padding:14px 0}.vitrina{background:var(--vitrina);padding:20px;color:var(--papir)}.vitrina a{color:#b6d0ff}.vitrina button{color:var(--tinta)}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.fine{font-size:12px}.formrow{display:grid;grid-template-columns:1fr 1fr;gap:12px}
4 /* KARTE */
5 .karta{perspective:1200px;margin:8px auto;max-width:440px;--rx:0deg;--ry:0deg;--mx:50%;--my:50%;--hyp:.3;touch-action:pan-y}.karta-tijelo{position:relative;transform-style:preserve-3d;aspect-ratio:1.587;transform:rotateX(var(--rx)) rotateY(calc(var(--ry) + var(--flip,0deg)));transition:transform .7s;border-radius:12px;box-shadow:0 14px 30px #0008}.karta.slicica{max-width:300px}.slicica .karta-tijelo{aspect-ratio:5/7}.karta[data-flipped=true]{--flip:180deg}.lice,.nalicje{position:absolute;inset:0;border:1px solid #e7d898;border-radius:12px;overflow:hidden;backface-visibility:hidden;background:linear-gradient(130deg,#003893,#14110f 60%,#7e571a);color:#fff;padding:18px;display:flex;flex-direction:column;justify-content:space-between}.nalicje{transform:rotateY(180deg);font-size:12px;background:linear-gradient(135deg,#362b23,#12182d)}.lice h3{font-size:24px;margin:5px 0}.sloj-podloga{position:absolute;inset:0;opacity:.4;transform:translateZ(0)}.sloj-sredina{transform:translateZ(18px)}.sloj-tekst{transform:translateZ(34px);position:relative;font:12px Plex,monospace}.folija,.iskre,.odsjaj,.rub{pointer-events:none;position:absolute;inset:0;border-radius:12px}.folija{background:repeating-linear-gradient(110deg,#f3bb2b,#42d6ff,#fb8cff,#5bffb0,#f3bb2b);background-size:300% 300%;background-position:var(--mx) var(--my);mix-blend-mode:color-dodge;opacity:calc(var(--hyp)*.5)}.iskre{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='19' height='19'%3E%3Crect x='4' y='7' width='1' height='1' fill='white'/%3E%3C/svg%3E");mix-blend-mode:overlay;mask-image:linear-gradient(110deg,transparent,#000,transparent);opacity:.5}.odsjaj{background:radial-gradient(circle at var(--mx) var(--my),#ffffffbf,transparent 45%);mix-blend-mode:soft-light}.rub{border:1.5px solid #fff6}.obicna .folija,.obicna .iskre{display:none}.rijetka .folija{mask-image:linear-gradient(120deg,transparent 35%,#000 48%,transparent 60%)}.hologram .rub{background:conic-gradient(from var(--ry),transparent,#fffb,transparent,#6cffff55,transparent);mix-blend-mode:overlay}.osnivacka .folija{background:linear-gradient(110deg,#885511,#ffe477,#bd8720)}.karta button{margin-top:8px;font-size:12px}.card-art{width:100%;height:145px}.karta small{font-size:10px}.karta .prava{font-size:11px}.karta-tijelo.idle{animation:sway 6s ease-in-out infinite}@keyframes sway{50%{transform:rotateX(3deg) rotateY(-5deg)}}
6
7 .karta .av{width:24px;height:24px;vertical-align:middle}.karta .card-art{height:100%;opacity:.8}.karta .sloj-sredina{background:#14110f99;padding:8px}.nalicje .prava{font-size:clamp(9px,2.5vw,12px)}.album[data-pack] .karta:nth-child(-n+3){animation:otvori .8s ease-out}@keyframes otvori{from{transform:translateY(25px) rotate(-7deg);opacity:0}to{transform:none;opacity:1}}.karta[data-active] .karta-tijelo{transition:transform .08s}
8
9 /* KRAJ KARTE */
10 @media(max-width:800px){.lead,.manifest-text{column-count:1}.cols{grid-template-columns:1fr}.album,.grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
11 @media(max-width:700px){body{margin:0}.novine{border-left:0;border-right:0}main{padding:12px}.nav>a{padding:7px 5px}.forum,.forum thead,.forum tbody,.forum tr,.forum td,.forum th,.post,.post tbody,.post tr,.post td{display:block;width:100%!important}.forum thead{display:none}.forum td{border-bottom:0}.forum tr{border-bottom:2px solid}.post .autor{display:flex;flex-wrap:wrap;gap:10px}.post .autor>*{margin:0}.formrow{grid-template-columns:1fr}.album,.grid{grid-template-columns:1fr}.karta{width:100%}.userbox{gap:7px}.userbox form{max-width:100%}h1{font-size:28px}}
12 @media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.karta-tijelo{transform:rotateY(var(--flip,0deg))!important}}
13
14 /* zrno */
15 .novine::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:2;opacity:.06;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='.7'/%3E%3C/svg%3E")}
16 /* monitor */
17 .screen{position:relative;background-image:repeating-linear-gradient(0deg,transparent 0 3px,#0003 3px 4px)}
18
19 .map .slot{fill:var(--papir-2);stroke:var(--siva);stroke-width:1}.map .unit-name{font-size:15px;letter-spacing:1px;fill:#6b6456}.map .edge{animation:signal-line 20s linear infinite}@keyframes signal-line{to{stroke-dashoffset:-120}}
20
21
22 @media(prefers-reduced-motion:reduce){.karta-tijelo{transform:none!important}.karta .lice,.karta .nalicje{transform:none;backface-visibility:visible;transition:opacity .15s!important}.karta .nalicje{opacity:0}.karta[data-flipped=true] .lice{opacity:0}.karta[data-flipped=true] .nalicje{opacity:1}}
23 .pack-opening{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin:18px 0}@media(max-width:700px){.pack-opening{grid-template-columns:1fr}}
24
25 .map .mirror-node{fill:none;stroke:var(--plava);stroke-width:2}.tele-unit{display:inline-block;width:1ch}.tele-slo,.tele-mak{background:#00ffff}.tele-hrv,.tele-kos{background:#0000ff}.tele-bih,.tele-voj{background:#00ff00}.tele-cg{background:#ff00ff}.tele-srb{background:#ff0000}.teletekst-page .tele-count{color:#ffff00;background:#000000}
26 .teletekst-page a{color:#00ffff}.teletekst-page a:visited{color:#ffff00}
27
28 .map .pulse{animation:node-pulse 1s ease-out 2;transform-box:fill-box;transform-origin:center}@keyframes node-pulse{50%{transform:scale(2);fill:var(--zuta)}}.unit-bars{vertical-align:middle}
29