mirror of
https://codeberg.org/Kankys/doxa.git
synced 2026-11-11 14:44:36 +01:00
new-doxa-monorepo
This commit is contained in:
1 parent
b4401527a3
commit
5eacbb0182
162 files changed
+21820
-2
No files matched your search
@@ -0,0 +1,135 @@
|
||||
<!doctype html>
|
||||
<html lang="cs">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title data-i18n-key="about.pageTitle">O projektu — DOXA Notes</title>
|
||||
<meta name="description" data-i18n-key="about.pageDescription" data-i18n-attr="content"
|
||||
content="Přečtěte si manifest a filozofické i technické cíle projektu DOXA Notes. Technická suverenita, local-first přístup a bezpečné ukládání myšlenek." />
|
||||
<link rel="canonical" href="https://doxa-notes.org/about.html" />
|
||||
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://doxa-notes.org/about.html" />
|
||||
<meta property="og:title" data-i18n-key="about.ogTitle" data-i18n-attr="content" content="O projektu — DOXA Notes" />
|
||||
<meta property="og:description" data-i18n-key="about.ogDescription" data-i18n-attr="content" content="Manifest a filozofické cíle projektu DOXA Notes. Technická suverenita, local-first přístup a bezpečné ukládání myšlenek." />
|
||||
<meta property="og:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta property="og:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
<meta property="og:locale" data-i18n-key="ogLocale" data-i18n-attr="content" content="cs_CZ" />
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" data-i18n-key="about.twitterTitle" data-i18n-attr="content" content="O projektu — DOXA Notes" />
|
||||
<meta name="twitter:description" data-i18n-key="about.twitterDescription" data-i18n-attr="content" content="Manifest a filozofické cíle projektu DOXA Notes." />
|
||||
<meta name="twitter:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta name="twitter:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
|
||||
<link rel="stylesheet" href="assets/style/style.css" />
|
||||
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<nav class="top-nav">
|
||||
<a href="index.html" data-i18n-key="nav.home">Domů</a>
|
||||
<a href="https://wiki.doxa-notes.org/index.html" target="_blank" data-i18n-key="nav.wiki">Wiki</a>
|
||||
<a href="privacy.html" data-i18n-key="nav.privacy">Ochrana soukromí</a>
|
||||
<a href="about.html" data-i18n-key="nav.about">O projektu</a>
|
||||
<button id="langToggle" class="theme-toggle" title="Přepnout jazyk / Switch language">
|
||||
🇬🇧 / 🇨🇿
|
||||
</button>
|
||||
<button id="themeToggle" class="theme-toggle" data-i18n-key="nav.themeToggle" data-i18n-attr="aria-label" aria-label="Přepnout motiv">
|
||||
🌙
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
<h1 data-i18n-key="about.mainTitle">O projektu — Doxa</h1>
|
||||
|
||||
|
||||
|
||||
<p><img src="assets/img/doxa.png" alt="Doxa" width="70%" height="auto"
|
||||
style="display: block; margin: 0 auto;border-radius: 10px;" /></p>
|
||||
<br>
|
||||
<h2 style="text-align: center;" data-i18n-key="manifest.title">Manifest digitální suverenity a minimalistického myšlení</h2>
|
||||
<br>
|
||||
<p><strong data-i18n-key="manifest.projectIntent.title">Záměr projektu:</strong></p>
|
||||
<p data-i18n-key="manifest.projectIntent.body">Vytvořit absolutně nezávislé, bezpečné a minimalistické prostředí pro uchovávání lidských myšlenek, poznámek
|
||||
a životních reflexí. V souladu se základními principy osobní svobody a soběstačnosti aplikace vědomě odmítá
|
||||
cloudové databáze, servery třetích stran a centralizovaná API. Doxa věří, že lidská mysl nepotřebuje být
|
||||
sledována algoritmy, aby mohla růst.</p>
|
||||
<br>
|
||||
<h3 data-i18n-key="manifest.localFirst.title">1. Radikální Local-First Filozofie</h3>
|
||||
<p data-i18n-key="manifest.localFirst.subtitle">Aplikace funguje na principu absolutní decentralizace. Běží na tvém zařízení a tam také umírá i žije.</p>
|
||||
<ul>
|
||||
<li data-i18n-key="manifest.localFirst.noBackend">Žádný backend, žádné API: Doxa vědomě neobsahuje žádný kód pro odesílání dat na vzdálené servery. Tím je
|
||||
eliminováno riziko úniku dat, výpadku serveru nebo změny obchodních podmínek poskytovatele.</li>
|
||||
<li data-i18n-key="manifest.localFirst.privacy">Absolutní soukromí: Data jsou uložena výhradně v tvém prohlížeči (localStorage) nebo lokálním souboru.
|
||||
Co napíšeš, to zůstává tvým výhradním vlastnictvím.</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3 data-i18n-key="manifest.jsonFormat.title">2. Formát JSON: Trvanlivost napříč dekádami</h3>
|
||||
<p data-i18n-key="manifest.jsonFormat.subtitle">Data jsou strukturována do otevřeného, čistého a lidsky čitelného formátu JSON. Žádné proprietární databáze.</p>
|
||||
<ul>
|
||||
<li data-i18n-key="manifest.jsonFormat.ownership">Tvá data ti patří. Díky možnosti manuálního exportu si můžeš svůj myšlenkový fond odnést kamkoli –
|
||||
uložit si ho na svůj bezpečný lokální disk, nahrát na vlastní Git (GitHub/Gitea), nebo jej
|
||||
synchronizovat skrze cloudovou službu, kterou ty sám uznáš za bezpečnou.</li>
|
||||
<li data-i18n-key="manifest.jsonFormat.longevity">Čistota formátu zaručuje, že tvé poznámky budou čitelné i za dvacet let na jakémkoli zařízení, bez
|
||||
ohledu na to, zda Doxa bude stále existovat.</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3 data-i18n-key="manifest.vanillaStack.title">3. Technická čistota a minimalismus (Vanilla Stack)</h3>
|
||||
<p data-i18n-key="manifest.vanillaStack.subtitle">Pro zachování maximální rychlosti, nezávislosti a nulových externích závislostí je aplikace postavena
|
||||
výhradně na čistých webových standardech: </p>
|
||||
<ul>
|
||||
<li data-i18n-key="manifest.vanillaStack.frontend">Frontend (HTML5/CSS3): Minimalistické rozhraní, které nezatěžuje mysl barevným chaosem a vizuálním
|
||||
balastem moderního internetu.</li>
|
||||
<li data-i18n-key="manifest.vanillaStack.logic">Logika (Vanilla JavaScript ES6+): Žádné těžkopádné frameworky (React/Vue), které podléhají módním
|
||||
trendům a neustálým změnám. Čistý kód je trvanlivý jako tesání do kamene.</li>
|
||||
</ul>
|
||||
<blockquote style="white-space: pre-wrap;">
|
||||
<p data-i18n-key="manifest.quote">„Nezáleží na tom, jak složité jsou okolnosti kolem tebe. Když stavíš vlastní chrám myšlenek, začínáš od prvního kamene. Tento kód a tvá data jsou tvým vlastním, nedobytným hradem.“</p>
|
||||
<footer data-i18n-key="manifest.quote.author">— Stoický odkaz pro svobodné myslitele</footer>
|
||||
</blockquote>
|
||||
<br>
|
||||
<hr id="lineHR">
|
||||
<br>
|
||||
<h2 data-i18n-key="about.architecture.title">Architektura</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="about.architecture.item1">Frontend: čisté HTML/CSS/JS (bez frameworků).</li>
|
||||
<li data-i18n-key="about.architecture.item2">Datový formát: otevřený JSON — trvanlivý a přenosný.</li>
|
||||
<li data-i18n-key="about.architecture.item3">Local‑first: data jsou lokální (localStorage nebo soubor).</li>
|
||||
<li data-i18n-key="about.architecture.item4">Desktop aplikace pro Linux je zabalena do instalátorů AppImage.</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2 data-i18n-key="about.recent.title">Co bylo přidáno naposledy</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="about.recent.item1">Podpora více poznámek v jednom JSON (název + obsah).</li>
|
||||
<li data-i18n-key="about.recent.item2">Přidání, editace (inline + modal), mazání poznámek.</li>
|
||||
<li data-i18n-key="about.recent.item3">Přesouvání pořadí (šípky + drag & drop).</li>
|
||||
<li data-i18n-key="about.recent.item4">Import / Export JSON a fallback mezi localStorage a lokálním souborem (Electron).</li>
|
||||
<li data-i18n-key="about.recent.item5">Přidána Markdown podpora</li>
|
||||
<li data-i18n-key="about.recent.item6">Desktop aplikace pro Linux</li>
|
||||
<li data-i18n-key="about.recent.item7">Přidání tagů do poznámek</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2 data-i18n-key="about.plans.title">Další plány</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="about.plans.item1">Rozšíření UI (hledání, historie/undo).</li>
|
||||
</ul>
|
||||
<br>
|
||||
<hr id="lineHR">
|
||||
<br>
|
||||
<p data-i18n-key="about.repo.text" style="white-space: pre-wrap;">Projekt najdeš v repozitáři
|
||||
<a id="links" href="https://codeberg.org/kankys/doxa" target="_blank"> Codeberg</a>. Pokud chceš přispět,
|
||||
otevři issue nebo PR.</p>
|
||||
<p data-i18n-key="about.author.text" style="white-space: pre-wrap;">Web autora, další projekty a podpora: <a id="links" href="https://lukaskanka.cz/" target="_blank">Lukáš Kaňka</a></p>
|
||||
<p data-i18n-key="about.license.text">Aplikace je open-source a licencována pod MIT licencí.</p>
|
||||
<br />
|
||||
</div>
|
||||
<footer>
|
||||
<p class="copyright" data-i18n-key="footer.copyright">© 2026 Doxa Notes | Local-First & Freedom 🦅</p>
|
||||
</footer>
|
||||
<script src="assets/js/i18n.js"></script>
|
||||
<script src="assets/js/script.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M184 120C184 89.1 209.1 64 240 64L264 64C281.7 64 296 78.3 296 96L296 544C296 561.7 281.7 576 264 576L232 576C202.2 576 177.1 555.6 170 528C169.3 528 168.7 528 168 528C123.8 528 88 492.2 88 448C88 430 94 413.4 104 400C84.6 385.4 72 362.2 72 336C72 305.1 89.6 278.2 115.2 264.9C108.1 252.9 104 238.9 104 224C104 179.8 139.8 144 184 144L184 120zM456 120L456 144C500.2 144 536 179.8 536 224C536 239 531.9 253 524.8 264.9C550.5 278.2 568 305 568 336C568 362.2 555.4 385.4 536 400C546 413.4 552 430 552 448C552 492.2 516.2 528 472 528C471.3 528 470.7 528 470 528C462.9 555.6 437.8 576 408 576L376 576C358.3 576 344 561.7 344 544L344 96C344 78.3 358.3 64 376 64L400 64C430.9 64 456 89.1 456 120z"/></svg>
|
||||
|
After Width: | Height: | Size: 920 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 658 KiB |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"notes": []
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
// Tento skript by měl být v HTML vložen PŘED hlavním script.js
|
||||
|
||||
// Globální překladová funkce, kterou bude používat i script.js
|
||||
let translations = {};
|
||||
window.t = (key, params = {}) => {
|
||||
let text = translations[key] || key;
|
||||
for (const p in params) {
|
||||
text = text.replace(`{${p}}`, params[p]);
|
||||
}
|
||||
return text;
|
||||
};
|
||||
|
||||
/**
|
||||
* Načte překlady pro daný jazyk a aplikuje je na DOM.
|
||||
* @param {string} lang - Kód jazyka (např. 'en', 'cs').
|
||||
*/
|
||||
window.setLanguage = async function(lang) {
|
||||
// 1. Uloží preferenci uživatele
|
||||
localStorage.setItem('doxa_lang', lang);
|
||||
|
||||
// Nastaví atribut 'lang' na <html> elementu
|
||||
document.documentElement.lang = lang;
|
||||
|
||||
// 2. Načte a uloží překlady
|
||||
try {
|
||||
const response = await fetch(`assets/locales/${lang}.json`);
|
||||
if (!response.ok) {
|
||||
console.error(`Chyba: Nepodařilo se načíst soubor s překlady: ${lang}.json`);
|
||||
translations = {};
|
||||
} else {
|
||||
translations = await response.json();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Chyba při načítání překladů pro jazyk ${lang}:`, error);
|
||||
translations = {};
|
||||
}
|
||||
|
||||
// 3. Přeloží všechny statické prvky v DOM
|
||||
document.querySelectorAll('[data-i18n-key]').forEach(el => {
|
||||
const key = el.getAttribute('data-i18n-key');
|
||||
const translation = window.t(key);
|
||||
|
||||
// Přeloží specifický atribut (např. placeholder, title), pokud je definován
|
||||
const attr = el.getAttribute('data-i18n-attr');
|
||||
if (attr) {
|
||||
el.setAttribute(attr, translation);
|
||||
} else {
|
||||
// Jinak přeloží obsah elementu
|
||||
el.innerHTML = translation;
|
||||
}
|
||||
});
|
||||
|
||||
// 4. DŮLEŽITÉ: Znovu inicializuje části aplikace, které používají dynamický text
|
||||
if (typeof window.updateDynamicUIText === 'function') {
|
||||
window.updateDynamicUIText();
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const userLang = localStorage.getItem('doxa_lang') || navigator.language.split('-')[0];
|
||||
const langToLoad = ['en', 'cs'].includes(userLang) ? userLang : 'cs';
|
||||
window.setLanguage(langToLoad);
|
||||
|
||||
const langToggleBtn = document.getElementById('langToggle');
|
||||
if (langToggleBtn) {
|
||||
langToggleBtn.addEventListener('click', () => {
|
||||
const currentLang = localStorage.getItem('doxa_lang') || 'cs';
|
||||
const nextLang = currentLang === 'cs' ? 'en' : 'cs';
|
||||
window.setLanguage(nextLang);
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,85 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const THEME_KEY = "doxa_theme";
|
||||
let systemMediaQuery = null;
|
||||
let systemMediaListener = null;
|
||||
|
||||
function applyTheme(theme) {
|
||||
try {
|
||||
if (systemMediaQuery && systemMediaListener) {
|
||||
try {
|
||||
if (systemMediaQuery.removeEventListener)
|
||||
systemMediaQuery.removeEventListener("change", systemMediaListener);
|
||||
else systemMediaQuery.removeListener(systemMediaListener);
|
||||
} catch (e) {}
|
||||
systemMediaQuery = null;
|
||||
systemMediaListener = null;
|
||||
}
|
||||
|
||||
if (theme === "dark") {
|
||||
document.body.classList.add("dark");
|
||||
} else if (theme === "light") {
|
||||
document.body.classList.remove("dark");
|
||||
} else {
|
||||
try {
|
||||
const mql = window.matchMedia("(prefers-color-scheme: dark)");
|
||||
if (mql.matches) document.body.classList.add("dark");
|
||||
else document.body.classList.remove("dark");
|
||||
systemMediaQuery = mql;
|
||||
systemMediaListener = function (e) {
|
||||
if (e.matches) document.body.classList.add("dark");
|
||||
else document.body.classList.remove("dark");
|
||||
updateThemeButton();
|
||||
};
|
||||
if (mql.addEventListener)
|
||||
mql.addEventListener("change", systemMediaListener);
|
||||
else mql.addListener(systemMediaListener);
|
||||
} catch (e) {
|
||||
document.body.classList.remove("dark");
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
updateThemeButton();
|
||||
}
|
||||
|
||||
function updateThemeButton() {
|
||||
const btn = document.getElementById("themeToggle");
|
||||
if (!btn) return;
|
||||
const theme = getStoredTheme() || "system";
|
||||
let icon = "🌓";
|
||||
if (theme === "dark") {
|
||||
icon = "🌙";
|
||||
} else if (theme === "light") {
|
||||
icon = "☀️";
|
||||
}
|
||||
btn.textContent = icon;
|
||||
}
|
||||
|
||||
function getStoredTheme() {
|
||||
try {
|
||||
return localStorage.getItem(THEME_KEY);
|
||||
} catch (e) { return null; }
|
||||
}
|
||||
function setStoredTheme(value) {
|
||||
try {
|
||||
localStorage.setItem(THEME_KEY, value);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
const stored = getStoredTheme() || "system";
|
||||
const order = ["light", "dark", "system"];
|
||||
let idx = order.indexOf(stored);
|
||||
if (idx === -1) idx = 2;
|
||||
const next = order[(idx + 1) % order.length];
|
||||
setStoredTheme(next);
|
||||
applyTheme(next);
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const themeBtn = document.getElementById("themeToggle");
|
||||
if (themeBtn) themeBtn.addEventListener("click", toggleTheme);
|
||||
applyTheme(getStoredTheme() || "system");
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"ogLocale": "cs_CZ",
|
||||
"nav.home": "Domů",
|
||||
"nav.wiki": "Wiki",
|
||||
"nav.privacy": "Ochrana soukromí",
|
||||
"nav.about": "O projektu",
|
||||
"nav.themeToggle": "Přepnout motiv",
|
||||
"footer.copyright": "Doxa Notes © 2026 | Local-First & Svoboda 🦅",
|
||||
"index.pageTitle": "DOXA Notes — Local-First poznámky a minimalistický Markdown editor",
|
||||
"index.pageDescription": "DOXA Notes je minimalistická, local‑first poznámková aplikace s podporou Markdownu a otevřeným formátem JSON. Absolutní soukromí pro vaše myšlenky.",
|
||||
"index.ogTitle": "DOXA Notes — Local-First poznámky a minimalistický Markdown editor",
|
||||
"index.ogDescription": "DOXA Notes je minimalistická, local‑first poznámková aplikace založená na otevřeném JSON formátu. Data zůstávají plně pod vaší kontrolou.",
|
||||
"index.twitterTitle": "DOXA Notes — Local-First poznámky a minimalistický Markdown editor",
|
||||
"index.twitterDescription": "DOXA Notes je minimalistická, local‑first poznámková aplikace založená na otevřeném JSON formátu.",
|
||||
"index.mainTitle": "DOXA Notes",
|
||||
"index.subtitle": "Local-First Notes & Sovereignty",
|
||||
"index.intro": "DOXA Notes: Markdown editor, nezávislé, bezpečné a minimalistické prostředí pro uchovávání lidských myšlenek, poznámek a životních reflexí. V souladu se základními principy osobní svobody a soběstačnosti aplikace vědomě odmítá cloudové databáze, servery třetích stran a centralizovaná API. Doxa věří, že lidská mysl nepotřebuje být sledována algoritmy, aby mohla růst.",
|
||||
"index.philosophy": "„Základní myšlenka zůstává nekompromisní: Radikální Local-First přístup, čistá data v JSON formátu a absolutní digitální soukromí bez korporátního cloudu a API.“",
|
||||
"index.appButton": "Vstoupit do DOXA Notes →",
|
||||
"about.pageTitle": "O projektu — DOXA Notes",
|
||||
"about.pageDescription": "Přečtěte si manifest a filozofické i technické cíle projektu DOXA Notes. Technická suverenita, local-first přístup a bezpečné ukládání myšlenek.",
|
||||
"about.ogTitle": "O projektu — DOXA Notes",
|
||||
"about.ogDescription": "Manifest a filozofické cíle projektu DOXA Notes. Technická suverenita, local-first přístup a bezpečné ukládání myšlenek.",
|
||||
"about.twitterTitle": "O projektu — DOXA Notes",
|
||||
"about.twitterDescription": "Manifest a filozofické cíle projektu DOXA Notes.",
|
||||
"about.mainTitle": "O projektu — Doxa",
|
||||
"about.architecture.title": "Architektura",
|
||||
"about.architecture.item1": "Frontend: čisté HTML/CSS/JS (bez frameworků).",
|
||||
"about.architecture.item2": "Datový formát: otevřený JSON — trvanlivý a přenosný.",
|
||||
"about.architecture.item3": "Local-first: data jsou lokální (localStorage nebo soubor).",
|
||||
"about.architecture.item4": "Desktop aplikace pro Linux je zabalena do instalátorů AppImage.",
|
||||
"about.recent.title": "Co bylo přidáno naposledy",
|
||||
"about.recent.item1": "Podpora více poznámek v jednom JSON (název + obsah).",
|
||||
"about.recent.item2": "Přidání, editace (inline + modal), mazání poznámek.",
|
||||
"about.recent.item3": "Přesouvání pořadí (šípky + drag & drop).",
|
||||
"about.recent.item4": "Import / Export JSON a fallback mezi localStorage a lokálním souborem (Electron).",
|
||||
"about.recent.item5": "Přidána Markdown podpora",
|
||||
"about.recent.item6": "Desktop aplikace pro Linux",
|
||||
"about.recent.item7": "Přidání tagů do poznámek",
|
||||
"about.plans.title": "Další plány",
|
||||
"about.plans.item1": "Rozšíření UI (hledání, historie/undo).",
|
||||
"about.repo.text": "Projekt najdeš v repozitáři <a id=\"links\" href=\"https://codeberg.org/kankys/doxa\" target=\"_blank\">Codeberg</a>. Pokud chceš přispět,\n otevři issue nebo PR.",
|
||||
"about.author.text": "Web autora, další projekty a podpora: <a id=\"links\" href=\"https://lukaskanka.cz/\" target=\"_blank\">Lukáš Kaňka</a>",
|
||||
"about.license.text": "Aplikace je open-source a licencována pod MIT licencí.",
|
||||
"privacy.pageTitle": "Ochrana soukromí — DOXA Notes",
|
||||
"privacy.pageDescription": "Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes. Žádná data neodcházejí na servery třetích stran, vše zůstává u vás.",
|
||||
"privacy.ogTitle": "Ochrana soukromí — DOXA Notes",
|
||||
"privacy.ogDescription": "Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes. Žádná data neodcházejí na servery třetích stran.",
|
||||
"privacy.twitterTitle": "Ochrana soukromí — DOXA Notes",
|
||||
"privacy.twitterDescription": "Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes.",
|
||||
"privacy.mainTitle": "Ochrana soukromí",
|
||||
"privacy.intro": "Doxa je navržena jako <strong>local‑first</strong> aplikace\n — soukromí je primární designový princip. Níže shrnutí, jak\n zacházím s daty v aktuálním stavu projektu.",
|
||||
"privacy.stores.title": "Co aplikace ukládá",
|
||||
"privacy.stores.item1": "Poznámky: <code>id</code>, <code>name</code>,\n <code>content</code>, <code>created_at</code>,\n <code>modified_at</code> (pokud existuje).",
|
||||
"privacy.stores.item2": "Žádné automatické telemetry ani sledování není\n implementováno.",
|
||||
"privacy.where.title": "Kde jsou data uložena",
|
||||
"privacy.where.item1": "V prohlížeči: <strong>localStorage</strong> (klíč\n <code>doxa_notes_v1</code>).",
|
||||
"privacy.where.item2": "V Electron/Node režimu: soubor na disku (např.\n <code>assets/js/data/doxa.json</code>).",
|
||||
"privacy.where.item3": "Export/import: uživatel může stáhnout JSON a nahrát ho na\n jiném zařízení — je to manuální proces.",
|
||||
"privacy.notSent.title": "Co aplikace NEODESÍLÁ",
|
||||
"privacy.notSent.item1": "Výchozí instalace neposílá poznámky na žádný vzdálený\n server.",
|
||||
"privacy.notSent.item2": "Bez implementace serverové synchronizace nejsou data\n odesílána ani zálohována vůči třetím stranám.",
|
||||
"privacy.responsibility.title": "Odpovědnost uživatele",
|
||||
"privacy.responsibility.body": "Protože data jsou lokální, odpovědnost za zálohy a bezpečnou\n konfiguraci serveru (pokud použita) nese vlastník instalace.\n Doporučuji pravidelné exporty a bezpečné úložiště záloh.",
|
||||
"manifest.title": "Manifest digitální suverenity a minimalistického myšlení",
|
||||
"manifest.projectIntent.title": "Záměr projektu:",
|
||||
"manifest.projectIntent.body": "Vytvořit absolutně nezávislé, bezpečné a minimalistické prostředí pro uchovávání lidských myšlenek, poznámek a životních reflexí. V souladu se základními principy osobní svobody a soběstačnosti aplikace vědomě odmítá cloudové databáze, servery třetích stran a centralizovaná API. Doxa věří, že lidská mysl nepotřebuje být sledována algoritmy, aby mohla růst.",
|
||||
"manifest.localFirst.title": "1. Radikální Local-First Filozofie",
|
||||
"manifest.localFirst.subtitle": "Aplikace funguje na principu absolutní decentralizace. Běží na tvém zařízení a tam také umírá i žije.",
|
||||
"manifest.localFirst.noBackend": "Žádný backend, žádné API: Doxa vědomě neobsahuje žádný kód pro odesílání dat na vzdálené servery. Tím je eliminováno riziko úniku dat, výpadku serveru nebo změny obchodních podmínek poskytovatele.",
|
||||
"manifest.localFirst.privacy": "Absolutní soukromí: Data jsou uložena výhradně v tvém prohlížeči (localStorage) nebo lokálním souboru. Co napíšeš, to zůstává tvým výhradním vlastnictvím.",
|
||||
"manifest.jsonFormat.title": "2. Formát JSON: Trvanlivost napříč dekádami",
|
||||
"manifest.jsonFormat.subtitle": "Data jsou strukturována do otevřeného, čistého a lidsky čitelného formátu JSON. Žádné proprietární databáze.",
|
||||
"manifest.jsonFormat.ownership": "Tvá data ti patří. Díky možnosti manuálního exportu si můžeš svůj myšlenkový fond odnést kamkoli – uložit si ho na svůj bezpečný lokální disk, nahrát na vlastní Git (GitHub/Gitea), nebo jej synchronizovat skrze cloudovou službu, kterou ty sám uznáš za bezpečnou.",
|
||||
"manifest.jsonFormat.longevity": "Čistota formátu zaručuje, že tvé poznámky budou čitelné i za dvacet let na jakémkoli zařízení, bez ohledu na to, zda Doxa bude stále existovat.",
|
||||
"manifest.vanillaStack.title": "3. Technická čistota a minimalismus (Vanilla Stack)",
|
||||
"manifest.vanillaStack.subtitle": "Pro zachování maximální rychlosti, nezávislosti a nulových externích závislostí je aplikace postavena výhradně na čistých webových standardech:",
|
||||
"manifest.vanillaStack.frontend": "Frontend (HTML5/CSS3): Minimalistické rozhraní, které nezatěžuje mysl barevným chaosem a vizuálním balastem moderního internetu.",
|
||||
"manifest.vanillaStack.logic": "Logika (Vanilla JavaScript ES6+): Žádné těžkopádné frameworky (React/Vue), které podléhají módním trendům a neustálým změnám.",
|
||||
"manifest.quote": "„Nezáleží na tom, jak složité jsou okolnosti kolem tebe. Když stavíš vlastní chrám myšlenek, začínáš od prvního kamene. Tento kód a tvá data jsou tvým vlastním, nedobytným hradem.“",
|
||||
"manifest.quote.author": "— Stoický odkaz pro svobodné myslitele"
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"ogLocale": "en_US",
|
||||
"nav.home": "Home",
|
||||
"nav.wiki": "Wiki",
|
||||
"nav.privacy": "Privacy",
|
||||
"nav.about": "About",
|
||||
"nav.themeToggle": "Toggle theme",
|
||||
"footer.copyright": "Doxa Notes © 2026 | Local-First & Freedom 🦅",
|
||||
"index.pageTitle": "DOXA Notes — Local-First Notes & Minimalist Markdown Editor",
|
||||
"index.pageDescription": "DOXA Notes is a minimalist, local-first note-taking app with Markdown support and an open JSON format. Absolute privacy for your thoughts.",
|
||||
"index.ogTitle": "DOXA Notes — Local-First Notes & Minimalist Markdown Editor",
|
||||
"index.ogDescription": "DOXA Notes is a minimalist, local-first note-taking app based on an open JSON format. Your data remains fully under your control.",
|
||||
"index.twitterTitle": "DOXA Notes — Local-First Notes & Minimalist Markdown Editor",
|
||||
"index.twitterDescription": "DOXA Notes is a minimalist, local-first note-taking app based on an open JSON format.",
|
||||
"index.mainTitle": "DOXA Notes",
|
||||
"index.subtitle": "Local-First Notes & Sovereignty",
|
||||
"index.intro": "DOXA Notes: A Markdown editor, an independent, secure, and minimalist environment for storing human thoughts, notes, and life reflections. In line with the fundamental principles of personal freedom and self-sufficiency, the application consciously rejects cloud databases, third-party servers, and centralized APIs. Doxa believes that the human mind does not need to be monitored by algorithms to grow.",
|
||||
"index.philosophy": "\"The core idea remains uncompromising: A radical Local-First approach, clean data in JSON format, and absolute digital privacy without corporate clouds and APIs.\"",
|
||||
"index.appButton": "Enter DOXA Notes →",
|
||||
"about.pageTitle": "About — DOXA Notes",
|
||||
"about.pageDescription": "Read the manifesto and the philosophical and technical goals of the DOXA Notes project. Technical sovereignty, local-first approach, and secure storage of thoughts.",
|
||||
"about.ogTitle": "About — DOXA Notes",
|
||||
"about.ogDescription": "The manifesto and philosophical goals of the DOXA Notes project. Technical sovereignty, local-first approach, and secure storage of thoughts.",
|
||||
"about.twitterTitle": "About — DOXA Notes",
|
||||
"about.twitterDescription": "The manifesto and philosophical goals of the DOXA Notes project.",
|
||||
"about.mainTitle": "About — Doxa",
|
||||
"about.architecture.title": "Architecture",
|
||||
"about.architecture.item1": "Frontend: pure HTML/CSS/JS (no frameworks).",
|
||||
"about.architecture.item2": "Data format: open JSON — durable and portable.",
|
||||
"about.architecture.item3": "Local-first: data is local (localStorage or file).",
|
||||
"about.architecture.item4": "The desktop application for Linux is packaged in AppImage installers.",
|
||||
"about.recent.title": "What was added recently",
|
||||
"about.recent.item1": "Support for multiple notes in one JSON (title + content).",
|
||||
"about.recent.item2": "Adding, editing (inline + modal), and deleting notes.",
|
||||
"about.recent.item3": "Reordering (arrows + drag & drop).",
|
||||
"about.recent.item4": "Import / Export JSON and fallback between localStorage and local file (Electron).",
|
||||
"about.recent.item5": "Markdown support added",
|
||||
"about.recent.item6": "Desktop application for Linux",
|
||||
"about.recent.item7": "Added tags to notes",
|
||||
"about.plans.title": "Future plans",
|
||||
"about.plans.item1": "UI enhancements (search, history/undo).",
|
||||
"about.repo.text": "You can find the project in the <a id=\"links\" href=\"https://codeberg.org/kankys/doxa\" target=\"_blank\">Codeberg</a> repository. If you want to contribute,\n open an issue or PR.",
|
||||
"about.author.text": "Author's website, other projects, and support: <a id=\"links\" href=\"https://lukaskanka.cz/\" target=\"_blank\">Lukáš Kaňka</a>",
|
||||
"about.license.text": "The application is open-source and licensed under the MIT license.",
|
||||
"privacy.pageTitle": "Privacy Policy — DOXA Notes",
|
||||
"privacy.pageDescription": "Privacy policy for the DOXA Notes application. No data is sent to third-party servers; everything stays with you.",
|
||||
"privacy.ogTitle": "Privacy Policy — DOXA Notes",
|
||||
"privacy.ogDescription": "Privacy policy for the DOXA Notes application. No data is sent to third-party servers.",
|
||||
"privacy.twitterTitle": "Privacy Policy — DOXA Notes",
|
||||
"privacy.twitterDescription": "Privacy policy for the DOXA Notes application.",
|
||||
"privacy.mainTitle": "Privacy Policy",
|
||||
"privacy.intro": "Doxa is designed as a <strong>local-first</strong> application\n — privacy is a primary design principle. Below is a summary of how\n I handle data in the current state of the project.",
|
||||
"privacy.stores.title": "What the application stores",
|
||||
"privacy.stores.item1": "Notes: <code>id</code>, <code>name</code>,\n <code>content</code>, <code>created_at</code>,\n <code>modified_at</code> (if it exists).",
|
||||
"privacy.stores.item2": "No automatic telemetry or tracking is\n implemented.",
|
||||
"privacy.where.title": "Where the data is stored",
|
||||
"privacy.where.item1": "In the browser: <strong>localStorage</strong> (key\n <code>doxa_notes_v1</code>).",
|
||||
"privacy.where.item2": "In Electron/Node mode: a file on the disk (e.g.,\n <code>assets/js/data/doxa.json</code>).",
|
||||
"privacy.where.item3": "Export/import: the user can download a JSON file and upload it on\n another device — this is a manual process.",
|
||||
"privacy.notSent.title": "What the application DOES NOT SEND",
|
||||
"privacy.notSent.item1": "The default installation does not send notes to any remote\n server.",
|
||||
"privacy.notSent.item2": "Without server-side synchronization, data is not\n sent to or backed up by third parties.",
|
||||
"privacy.responsibility.title": "User's responsibility",
|
||||
"privacy.responsibility.body": "Because the data is local, the responsibility for backups and secure\n server configuration (if used) lies with the owner of the installation.\n I recommend regular exports and secure storage of backups.",
|
||||
"manifest.title": "Manifesto of Digital Sovereignty and Minimalist Thinking",
|
||||
"manifest.projectIntent.title": "Project Intent:",
|
||||
"manifest.projectIntent.body": "To create a completely independent, secure, and minimalist environment for storing human thoughts, notes, and life reflections. In line with the fundamental principles of personal freedom and self-sufficiency, the application consciously rejects cloud databases, third-party servers, and centralized APIs. DOXA believes that the human mind does not need to be monitored by algorithms to grow.",
|
||||
"manifest.localFirst.title": "1. Radical Local-First Philosophy",
|
||||
"manifest.localFirst.subtitle": "The application operates on the principle of absolute decentralization. It lives and dies on your device.",
|
||||
"manifest.localFirst.noBackend": "No backend, no API: DOXA intentionally contains no code for sending data to remote servers. This eliminates the risk of data leaks, server outages, or changes in the provider's terms of service.",
|
||||
"manifest.localFirst.privacy": "Absolute Privacy: Data is stored exclusively in your browser (localStorage) or a local file. What you write remains your exclusive property.",
|
||||
"manifest.jsonFormat.title": "2. JSON Format: Durability Across Decades",
|
||||
"manifest.jsonFormat.subtitle": "Data is structured in an open, clean, and human-readable JSON format. No proprietary databases.",
|
||||
"manifest.jsonFormat.ownership": "Your data belongs to you. Thanks to the manual export option, you can take your repository of thoughts anywhere – save it to your secure local drive, upload it to your own Git (GitHub/Gitea), or synchronize it through a cloud service that you yourself deem secure.",
|
||||
"manifest.jsonFormat.longevity": "The purity of the format ensures that your notes will be readable even in twenty years on any device, regardless of whether DOXA still exists.",
|
||||
"manifest.vanillaStack.title": "3. Technical Purity and Minimalism (Vanilla Stack)",
|
||||
"manifest.vanillaStack.subtitle": "To maintain maximum speed, independence, and zero external dependencies, the application is built exclusively on clean web standards:",
|
||||
"manifest.vanillaStack.frontend": "Frontend (HTML5/CSS3): A minimalist interface that does not burden the mind with the colorful chaos and visual clutter of the modern internet.",
|
||||
"manifest.vanillaStack.logic": "Logic (Vanilla JavaScript ES6+): No cumbersome frameworks (React/Vue) that are subject to fashion trends and constant changes.",
|
||||
"manifest.quote": "\"It does not matter how complex the circumstances around you are. When you build your own temple of thoughts, you start with the first stone. This code and your data are your own, impregnable castle.\"",
|
||||
"manifest.quote.author": "— A Stoic message for free thinkers"
|
||||
}
|
||||
@@ -0,0 +1,500 @@
|
||||
/* --- STOICKÝ DESIGN PRO DOXA NOTES --- */
|
||||
|
||||
:root {
|
||||
/* Světlý motiv - Inspirovaný antickým mramorem a pergamenem */
|
||||
--bg: #f5f4f0;
|
||||
--text: #2c2e30;
|
||||
--muted: #73797e;
|
||||
|
||||
--button-bg: #e5e2da;
|
||||
--button-text: #2c2e30;
|
||||
|
||||
--note-bg: #ffffff;
|
||||
--note-border: #dcd8cd;
|
||||
--note-hover: #edeae2;
|
||||
|
||||
--accent: #b3893e; /* Tlumená bronzová */
|
||||
--accent-hover: #967131;
|
||||
|
||||
--modal-bg: #ffffff;
|
||||
--modal-overlay: rgba(44, 46, 48, 0.4);
|
||||
|
||||
--active-bg: #fdfbf7;
|
||||
--active-border: #b3893e;
|
||||
}
|
||||
|
||||
/* Tmavý motiv - Hluboká noc a bronz (Výchozí pro landing page) */
|
||||
body.dark {
|
||||
--bg: #1a1c1e;
|
||||
--text: #e2e4e9;
|
||||
--muted: #9ba1a6;
|
||||
|
||||
--button-bg: #2d3135;
|
||||
--button-text: #e2e4e9;
|
||||
|
||||
--note-bg: #222529;
|
||||
--note-border: #2e3238;
|
||||
--note-hover: #2b2e33;
|
||||
|
||||
--accent: #c5a059; /* Jasnější stoická bronzová */
|
||||
--accent-hover: #dfba73;
|
||||
|
||||
--modal-bg: #222529;
|
||||
--modal-overlay: rgba(0, 0, 0, 0.6);
|
||||
|
||||
--active-bg: rgba(197, 160, 89, 0.05);
|
||||
--active-border: #c5a059;
|
||||
}
|
||||
|
||||
/* Základní nastavení */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, monospace, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
padding: 40px 20px;
|
||||
line-height: 1.6;
|
||||
transition: background 250ms ease, color 250ms ease;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* Navigace */
|
||||
.top-nav {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 30px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
border-bottom: 1px solid var(--note-border);
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.top-nav a,
|
||||
.top-nav .theme-toggle {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
text-decoration: none;
|
||||
padding: 8px 16px;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
border: 1px solid transparent;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, border-color 0.2s;
|
||||
}
|
||||
|
||||
.top-nav a:hover,
|
||||
.top-nav .theme-toggle:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.top-nav a.active {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Nadpisy */
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
margin-bottom: 20px;
|
||||
letter-spacing: 0.5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
h1::after {
|
||||
content: " 🦅";
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
/* Formulářové prvky */
|
||||
#noteTitle {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
#noteTitle:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
padding: 14px;
|
||||
margin-bottom: 12px;
|
||||
font-family: monospace;
|
||||
font-size: 14px;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
resize: vertical;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
textarea:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Tlačítka */
|
||||
button {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
border: 1px solid var(--note-border);
|
||||
padding: 10px 18px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-weight: 500;
|
||||
transition: background 0.2s, border-color 0.2s;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Editor toolbar */
|
||||
.editor-toolbar {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin-bottom: 12px;
|
||||
flex-wrap: wrap;
|
||||
background: var(--note-bg);
|
||||
padding: 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
.editor-toolbar button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: var(--text);
|
||||
padding: 6px 10px;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.editor-toolbar button:hover {
|
||||
background: var(--note-hover);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.editor-toolbar button.active {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Layout editoru a náhledu */
|
||||
.editor-wrap {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.editor-wrap textarea {
|
||||
flex: 1 1 55%;
|
||||
min-height: 250px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
flex: 1 1 45%;
|
||||
border: 1px solid var(--note-border);
|
||||
background: var(--note-bg);
|
||||
padding: 16px;
|
||||
border-radius: 4px;
|
||||
/*overflow-auto;*/
|
||||
min-height: 250px;
|
||||
max-height: 400px;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Akce pod editorem */
|
||||
.editor-actions {
|
||||
margin: 15px 0;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#newNoteButton {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
#newNoteButton:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
.save-status {
|
||||
margin-left: auto;
|
||||
font-size: 13px;
|
||||
color: var(--accent);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Seznam poznámek */
|
||||
#notesContainer {
|
||||
margin-top: 25px;
|
||||
border-top: 1px solid var(--note-border);
|
||||
padding-top: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.note-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12px 16px;
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 6px;
|
||||
background: var(--note-bg);
|
||||
transition: transform 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.note-item:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: rgba(197, 160, 89, 0.4);
|
||||
}
|
||||
|
||||
.note-item.active {
|
||||
background: var(--active-bg);
|
||||
border-color: var(--active-border);
|
||||
box-shadow: 0 0 10px rgba(197, 160, 89, 0.05);
|
||||
}
|
||||
|
||||
.note-left {
|
||||
flex: 1 1 auto;
|
||||
padding-right: 15px;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.note-title {
|
||||
font-weight: 600;
|
||||
font-size: 1.05rem;
|
||||
margin-bottom: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-preview {
|
||||
font-size: 13px;
|
||||
color: var(--muted);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-controls {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.note-controls button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 6px 10px;
|
||||
color: var(--text);
|
||||
opacity: 0.6;
|
||||
transition: opacity 0.2s, color 0.2s;
|
||||
}
|
||||
|
||||
.note-controls button:hover {
|
||||
background: var(--button-bg);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.note-controls button.delete:hover {
|
||||
color: #ff6b6b;
|
||||
}
|
||||
|
||||
.no-notes {
|
||||
color: var(--muted);
|
||||
font-style: italic;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notes-hint {
|
||||
margin-top: 10px;
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Drag & Drop styly */
|
||||
.note-item.drag-over {
|
||||
border-style: dashed;
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.note-item.drag-after {
|
||||
box-shadow: inset 0 -3px 0 0 var(--accent);
|
||||
}
|
||||
|
||||
.note-item.dragging {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
/* Modální okno */
|
||||
.modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: var(--modal-overlay);
|
||||
backdrop-filter: blur(2px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal {
|
||||
background: var(--modal-bg);
|
||||
padding: 24px;
|
||||
border-radius: 8px;
|
||||
width: 95%;
|
||||
max-width: 800px;
|
||||
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
|
||||
position: relative;
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
.modal h2 {
|
||||
margin-bottom: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.modal .modal-close {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
top: 16px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
font-size: 18px;
|
||||
color: var(--muted);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.modal .modal-close:hover {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.modal-actions {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: flex-end;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#modalSaveBtn {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#modalSaveBtn:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
/* Styly pro renderovaný Markdown */
|
||||
.preview h1, .preview h2, .preview h3 {
|
||||
margin: 14px 0 8px 0;
|
||||
color: var(--text);
|
||||
}
|
||||
.preview p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.preview pre {
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
padding: 12px;
|
||||
border-radius: 4px;
|
||||
overflow: auto;
|
||||
border: 1px solid var(--note-border);
|
||||
margin: 10px 0;
|
||||
}
|
||||
body:not(.dark) .preview pre {
|
||||
background: #f0ede6;
|
||||
}
|
||||
.preview code {
|
||||
font-family: monospace;
|
||||
background: rgba(197, 160, 89, 0.15);
|
||||
padding: 2px 5px;
|
||||
border-radius: 3px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.preview ul, .preview ol {
|
||||
margin-left: 20px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.preview blockquote {
|
||||
border-left: 3px solid var(--accent);
|
||||
padding-left: 12px;
|
||||
font-style: italic;
|
||||
color: var(--muted);
|
||||
margin: 12px 0;
|
||||
}
|
||||
.preview table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 15px 0;
|
||||
}
|
||||
.preview th, .preview td {
|
||||
border: 1px solid var(--note-border);
|
||||
padding: 8px 12px;
|
||||
text-align: left;
|
||||
}
|
||||
.preview th {
|
||||
background: var(--button-bg);
|
||||
}
|
||||
|
||||
/* Responzivita */
|
||||
@media (max-width: 800px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
.editor-wrap {
|
||||
flex-direction: column;
|
||||
}
|
||||
.preview {
|
||||
width: 100%;
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,387 @@
|
||||
/* Theme variables */
|
||||
:root {
|
||||
--bg: #fafafa;
|
||||
--text: #333333;
|
||||
--muted: #666666;
|
||||
|
||||
--button-bg: #333333;
|
||||
--button-text: #ffffff;
|
||||
|
||||
--note-bg: #ffffff;
|
||||
--note-border: #dddddd;
|
||||
--note-hover: #f5f5f5;
|
||||
|
||||
--accent: #0b63d6;
|
||||
|
||||
--modal-bg: #ffffff;
|
||||
--modal-overlay: rgba(0, 0, 0, 0.45);
|
||||
|
||||
--active-bg: #e6f0ff;
|
||||
--active-border: #a6c8ff;
|
||||
}
|
||||
|
||||
/* Dark theme overrides */
|
||||
body.dark {
|
||||
--bg: #0b1220;
|
||||
--text: #e6eef8;
|
||||
--muted: #9aa6b2;
|
||||
|
||||
--button-bg: #1f2937;
|
||||
--button-text: #ffffff;
|
||||
|
||||
--note-bg: #071022;
|
||||
--note-border: #263046;
|
||||
--note-hover: #092033;
|
||||
|
||||
--accent: #3b82f6;
|
||||
|
||||
--modal-bg: #0b1220;
|
||||
--modal-overlay: rgba(0, 0, 0, 0.6);
|
||||
|
||||
--active-bg: rgba(59, 130, 246, 0.14);
|
||||
--active-border: #60a5fa;
|
||||
}
|
||||
|
||||
/* Base */
|
||||
body {
|
||||
font-family: monospace;
|
||||
background: var(--bg);
|
||||
padding: 40px;
|
||||
color: var(--text);
|
||||
transition:
|
||||
background 200ms ease,
|
||||
color 200ms ease;
|
||||
}
|
||||
|
||||
.top-nav {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
margin-bottom: 12px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.top-nav a,
|
||||
.top-nav .theme-toggle {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
text-decoration: none;
|
||||
padding: 8px 12px;
|
||||
border-radius: 4px;
|
||||
font-family: monospace;
|
||||
font-size: 14px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.top-nav a:hover,
|
||||
.top-nav .theme-toggle:hover {
|
||||
background: #555;
|
||||
}
|
||||
|
||||
.top-nav a.active {
|
||||
background: var(--accent);
|
||||
}
|
||||
|
||||
h1::after {
|
||||
content: " 🦅";
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#noteTitle {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
margin-bottom: 8px;
|
||||
font-family: monospace;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
font-family: monospace;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
button {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
border: none;
|
||||
padding: 10px 20px;
|
||||
cursor: pointer;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: #555;
|
||||
}
|
||||
|
||||
#notesContainer {
|
||||
margin-top: 10px;
|
||||
border-top: 1px solid var(--note-border);
|
||||
padding-top: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.note-item {
|
||||
padding: 8px;
|
||||
border: 1px solid var(--note-border);
|
||||
cursor: pointer;
|
||||
background: var(--note-bg);
|
||||
}
|
||||
|
||||
.note-item:hover {
|
||||
background: var(--note-hover);
|
||||
}
|
||||
|
||||
.note-item.active {
|
||||
background: var(--active-bg);
|
||||
border-color: var(--active-border);
|
||||
}
|
||||
|
||||
.no-notes {
|
||||
color: var(--muted);
|
||||
font-style: italic;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
/* Note list layout */
|
||||
.note-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.note-left {
|
||||
flex: 1 1 auto;
|
||||
padding-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.note-title {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-preview {
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-controls {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.note-controls button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 6px 8px;
|
||||
cursor: pointer;
|
||||
font-family: monospace;
|
||||
border-radius: 4px;
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.note-controls button:hover {
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
}
|
||||
|
||||
.note-item.drag-over {
|
||||
border-style: dashed;
|
||||
}
|
||||
|
||||
.note-item.drag-after {
|
||||
box-shadow: inset 0 -3px 0 0 rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
|
||||
.note-item.dragging {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Modal */
|
||||
.modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: var(--modal-overlay);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal-overlay.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.modal {
|
||||
background: var(--modal-bg);
|
||||
padding: 16px;
|
||||
border-radius: 8px;
|
||||
width: 92%;
|
||||
max-width: 720px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.modal .modal-close {
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
top: 8px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.modal input,
|
||||
.modal textarea {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
margin-bottom: 8px;
|
||||
font-family: monospace;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
.modal-actions {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
@media (min-width: 800px) {
|
||||
.container {
|
||||
max-width: 900px;
|
||||
}
|
||||
}
|
||||
|
||||
.notes-hint {
|
||||
margin-top: 8px;
|
||||
color: var(--muted);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* Editor toolbar & preview */
|
||||
.editor-toolbar {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin-bottom: 8px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.editor-toolbar button {
|
||||
background: transparent;
|
||||
border: 1px solid var(--note-border);
|
||||
color: var(--text);
|
||||
padding: 6px 8px;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.editor-toolbar button:hover {
|
||||
background: var(--note-hover);
|
||||
}
|
||||
|
||||
/* active toolbar button */
|
||||
.editor-toolbar button.active {
|
||||
background: var(--accent);
|
||||
color: var(--button-text);
|
||||
}
|
||||
|
||||
.editor-wrap {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.editor-wrap textarea {
|
||||
flex: 1 1 60%;
|
||||
min-height: 160px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
flex: 1 1 40%;
|
||||
border: 1px solid var(--note-border);
|
||||
background: var(--note-bg);
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
overflow: auto;
|
||||
max-height: 320px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.editor-actions {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.save-status {
|
||||
margin-left: 8px;
|
||||
font-size: 13px;
|
||||
color: var(--muted);
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
/* Rendered markdown styles */
|
||||
.preview h1,
|
||||
.preview h2,
|
||||
.preview h3 {
|
||||
margin: 6px 0;
|
||||
}
|
||||
.preview pre {
|
||||
background: rgba(0, 0, 0, 0.04);
|
||||
padding: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
.preview code {
|
||||
background: rgba(0, 0, 0, 0.06);
|
||||
padding: 2px 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
.editor-wrap {
|
||||
flex-direction: column;
|
||||
}
|
||||
.preview {
|
||||
max-height: 240px;
|
||||
}
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 16px;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,604 @@
|
||||
/* --- STOICKÝ DESIGN PRO DOXA NOTES --- */
|
||||
|
||||
:root {
|
||||
/* Světlý motiv - Inspirovaný antickým mramorem a pergamenem */
|
||||
--bg: #f5f4f0;
|
||||
--text: #2c2e30;
|
||||
--muted: #73797e;
|
||||
|
||||
--button-bg: #e5e2da;
|
||||
--button-text: #2c2e30;
|
||||
|
||||
--note-bg: #ffffff;
|
||||
--note-border: #dcd8cd;
|
||||
--note-hover: #edeae2;
|
||||
|
||||
--accent: #b3893e; /* Tlumená bronzová */
|
||||
--accent-hover: #967131;
|
||||
|
||||
--modal-bg: #ffffff;
|
||||
--modal-overlay: rgba(44, 46, 48, 0.4);
|
||||
|
||||
--active-bg: #fdfbf7;
|
||||
--active-border: #b3893e;
|
||||
|
||||
/* --card-bg: #222529;*/
|
||||
|
||||
}
|
||||
|
||||
/* Tmavý motiv - Hluboká noc a bronz (Výchozí pro landing page) */
|
||||
body.dark {
|
||||
--bg: #1a1c1e;
|
||||
--text: #e2e4e9;
|
||||
--muted: #9ba1a6;
|
||||
|
||||
--button-bg: #2d3135;
|
||||
--button-text: #e2e4e9;
|
||||
|
||||
--note-bg: #222529;
|
||||
--note-border: #2e3238;
|
||||
--note-hover: #2b2e33;
|
||||
|
||||
--accent: #c5a059; /* Jasnější stoická bronzová */
|
||||
--accent-hover: #dfba73;
|
||||
|
||||
--modal-bg: #222529;
|
||||
--modal-overlay: rgba(0, 0, 0, 0.6);
|
||||
|
||||
--active-bg: rgba(197, 160, 89, 0.05);
|
||||
--active-border: #c5a059;
|
||||
}
|
||||
|
||||
/* Základní nastavení */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, monospace, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
padding: 40px 20px;
|
||||
line-height: 1.6;
|
||||
transition: background 250ms ease, color 250ms ease;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
background-color: var(--card-bg);
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
||||
text-align: center;
|
||||
border: 1px solid rgba(197, 160, 89, 0.1);
|
||||
}
|
||||
|
||||
/* Navigace */
|
||||
.top-nav {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 30px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
border-bottom: 1px solid var(--note-border);
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.top-nav a,
|
||||
.top-nav .theme-toggle {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
text-decoration: none;
|
||||
padding: 8px 16px;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
border: 1px solid transparent;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, border-color 0.2s;
|
||||
}
|
||||
|
||||
.top-nav a:hover,
|
||||
.top-nav .theme-toggle:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.top-nav a.active {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* Nadpisy */
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
/*margin-bottom: 20px;*/
|
||||
letter-spacing: 0.5px;
|
||||
/*display: flex;*/
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1::after {
|
||||
content: " 🦅";
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
/* Formulářové prvky */
|
||||
#noteTitle {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
#noteTitle:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
#noteTags {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
#noteTags:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
padding: 14px;
|
||||
margin-bottom: 12px;
|
||||
font-family: monospace;
|
||||
font-size: 14px;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
resize: vertical;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
textarea:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Tlačítka */
|
||||
button {
|
||||
background: var(--button-bg);
|
||||
color: var(--button-text);
|
||||
border: 1px solid var(--note-border);
|
||||
padding: 10px 18px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-weight: 500;
|
||||
transition: background 0.2s, border-color 0.2s;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Editor toolbar */
|
||||
.editor-toolbar {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin-bottom: 12px;
|
||||
flex-wrap: wrap;
|
||||
background: var(--note-bg);
|
||||
padding: 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
.editor-toolbar button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: var(--text);
|
||||
padding: 6px 10px;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.editor-toolbar button:hover {
|
||||
background: var(--note-hover);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.editor-toolbar button.active {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Layout editoru a náhledu */
|
||||
.editor-wrap {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.editor-wrap textarea {
|
||||
flex: 1 1 55%;
|
||||
min-height: 250px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
flex: 1 1 45%;
|
||||
border: 1px solid var(--note-border);
|
||||
background: var(--note-bg);
|
||||
padding: 16px;
|
||||
border-radius: 4px;
|
||||
overflow: auto;
|
||||
min-height: 250px;
|
||||
max-height: 400px;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Akce pod editorem */
|
||||
.editor-actions {
|
||||
margin: 15px 0;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#newNoteButton {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
#newNoteButton:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
.save-status {
|
||||
margin-left: auto;
|
||||
font-size: 13px;
|
||||
color: var(--accent);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
#searchTagInput {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
background: var(--note-bg);
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
#searchTagInput:focus {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Seznam poznámek */
|
||||
#notesContainer {
|
||||
margin-top: 25px;
|
||||
border-top: 1px solid var(--note-border);
|
||||
padding-top: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.note-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12px 16px;
|
||||
border: 1px solid var(--note-border);
|
||||
border-radius: 6px;
|
||||
background: var(--note-bg);
|
||||
transition: transform 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.note-item:hover {
|
||||
background: var(--note-hover);
|
||||
border-color: rgba(197, 160, 89, 0.4);
|
||||
}
|
||||
|
||||
.note-item.active {
|
||||
background: var(--active-bg);
|
||||
border-color: var(--active-border);
|
||||
box-shadow: 0 0 10px rgba(197, 160, 89, 0.05);
|
||||
}
|
||||
|
||||
.note-left {
|
||||
flex: 1 1 auto;
|
||||
padding-right: 15px;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.note-title {
|
||||
font-weight: 600;
|
||||
font-size: 1.05rem;
|
||||
margin-bottom: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-preview {
|
||||
font-size: 13px;
|
||||
color: var(--muted);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.note-controls {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.note-controls button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 6px 10px;
|
||||
color: var(--text);
|
||||
opacity: 0.6;
|
||||
transition: opacity 0.2s, color 0.2s;
|
||||
}
|
||||
|
||||
.note-controls button:hover {
|
||||
background: var(--button-bg);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.note-controls button.delete:hover {
|
||||
color: #ff6b6b;
|
||||
}
|
||||
|
||||
.no-notes {
|
||||
color: var(--muted);
|
||||
font-style: italic;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notes-hint {
|
||||
margin-top: 10px;
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Drag & Drop styly */
|
||||
.note-item.drag-over {
|
||||
border-style: dashed;
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.note-item.drag-after {
|
||||
box-shadow: inset 0 -3px 0 0 var(--accent);
|
||||
}
|
||||
|
||||
.note-item.dragging {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
/* Modální okno */
|
||||
.modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: var(--modal-overlay);
|
||||
backdrop-filter: blur(2px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal {
|
||||
background: var(--modal-bg);
|
||||
padding: 24px;
|
||||
border-radius: 8px;
|
||||
width: 95%;
|
||||
max-width: 800px;
|
||||
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
|
||||
position: relative;
|
||||
border: 1px solid var(--note-border);
|
||||
}
|
||||
|
||||
.modal h2 {
|
||||
margin-bottom: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.modal .modal-close {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
top: 16px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
font-size: 18px;
|
||||
color: var(--muted);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.modal .modal-close:hover {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.modal-actions {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: flex-end;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#modalSaveBtn {
|
||||
background: var(--accent);
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#modalSaveBtn:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
/* Styly pro renderovaný Markdown */
|
||||
.preview h1, .preview h2, .preview h3 {
|
||||
margin: 14px 0 8px 0;
|
||||
color: var(--text);
|
||||
}
|
||||
.preview p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.preview pre {
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
padding: 12px;
|
||||
border-radius: 4px;
|
||||
overflow: auto;
|
||||
border: 1px solid var(--note-border);
|
||||
margin: 10px 0;
|
||||
}
|
||||
body:not(.dark) .preview pre {
|
||||
background: #f0ede6;
|
||||
}
|
||||
.preview code {
|
||||
font-family: monospace;
|
||||
background: rgba(197, 160, 89, 0.15);
|
||||
padding: 2px 5px;
|
||||
border-radius: 3px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.preview ul, .preview ol {
|
||||
margin-left: 20px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.preview blockquote {
|
||||
border-left: 3px solid var(--accent);
|
||||
padding-left: 12px;
|
||||
font-style: italic;
|
||||
color: var(--muted);
|
||||
margin: 12px 0;
|
||||
}
|
||||
.preview table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 15px 0;
|
||||
}
|
||||
.preview th, .preview td {
|
||||
border: 1px solid var(--note-border);
|
||||
padding: 8px 12px;
|
||||
text-align: left;
|
||||
}
|
||||
.preview th {
|
||||
background: var(--button-bg);
|
||||
}
|
||||
|
||||
/* Responzivita */
|
||||
@media (max-width: 800px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
.editor-wrap {
|
||||
flex-direction: column;
|
||||
}
|
||||
.preview {
|
||||
width: 100%;
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
#links {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
#lineHR {
|
||||
border: none;
|
||||
border-top: 1px solid var(--accent);
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 26px;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
/* Homepage card*/
|
||||
.new-name {
|
||||
color: var(--accent-bronze);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.philosophy {
|
||||
font-style: italic;
|
||||
border-left: 2px solid var(--accent-bronze);
|
||||
padding-left: 15px;
|
||||
text-align: left;
|
||||
margin: 30px 0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.btnHomePage {
|
||||
display: inline-block;
|
||||
background-color: var(--accent-bronze);
|
||||
color: #e0961f;
|
||||
text-decoration: none;
|
||||
padding: 14px 28px;
|
||||
border-radius: 4px;
|
||||
font-weight: bold;
|
||||
font-size: 1.1rem;
|
||||
transition: background-color 0.2s ease, transform 0.1s ease;
|
||||
box-shadow: 0 8px 16px rgba(197, 160, 89, 0.2);
|
||||
}
|
||||
|
||||
.btnHomePage:hover {
|
||||
background-color: var(--accent-hover);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btnHomePage:active {
|
||||
transform: translateY(1px);
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<!doctype html>
|
||||
<html lang="cs">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title data-i18n-key="index.pageTitle">DOXA Notes — Local-First poznámky a minimalistický Markdown editor</title>
|
||||
<meta name="description" data-i18n-key="index.pageDescription" data-i18n-attr="content"
|
||||
content="DOXA Notes je minimalistická, local‑first poznámková aplikace s podporou Markdownu a otevřeným formátem JSON. Absolutní soukromí pro vaše myšlenky." />
|
||||
<link rel="canonical" href="https://doxa-notes.org/index.html" />
|
||||
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://doxa-notes.org/" />
|
||||
<meta property="og:title" data-i18n-key="index.ogTitle" data-i18n-attr="content" content="DOXA Notes — Local-First poznámky a minimalistický Markdown editor" />
|
||||
<meta property="og:description" data-i18n-key="index.ogDescription" data-i18n-attr="content"
|
||||
content="DOXA Notes je minimalistická, local‑first poznámková aplikace založená na otevřeném JSON formátu. Data zůstávají plně pod vaší kontrolou." />
|
||||
<meta property="og:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta property="og:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
<meta property="og:locale" data-i18n-key="ogLocale" data-i18n-attr="content" content="cs_CZ" />
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" data-i18n-key="index.twitterTitle" data-i18n-attr="content" content="DOXA Notes — Local-First poznámky a minimalistický Markdown editor" />
|
||||
<meta name="twitter:description" data-i18n-key="index.twitterDescription" data-i18n-attr="content"
|
||||
content="DOXA Notes je minimalistická, local‑first poznámková aplikace založená na otevřeném JSON formátu." />
|
||||
<meta name="twitter:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta name="twitter:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "DOXA Notes",
|
||||
"operatingSystem": "Windows, Linux, Web",
|
||||
"applicationCategory": "UtilitiesApplication",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "CZK"
|
||||
},
|
||||
"license": "https://opensource.org/licenses/MIT",
|
||||
"description": "Minimalistická local-first poznámková aplikace běžící plně v prohlížeči, s daty v otevřeném formátu JSON a podporou Markdownu.",
|
||||
"mainEntityOfPage": "https://doxa-notes.org/"
|
||||
}
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="assets/style/style.css" />
|
||||
<link rel="shortcut icon" href="assets/img/logo.jpg" />
|
||||
<script defer src="https://analytics.lukan.cz/script.js"
|
||||
data-website-id="3bfbabf3-f3ef-4275-86f5-3dc3e4e2084b"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<nav class="top-nav">
|
||||
<a href="index.html" data-i18n-key="nav.home">Domů</a>
|
||||
<a href="https://wiki.doxa-notes.org/index.html" target="_blank" data-i18n-key="nav.wiki">Wiki</a>
|
||||
<a href="privacy.html" data-i18n-key="nav.privacy">Ochrana soukromí</a>
|
||||
<a href="about.html" data-i18n-key="nav.about">O projektu</a>
|
||||
<button id="langToggle" class="theme-toggle" title="Přepnout jazyk / Switch language">
|
||||
🇬🇧 / 🇨🇿
|
||||
</button>
|
||||
<button id="themeToggle" class="theme-toggle" data-i18n-key="nav.themeToggle" data-i18n-attr="aria-label" aria-label="Přepnout motiv">
|
||||
🌙
|
||||
</button>
|
||||
</nav>
|
||||
<h1 data-i18n-key="index.mainTitle">DOXA Notes</h1>
|
||||
<p style="color: var(--muted); margin-bottom: 30px;margin-top: 2px; font-size: 0.95rem;" data-i18n-key="index.subtitle">Local-First Notes & Sovereignty</p>
|
||||
<p data-i18n-key="index.intro">DOXA Notes: Markdown editor, nezávislé, bezpečné a minimalistické prostředí pro uchovávání lidských myšlenek, poznámek a životních reflexí. V souladu se základními principy osobní svobody a soběstačnosti aplikace vědomě odmítá cloudové databáze, servery třetích stran a centralizovaná API. Doxa věří, že lidská mysl nepotřebuje být sledována algoritmy, aby mohla růst.</p>
|
||||
<div class="philosophy" data-i18n-key="index.philosophy">
|
||||
„Základní myšlenka zůstává nekompromisní: Radikální Local-First přístup, čistá data v JSON formátu a absolutní digitální soukromí bez korporátního cloudu a API.“
|
||||
</div>
|
||||
|
||||
|
||||
<a href="https://app.doxa-notes.org" class="btnHomePage" target="_blank" data-i18n-key="index.appButton">Vstoupit do DOXA Notes →</a>
|
||||
<p style="margin-bottom: 30px;margin-top: 35px; font-size: 0.95rem;"><a id="links" href="https://cli.doxa-notes.org" target="_blank">DOXA-CLI (Notes) - terminal version in GO language</a></p>
|
||||
<p style="margin-bottom: 30px;margin-top: 35px; font-size: 0.95rem;"><a id="links" href="https://secret.doxa-notes.org" target="_blank">DOXA-SECRET - secure offline command-line tool for encrypting and decrypting messages</a></p>
|
||||
|
||||
</div>
|
||||
<footer>
|
||||
<p class="copyright" data-i18n-key="footer.copyright">Doxa Notes © 2026 | Local-First & Freedom 🦅</p>
|
||||
</footer>
|
||||
<script src="assets/js/i18n.js"></script>
|
||||
<script src="assets/js/script.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,108 @@
|
||||
<!doctype html>
|
||||
<html lang="cs">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title data-i18n-key="privacy.pageTitle">Ochrana soukromí — DOXA Notes</title>
|
||||
<meta name="description" data-i18n-key="privacy.pageDescription" data-i18n-attr="content"
|
||||
content="Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes. Žádná data neodcházejí na servery třetích stran, vše zůstává u vás." />
|
||||
<link rel="canonical" href="https://doxa-notes.org/privacy.html" />
|
||||
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://doxa-notes.org/privacy.html" />
|
||||
<meta property="og:title" data-i18n-key="privacy.ogTitle" data-i18n-attr="content" content="Ochrana soukromí — DOXA Notes" />
|
||||
<meta property="og:description" data-i18n-key="privacy.ogDescription" data-i18n-attr="content" content="Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes. Žádná data neodcházejí na servery třetích stran." />
|
||||
<meta property="og:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta property="og:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
<meta property="og:locale" data-i18n-key="ogLocale" data-i18n-attr="content" content="cs_CZ" />
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" data-i18n-key="privacy.twitterTitle" data-i18n-attr="content" content="Ochrana soukromí — DOXA Notes" />
|
||||
<meta name="twitter:description" data-i18n-key="privacy.twitterDescription" data-i18n-attr="content" content="Zásady ochrany osobních údajů a soukromí v aplikaci DOXA Notes." />
|
||||
<meta name="twitter:image" content="https://doxa-notes.org/assets/img/doxa.png" />
|
||||
<meta name="twitter:image:alt" content="DOXA Notes - Local-First Notes & Sovereignty" />
|
||||
|
||||
<link rel="stylesheet" href="assets/style/style.css" />
|
||||
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<nav class="top-nav">
|
||||
<a href="index.html" data-i18n-key="nav.home">Domů</a>
|
||||
<a href="https://wiki.doxa-notes.org/index.html" target="_blank" data-i18n-key="nav.wiki">Wiki</a>
|
||||
<a href="privacy.html" data-i18n-key="nav.privacy">Ochrana soukromí</a>
|
||||
<a href="about.html" data-i18n-key="nav.about">O projektu</a>
|
||||
<button id="langToggle" class="theme-toggle" title="Přepnout jazyk / Switch language">
|
||||
🇬🇧 / 🇨🇿
|
||||
</button>
|
||||
<button id="themeToggle" class="theme-toggle" data-i18n-key="nav.themeToggle" data-i18n-attr="aria-label" aria-label="Přepnout motiv">
|
||||
🌙
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
<h1 data-i18n-key="privacy.mainTitle">Ochrana soukromí</h1>
|
||||
|
||||
<p data-i18n-key="privacy.intro">
|
||||
Doxa je navržena jako <strong>local‑first</strong> aplikace
|
||||
— soukromí je primární designový princip. Níže shrnutí, jak
|
||||
zacházím s daty v aktuálním stavu projektu.
|
||||
</p>
|
||||
<br>
|
||||
<h2 data-i18n-key="privacy.stores.title">Co aplikace ukládá</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="privacy.stores.item1">
|
||||
Poznámky: <code>id</code>, <code>name</code>,
|
||||
<code>content</code>, <code>created_at</code>,
|
||||
<code>modified_at</code> (pokud existuje).
|
||||
</li>
|
||||
<li data-i18n-key="privacy.stores.item2">
|
||||
Žádné automatické telemetry ani sledování není
|
||||
implementováno.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2 data-i18n-key="privacy.where.title">Kde jsou data uložena</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="privacy.where.item1">
|
||||
V prohlížeči: <strong>localStorage</strong> (klíč
|
||||
<code>doxa_notes_v1</code>).
|
||||
</li>
|
||||
<li data-i18n-key="privacy.where.item2">
|
||||
V Electron/Node režimu: soubor na disku (např.
|
||||
<code>assets/js/data/doxa.json</code>).
|
||||
</li>
|
||||
<li data-i18n-key="privacy.where.item3">
|
||||
Export/import: uživatel může stáhnout JSON a nahrát ho na
|
||||
jiném zařízení — je to manuální proces.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2 data-i18n-key="privacy.notSent.title">Co aplikace NEODESÍLÁ</h2>
|
||||
<ul>
|
||||
<li data-i18n-key="privacy.notSent.item1">
|
||||
Výchozí instalace neposílá poznámky na žádný vzdálený
|
||||
server.
|
||||
</li>
|
||||
<li data-i18n-key="privacy.notSent.item2">
|
||||
Bez implementace serverové synchronizace nejsou data
|
||||
odesílána ani zálohována vůči třetím stranám.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2 data-i18n-key="privacy.responsibility.title">Odpovědnost uživatele</h2>
|
||||
<p data-i18n-key="privacy.responsibility.body">
|
||||
Protože data jsou lokální, odpovědnost za zálohy a bezpečnou
|
||||
konfiguraci serveru (pokud použita) nese vlastník instalace.
|
||||
Doporučuji pravidelné exporty a bezpečné úložiště záloh.
|
||||
</p>
|
||||
</div>
|
||||
<footer>
|
||||
<p class="copyright" data-i18n-key="footer.copyright">© 2026 Doxa Notes | Local-First & Freedom 🦅</p>
|
||||
</footer>
|
||||
<script src="assets/js/i18n.js"></script>
|
||||
<script src="assets/js/script.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Allow: /index.html
|
||||
Allow: /about.html
|
||||
Allow: /privacy.html
|
||||
Allow: /wiki/
|
||||
Disallow: /web_app/
|
||||
Disallow: /desktop_app_dev/
|
||||
Disallow: /test/
|
||||
Disallow: /docs/
|
||||
|
||||
Sitemap: https://doxa-notes.org/sitemap.xml
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://doxa-notes.org/</loc>
|
||||
<lastmod>2026-07-04</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://doxa-notes.org/index.html</loc>
|
||||
<lastmod>2026-07-04</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://doxa-notes.org/about.html</loc>
|
||||
<lastmod>2026-07-04</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://doxa-notes.org/privacy.html</loc>
|
||||
<lastmod>2026-07-04</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://doxa-notes.org/navod.html</loc>
|
||||
<lastmod>2026-07-04</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
Reference in new issue
Block a user