Tasarım dili Genel bakış
İlkeler
Dört kural Zerone'u hesap verebilir kılar ve her biri tasarımda kararlar doğurur. Bu sayfa her kural için yayımlanmış metni, kuralın zorunlu kıldığı kararları ve her kararı bir testin mi yoksa yalnızca incelemenin mi koruduğunu gösterir. Ardından kuralların konuştuğu iki üslubu anlatır.
Dün orada olduğu için hiçbir şeye güvenilmez.
#Kural 01 / 04
İlk tarama, sunucuda zaten duran her ikiliyi, kütüphaneyi ve paketi orijinaliyle tartar. Referans orada olanı kaydeder, onu aklamaz.
Ürün bir dosyaya zaten orada olduğu için güvenmez. Bir sayfa da içeriği için sonradan çalışması beklenen bir betiğe güvenmez: içerik yerini sunucunun gönderdiği HTML ile kazanır. O HTML bitmiş hâldir: her kelime okunur, her görsel çizilmiştir.
Ortak belirme hareketi bu hâlin üzerine ancak betiği çalıştıktan sonra ve ziyaretçi daha az hareket istemediyse hareket ekler. Yani belirme hareketi içeriğin ortaya çıkma yolu değildir; zaten orada olan içeriğin hareket etme yoludur. Ana sayfanın açılışı ve iki kaydırma sahnesi ise başlangıç duruşlarını kendileri yazar ve betik kapalıyken ya da daha az hareket istendiğinde bitmiş hâle döner.
Betik kapalı
html.no-jsSon hâl, doğrudan HTML'den.
Azaltılmış hareket
htmlSon hâl. Ön durum hiç yazılmaz.
Hareket, henüz ekranda değil
html.motion [data-r]Ön durum; blok ekrana girene ya da 3000 ms sonra yedek zamanlayıcı onu bırakana kadar.
Hareket, ekranda
html.motion [data-r].inSon hâl, yalnızca transform ile.
14px aşağıda ve çizgisi henüz çizilmemiş hâliyle, yalnızca html.motion altında vardır ve 800 ms içinde son hâle varır.html.motion [data-r] {
transform: translateY(14px);
transition: transform 0.8s var(--ease-out-quart);
}
html.motion [data-r].in { transform: none; }
html.motion [data-r="rule"] { transform: scaleX(0); transform-origin: left; }
html.motion [data-r="rule"].in { transform: none; }Kural 01: tasarımda zorunlu kıldıkları
Betik kapalıyken her sayfa bütün çizimlerini yine gösterir; hiçbir belirme bloğu ön durumunda beklemez.
NedenBetik hata verebilir, engellenebilir ya da kapatılabilir. Sayfa yine de iddia ettiği her şeyi söylemek zorundadır.
TestHer değişiklikte bir testle korunur.
Azaltılmış harekette hiçbir sayfa
html.motioneklemez, her belirme bloğu son yerindedir ve hiçbir döngü başlamaz; bu yüzden duraklatma düğmesine gerek kalmaz.NedenDaha az hareket istemek, içeriği koreografisiz görmek istemektir; daha eksik bir sayfa istemek değil.
TestHer değişiklikte bir testle korunur.
Ortak belirme hareketi ön durumunu yalnızca
html.motionaltında yazar; bu sınıfı bir betik, yalnızca azaltılmış hareket kapalıyken ekler.NedenO ön durum varsayılan stillerde dursaydı, hiç çalışmayan bir betik içeriği gizli bırakırdı.
TestHer değişiklikte bir testle korunur.
Sitede hiçbir şey
opacityile hareket etmez. Belirme hareketitransform,clip-pathya da kendini çizen bir çizgiyle yapılır; metin her karede tam kontrasttadır.NedenKısmi opacity, geçişin ortasında ölçülen kontrastı düşürüyordu. Ziyaretçinin görebileceği her kare, geçmesi gereken bir karedir.
TestHer değişiklikte bir testle korunur.
Kanıt bize sormadan doğrulanır.
#Kural 02 / 04
Kanıt kendi doğrulayıcısıyla birlikte imzalı bir paket olarak çıkar; hesapsız, çevrimdışı ve sunucularımıza bağlanmadan denetlenir.
Bir tasarım kuralı da ürünün kanıtı gibi denetlenir: kimsenin sözüyle değil, her değişiklikte koşan bir denetimle. Bu sayfalardaki her kural kartı, kuralı bir testin mi denetlediğini yoksa yalnızca incelemenin mi koruduğunu söyler. Kimsenin çalıştırmadığı bir kılavuz, bir iddiadır.
Sayılar da aynı kurala uyar. Bu sayfalardaki değerler derleme sırasında kaynak dosyalarından hesaplanır, elle yazılmaz; kontrast oranı iki ondalıkta kesilir, asla yukarı yuvarlanmaz. Böylece eşiğin hemen altındaki bir çift, eşiği geçmiş gibi görünmez.
| Çift | Dört ondalıkta kesilmiş hesap | Gösterim | Küçük metin |
|---|---|---|---|
accent-deep paper üzerinde | 6,6597 | 6,65:1 | AA |
ink-subtle paper üzerinde | 4,8979 | 4,89:1 | AA |
accent paper üzerinde | 4,3855 | 4,38:1 | geçmez |
raw paper üzerinde | 5,7232 | 5,72:1 | AA |
Bu sayfadaki her satır içi betik güvenlik başlığındaki özetle eşleşir
Tarayıcı, o listede özeti bulunmayan hiçbir satır içi betiği çalıştırmaz; sayfa sunulduktan sonra eklenen satır içi bir betik de çalışmaz. Aşağıdaki özetler bu sayfadan okundu ve sayfa kaynağında duruyor.
Kural 02: tasarımda zorunlu kıldıkları
Bir kural onu neyin koruduğunu söyler: her değişiklikte koşan bir test mi, inceleme mi. Test yoksa kart bunu açıkça söyler.
NedenBir test, kuralın çiğnendiği gün yayından önce derleme hattını durdurur; inceleme ise yalnızca incelemecinin fark ettiğini yakalar. Bu sayfa kendi kartlarını da denetler: test diye işaretlenen her kart, o adla var olan bir teste bağlıdır; test yeniden adlandırılır ya da silinirse derleme hattı yine durur.
TestHer değişiklikte bir testle korunur.
Kontrast oranları token değerlerinden hesaplanır ve iki ondalıkta kesilir, asla yukarı yuvarlanmaz.
NedenElle yazılan bir sayı, anlattığı tokendan zamanla kopar. Yuvarlanmış bir oran, geçmeyen bir çifti geçiyormuş gibi gösterebilir.
TestHer değişiklikte bir testle korunur.
Yüzde işareti tek bir sözleşme rakamına ayrılmıştır. Yanına başka bir sayı yazılırsa, görünen metinde de
alt,titleya da meta açıklaması gibi bir metin özniteliğinde de derleme başarısız olur.NedenYüzde bir ölçüm gibi okunur. Sayfada görünen tek yüzde, sözleşmeye yazılmış bir taahhüttür; işaretin yanındaki başka her sayı bir iddia olurdu.
TestHer değişiklikte bir testle korunur.
Ölçemeyen bir görsel daha çok değil, daha az söyler. Betiği yokken bütünlük satırı sayı göstermez ve noktası sönük kalır.
NedenSayı, sayfanın kendi güvenlik başlığından gelir. Başka bir yerden gelen sayı bir iddia olurdu.
TestHer değişiklikte bir testle korunur.
Değişiklik bir sorudur, alarm değil.
#Kural 03 / 04
Her değişiklik önce tartılır: orijinal mi, hangi paket getirdi, hangi süreç yazdı, değişiklik penceresinde mi. Bir Windows güncellemesi sunucu başına tek alarma katlanır.
Üründe her değişiklik alarm olabilmeden önce tartılır ve çoğu hiç alarm olmaz. Sitede renk de aynı sırayla harcanır. Token dosyası iki renge bir anlam verir: ana sayfadaki kanıt sahnesinde ham renk ham, doğrulanmamış değişiklikleri, vurgu rengi ise triyajdan sonra kalan sinyali, yani tek alarmı çizer. Ham renk alarm kırmızısı değil, soluk bir tuğla tonudur. Sitenin başka yerlerinde kullanıldığı hâliyle vurgu rengi tarama çizgilerini, ilerlemeyi, bağlantı alt çizgilerini ve odak halkasını da işaretler; ham renk ise işaretlenen dosyaları ve bulguları. Geri kalan her şey sıcak kâğıt üzerinde mürekkeptir.
Hareket de aynı tutumla kullanılır. Bir görsel bir şeyi anlatmak için hareket eder, sonra sonucunu tutar; süren bir döngü o sonucu hiç silmez ve her zaman duraklatılabilir.
- --color-accent#00847eTriyajdan sonra kalan sinyal; kullanımda çizgiler, halkalar, alt çizgiler ve noktalar için de. Küçük metin asla.
- 4,38:1 paper geçmez
- 4,12:1 paper-2 geçmez
- --color-accent-deep#006560Metin taşıdığında vurgu rengi; kâğıt rengindeki metnin arkasındaki dolgular.
- 6,65:1 paper AA
- 6,26:1 paper-2 AA
- --color-raw#a9432cHam değişiklik ve işaretlenen bulgular. Soluk bir tuğla tonu, alarm kırmızısı değil.
- 5,72:1 paper AA
- 5,38:1 paper-2 AA
- --color-ink#0f1c26Sinyal olmayan her şey: metin, çizgiler, glif.
- 16,61:1 paper AAA
- 15,62:1 paper-2 AAA
Kural 03: tasarımda zorunlu kıldıkları
Palet kapalıdır. Tailwind'in varsayılan renkleri silinmiştir; renk sınıfları yalnızca tek bir dosyadaki tokenlar için vardır: 11 renk, artı
transparentvecurrent.NedenVarsayılan bir Tailwind rengi bir yardımcı sınıfla içeri giremez. Keyfi değerler ve bileşen stillerine elle yazılan renkler ise bir testin değil, incelemenin işidir.
TestHer değişiklikte bir testle korunur.
Kanıt sahnesinde ham renk her ham değişikliği çizer; vurgu rengi yalnızca triyajdan sonra kalan sinyali çizer.
NedenTek renkle çizilmiş bir sahne tek bir grafik gibi okunur. Gürültünün kendi rengi olmalı; token dosyası bu rengi alarm kırmızısı değil, soluk bir tuğla tonu olarak tutar.
İncelemeBir testle değil, incelemeyle korunur.
Vurgu rengi küçük metin taşımaz. Vurgu tonundaki metin
accent-deepile yazılır; vurgu renginin kendisi çizgileri, halkaları ve noktaları işaretler.NedenKâğıt üzerinde vurgu rengi 4,38:1 hesaplanır; küçük metin için AA alt sınırının altındadır. Erişilebilirlik taraması her sayfada çalışır ve ölçebildiği, eşiğin altında kalan her metinde başarısız olur.
TestHer değişiklikte bir testle korunur.
Belirme motorunun başlattığı her döngünün yanında, aynı sayfada görünür bir duraklatma düğmesi vardır.
NedenZiyaretçi istemedikçe bir döngü gürültüdür. Duraklatma kararı her sayfada geçerli kalır; döngüler ekran dışında ve arka plandaki bir sekmede de durur.
TestHer değişiklikte bir testle korunur.
Her tespit kapalı ağınızda da çalışır.
#Kural 04 / 04
Kendi barındırdığınız kurulum aynı üründür: çevrimdışı imzalı lisans, elle taşınan imzalı güncellemeler, meşruiyet veritabanının yerel kopyası. Dışarıya yol isteyenler adıyla yazılır ve kapalıdır: itibar sorguları ve güvenilir zaman damgası.
Ürün dışarıya hiçbir yol olmadan her tespiti çalıştırmayı sürdürür; site de kendini aynı kurala bağlar. Bir sayfa çizilmek için başka bir kökenden hiçbir şeye ihtiyaç duymaz: iki yazı tipi ailesi de bu depodaki dosyalardır, paylaşım görselleri derleme sırasında çizilir ve bu sayfadaki token değerleri, oranlar ve dosya boyutları derleme sırasında dosyalardan okunur, bir servisten çekilmez.
Tek bir istisna gizlenmez, denetimde açıkça tanımlıdır: iletişim formundaki bot denetimi betiğini kendi sağlayıcısından yükler, yalnızca o sayfada. Her sayfanın politikası betikler, çerçeveler ve bağlantılar için bu sağlayıcıyı yine de anar; betiği iletişim sayfasında tutan şey denetimdir.
| Yazı tipi ve dosya | Boyut |
|---|---|
| Geist Mono 400GeistMono-400.woff2 | 13,9 KB |
| Geist Mono 500GeistMono-500.woff2 | 14,1 KB |
| New Black 400NewBlack-400.woff2 | 10,8 KB |
| New Black 500NewBlack-500.woff2 | 10,7 KB |
| New Black 600NewBlack-600.woff2 | 10,7 KB |
| New Black 700NewBlack-700.woff2 | 10,8 KB |
| Toplam | 70,9 KB |
default-src 'self';
img-src 'self' data:;
font-src 'self';
object-src 'none';
base-uri 'self';Kural 04: tasarımda zorunlu kıldıkları
Yazı tipi bu kökenden sunulur. İki aile de yerel dosyadır ve güvenlik politikası yazı tiplerine yalnızca bu kökenden izin verir; bir sayfa bir yazı tipi servisini ansa bile onu yükleyemez.
NedenBir yazı tipi servisini bekleyen sayfa, o servise ulaşılamayan yerde farklı görünür ya da hiç görünmez.
TestHer değişiklikte bir testle korunur.
Paylaşım görselleri derleme sırasında çizilir; sayfa bir görseli anmadan önce o görsel derlemede var olmak zorundadır.
NedenÖnizleme kartı sayfanın bir parçasıdır. Depodaki dosyalardan üretilir, bir görsel servisinden istenmez.
TestHer değişiklikte bir testle korunur.
Sayfalar betikleri yalnızca bu kökenden yükler. Tek istisna iletişim formundaki bot denetimidir ve derleme denetimi onu adıyla anar: o betik, o sağlayıcıdan, yalnızca iletişim sayfasında.
NedenKapalı bir ağ başka bir kökene ulaşamaz. Denetimin adıyla andığı bir istisna yayılamaz: aynı betik ikinci bir sayfada ya da ikinci bir sağlayıcıdan gelen bir betik derlemeyi durdurur.
TestHer değişiklikte bir testle korunur.
Bu sayfa başka bir kökenden hiçbir şey istemez. Kendi testi, sayfanın yaptığı her isteği kaydeder ve dışarı çıkan herhangi bir istekte başarısız olur.
NedenKural, söylendiği yerde denetlenir.
TestHer değişiklikte bir testle korunur.
İki üslup
#Tek bir dil iki üslupla konuşur; her üslup, onu okuyan insanlar için seçilmiştir.
Konsol sakin olmalı; site iddialı olmalı.
Sitenin derdini anlatmak için birkaç saniyesi vardır; bu yüzden iddialı üslupla konuşur: tam ağırlıkta başlık yazısı, sıcak kâğıt, sinyal için tek bir vurgu rengi ve bir şeyi anlatan hareket. Zero Door ise uzun süre okunan bir çalışma aracıdır; bu yüzden sakin üslupla konuşur: varsayılan olarak koyu tema, duruma ayrılmış doygun renk, bir eylemi onaylayan kısa hareket ve veri için yoğunluk.
Üsluplar bilerek farklıdır ama aynı ailedendir. İkisinin altında da dört kural, glif, ease-out eğrisi ve orta köşe yarıçapı vardır. Ürünün açık teması sitenin kâğıt, ince çizgi ve ikincil metinden oluşan nötr ton dizisini de kullanır; varsayılan koyu teması kullanmaz. Aşağıdaki tablolar iki token dosyasını doğrudan karşılaştırır: her eşleşme hesaplanır, öne sürülmez.
İki dosya da yayımlanır: sitenin token dosyası ve Zero Door token anlık görüntüsü.
zeronesecurity.com · iddialı
Gürültüden sinyale
Bir sunucu günde binlerce değişiklik üretir. Sizin tek bir ses duymanız gerekir.
Paket güncellemeleri, günlük rotasyonu, geçici dosyalar, gerçek bir implant: hepsi değişiklik gibi görünür. Zero Door her birine başka bir soru sorar: meşru mu? Kim imzalamış, hangi paketle gelmiş, daha önce nerede görülmüş ve bellekte çalışan diskteki ile aynı mı. Yalnız cevap hayırsa konuşur.
Zero Door · sakin
- Critical3/etc/cron.d/backup-syncweb-01
- High1/usr/local/bin/agent-updatedb-02
- Medium12C:\ProgramData\Vendor\config.jsonws-114
- Low2/var/www/html/index.phpweb-03
Critical --signal-dangerHigh --signal-warningMedium --signal-infoLow, Info --fg-subtle
İki üslubun paylaştıkları
| Site | Zero Door | Sonuç |
|---|---|---|
| --color-paper#fdfaf6 | --surfaceoklch(0.985 0.006 75)= #fdfaf6 | Aynı |
| --color-paper-2#f6f3ee | --surface-subtleoklch(0.965 0.007 75)= #f6f3ee | Aynı |
| --color-hair#e2dfdb | --zd-borderoklch(0.905 0.006 75)= #e2dfdb | Aynı |
| --color-hair-2#cdcac6 | --zd-border-strongoklch(0.840 0.006 75)= #cdcac6 | Aynı |
| --color-ink-muted#5c5753 | --fg-mutedoklch(0.460 0.010 60)= #5c5753 | Aynı |
| --color-ink-subtle#736d69 | --fg-subtleoklch(0.540 0.010 60)= #736d69 | Aynı |
| --ease-out-quartcubic-bezier(0.23, 1, 0.32, 1) | --ease-outcubic-bezier(0.23, 1, 0.32, 1) | Aynı |
| --radius-md8px | --radius-md8px | Aynı |
| Davranış | Site | Zero Door |
|---|---|---|
| Renk asla tek başına değildir | Bir karar ya da kontrast notu bir kelimedir; renk yalnızca onu işaretler | Önem derecesi, kelimesinin yanında bir noktadır |
| Azaltılmış hareket gözetilir | Hareket sınıfı yok, belirme kayması yok, döngü yok | Her geçişin ve animasyonun süresi 0,01 ms olur; hiçbir animasyon tekrarlanmaz |
Bilerek ayrıldıkları yerler
| Konu | Site | Zero Door |
|---|---|---|
| Tema | Yalnızca açık; koyu mürekkep paneller yerel olarak, kodun ve sahnelerin çevresinde görünür | Varsayılan olarak koyu ve sistem ayarından bağımsız; açık tema da var |
| Varsayılan temada yüzey | --color-paper#fdfaf6 | --surfaceoklch(0.190 0.008 250)= #111417 |
| Metin rengi | --color-ink#0f1c26 | --fgoklch(0.235 0.010 60)= #221d19açık temada |
| Anlam taşıyan renk | Triyajdan sonra kalan sinyal için tek vurgu rengi, ham değişiklik için ham renk --color-accent #00847e --color-raw #a9432c | Önem derecesi ve durum için 4 sinyal tokenı |
| Yazı tipleri | New Black ve Geist Mono | Inter ve Geist Mono |
| Küçük yarıçap | --radius-sm6px | --radius-sm4px |
| Hareket | Belirme 800 ms; düğme geri bildirimi 160 ms | Geri bildirim 130 ms; geçişlerin neredeyse tamamında |