diff --git a/docs/index.md b/docs/index.md index b3e000633..515fd6a80 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,81 +1,57 @@ # PictoPy -PictoPy is a modern desktop app designed to transform the handling of digital photos. It facilitates efficient gallery management with a robust focus on privacy, offering smart tagging capabilities for photos based on objects, faces, or scenes. +PictoPy is a modern desktop photo management application designed to: -
-
- AOSSIE Logo +- Organize large photo collections efficiently +- Maintain a strong focus on privacy +- Provide smart AI-based tagging +- Improve gallery navigation and search + + -This project was announced by [AOSSIE](https://aossie.org/), an umbrella organization and was to be implemented from scratch. It provides features such as object detection and face similarity, offering smart tagging capabilities for photos based on objects, faces. +This project was announced by [AOSSIE](https://aossie.org/), an umbrella organization, and is being implemented from scratch. +It provides features such as object detection and face similarity, offering smart tagging capabilities for photos based on objects and faces. + +--- -
-
-

Overview

- +
+
+ +
+

Overview

+
-
-

Backend Python

- + +
+

Backend (Python)

+
-
-

Backend Rust

- + +
+

Backend (Rust)

+
-
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index e7f412d2b..742a3a8e3 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,6 +1,6 @@ -.md-typeset .admonition-title { - margin-bottom: 10px; - +.md-header__button.md-logo { + display: flex; + align-items: center; } .md-header__button.md-logo img { @@ -8,346 +8,158 @@ height: auto; } -.md-header__button.md-logo { - display: flex; - align-items: center; - - padding-right: 0; - margin-right: 0; -} - .md-header__title { - margin-left: 8px !important; + margin-left: 8px !important; } -/* Responsive tweaks: ensure header, images, tables and code blocks behave well on small screens */ - -/* Make images scale down to container */ -.md-typeset img, -.md-content img { - max-width: 100%; - height: auto; +.md-main__inner { + display: grid; + grid-template-columns: auto 1fr; + gap: 3rem; } -/* Tables should be scrollable on small screens */ -.md-typeset table { - width: 100%; - display: block; - overflow-x: auto; +.md-sidebar--primary { + width: 260px; + padding-right: 1.25rem; } -/* Code blocks should wrap/scroll gracefully */ -.md-typeset pre { - white-space: pre-wrap; /* allow wrapping */ - word-break: break-word; - overflow-x: auto; +.md-content__inner { + max-width: 900px; + margin: 0 auto; + padding: 2rem; } -/* General container/content spacing adjustments for smaller screens */ -.md-main, .md-content { - padding-left: 1rem; - padding-right: 1rem; +.md-content h1 { + text-align: center; + font-size: 2.2rem; + margin-bottom: 1rem; } -/* Tablet and small laptop */ -@media (max-width: 768px) { - .md-header__button.md-logo img { - width: 28px; - height: auto; - } - - .md-header__button.md-logo { - padding-right: 6px; - margin-right: 6px; - } - - .md-header__title { - margin-left: 6px !important; - font-size: 1rem; - white-space: normal; - } - - /* Allow header inner area to wrap so items don't overflow */ - .md-header__inner { - flex-wrap: wrap; - align-items: center; - gap: 6px; - } - - /* Slightly reduce padding for main content */ - .md-main { - padding: 0.5rem 0.75rem; - } - - /* Make navigation easier to tap */ - .md-nav { - margin-top: 8px; - } +.md-content h2 { + text-align: center; + margin-top: 3rem; + margin-bottom: 1rem; } -/* Small phones */ -@media (max-width: 480px) { - .md-header__button.md-logo img { - width: 24px; - } - - .md-header__title { - font-size: 0.95rem; - } - - .md-header__title a { - font-size: 0.95rem; - } - - /* Ensure actions align to the right and don't push content */ - .md-header__actions { - margin-left: auto; - } - - .md-nav { - font-size: 0.95rem; - } - - .md-content { - padding: 0.75rem; - } +.md-content p { + max-width: 720px; + margin: 0 auto 1.5rem; + line-height: 1.7; + font-size: 1rem; +} - .md-typeset .admonition-title { - font-size: 0.95rem; - } +.md-content p:first-of-type { + text-align: center; + margin-bottom: 2rem; } -/* Specific fix for the home page's 4-column inline HTML layout in docs/index.md. - The page uses inline styles (display:flex and width:25% on children). These rules - add wrapping and force child blocks to become full-width on narrow screens. -*/ -.md-typeset > div[style*="display:flex"] { - display: flex !important; - flex-wrap: wrap !important; - justify-content: center !important; - gap: 0.5rem; +.md-content ul { + max-width: 600px; + margin: 0 auto 2rem; } -.md-typeset > div[style*="display:flex"] > div { - width: 25% !important; - box-sizing: border-box !important; - padding-left: 0.5rem !important; - padding-right: 0.5rem !important; +.md-content img { + max-width: 60%; + display: block; + margin: 1.5rem auto; + height: auto; } -@media (max-width: 900px) { - /* On tablets and small laptops, use two columns */ - .md-typeset > div[style*="display:flex"] > div { - width: 50% !important; - } +.md-nav__item { + margin: 0.3rem 0; } -@media (max-width: 540px) { - /* On phones, make each section full-width (stack vertically) */ - .md-typeset > div[style*="display:flex"] > div { - width: 100% !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - .md-typeset > div[style*="display:flex"] h2 { - text-align: left; - margin-left: 0.25rem; - } +.md-nav__link { + font-size: 0.9rem; + line-height: 1.4; } -/* Swagger UI / OpenAPI responsive fixes */ -/* The API page includes a web component whose internal layout - can overflow on small screens. These rules make summaries wrap and ensure - panels and code samples are scrollable instead of overlapping. */ -.swagger-ui, -.swagger-ui * { - box-sizing: border-box; +.home-logo { + text-align: center; + margin: 2rem 0; } -.swagger-ui .topbar { - flex-wrap: wrap; +.home-logo img { + max-width: 180px; } -.swagger-ui .info .title, -.swagger-ui .info .description { - word-break: break-word; +.home-wrapper { + max-width: 1000px; + margin: 0 auto; } -.swagger-ui .opblock-summary { - display: flex; - flex-wrap: wrap; - gap: 0.25rem; +.home-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 2.5rem; + margin-top: 3rem; } -.swagger-ui .opblock .opblock-summary-method, -.swagger-ui .opblock .opblock-summary-path { - white-space: normal; +.home-grid h2 { + text-align: left; } -/* Make operations and parameters area scroll horizontally instead of overlapping */ -.swagger-ui .opblock-body, -.swagger-ui .parameters { +.md-typeset table { + width: 100%; + display: block; overflow-x: auto; } -/* Ensure code samples are responsive */ -.swagger-ui pre, .swagger-ui code { +.md-typeset pre { white-space: pre-wrap; word-break: break-word; + overflow-x: auto; } -/* Smaller devices: stack operation summary elements and increase spacing */ -@media (max-width: 720px) { - .swagger-ui .opblock-summary { - flex-direction: column; - align-items: stretch; - } - .swagger-ui .opblock .opblock-summary-path { - font-size: 0.95rem; - } +.md-footer-meta__inner.md-grid { + display: flex !important; + flex-direction: column !important; + align-items: center !important; + gap: 0.25rem; + text-align: center; } -/* Redoc-specific fixes in case the component renders Redoc */ -.redoc-wrap, .redoc { - max-width: 100%; +.md-footer .md-social a { + margin: 0 0.25rem; } -.redoc .menu-content, .redoc .operations-wrapper { - overflow-x: auto; -} - -/* Scoped: Force a 500px "fixed" layout only for the Python backend API page. - The wrapper `.api-500-wrapper` is added to `docs/backend/backend_python/api.md`. - Only this page will use a 500px min-width and allow horizontal scrolling on - very small viewports so other pages remain normal. -*/ -@media (max-width: 500px) { - .api-500-wrapper { - min-width: 500px !important; - overflow-x: auto !important; - -webkit-overflow-scrolling: touch; - box-sizing: border-box; - } - - /* Ensure Swagger/Redoc components inside the wrapper respect the min-width */ - .api-500-wrapper .swagger-ui, - .api-500-wrapper .redoc, - .api-500-wrapper .redoc-wrap { - min-width: 500px !important; - } - /* Keep code blocks and tables inside the API wrapper readable; they will scroll inside the pane */ - .api-500-wrapper table, - .api-500-wrapper pre, - .api-500-wrapper code { - min-width: 500px; - overflow-x: auto; - } +.md-footer .md-copyright { + display: block; + width: 100%; + text-align: center; } -/* When API page is active, also constrain header/footer to the same 500px - so the entire visible page appears as a 500px layout (header/footer included). - This is only applied when the body has the `.api-fixed-500` class which is - added by a small inline script on the API page. */ -@media (max-width: 500px) { - body.api-fixed-500 { - overflow-x: auto; - -webkit-overflow-scrolling: touch; +@media (max-width: 1220px) { + .md-main__inner { + gap: 1.75rem; } - /* Constrain header, main and footer to the same 500px pane so they appear - consistent when the API page forces a fixed layout on small viewports. */ - body.api-fixed-500 .md-header, - body.api-fixed-500 header, - body.api-fixed-500 .md-main, - body.api-fixed-500 .md-footer, - body.api-fixed-500 footer { - width: 500px !important; - min-width: 500px !important; - margin: 0 auto !important; - box-sizing: border-box !important; - overflow: visible !important; + .md-sidebar--primary { + width: 220px; } - /* Ensure inner containers within header/footer stretch to the 500px width */ - body.api-fixed-500 .md-header__inner, - body.api-fixed-500 .md-footer__inner, - body.api-fixed-500 .md-footer-nav, - body.api-fixed-500 .md-footer__copyright { - width: 100% !important; - box-sizing: border-box !important; - } - - /* Adjust header inner alignment so actions remain visible within the 500px pane */ - body.api-fixed-500 .md-header__inner { - justify-content: space-between; + .md-content__inner { + padding: 1.5rem; } +} - /* Center the wrapper itself */ - .api-500-wrapper { - margin: 0 auto; +@media (max-width: 900px) { + .home-grid { + grid-template-columns: 1fr; } } -@media (max-width: 600px) { - /* Center the social container itself */ - .md-social, - .md-footer .md-social { - text-align: center !important; - display: block !important; +@media (max-width: 768px) { + .md-main__inner { + grid-template-columns: 1fr; } - /* Center copyright text */ - .md-copyright, - .md-footer .md-footer__copyright { - text-align: center !important; - display: block !important; + .md-sidebar--primary { + width: 100%; + padding-right: 0; } - /* Keep social links inline and add small horizontal spacing */ - .md-social a, - .md-footer .md-social a { - display: inline-block !important; - margin: 0 0.25rem !important; - vertical-align: middle !important; + .md-content img { + max-width: 90%; } } - -\ -.md-footer-meta__inner.md-grid { - display: flex !important; - flex-direction: column !important; - align-items: center !important; - justify-content: center !important; - gap: 0.25rem !important; - text-align: center !important; -} - -.md-footer-meta__inner.md-grid .md-social { - display: block !important; -} - -.md-footer-meta__inner.md-grid .md-social a { - display: inline-block !important; - margin: 0 0.25rem !important; -} - -/* Center only the copyright line without affecting social icons */ -.md-footer .md-copyright, -.md-footer-meta__inner.md-grid .md-copyright { - display: block !important; - width: 100% !important; - text-align: center !important; - margin: 0.25rem 0 !important; -} - -.md-footer .md-social, -.md-footer-meta__inner.md-grid .md-social { - display: inline-block !important; - vertical-align: middle !important; -} - - - - - -