Files
xamxam/public/assets/main.css
Pontoporeia d87348c388 feat: licence page, admin pages editor, license types, gradient card placeholders, latest-year home view
- Feature 1: public /licence.php fetches 'licenses' page from DB, renders Markdown
- Feature 1: nav.php adds 'Licence' link with active state
- Feature 2: Database::getPage(), savePage(), getAllPages() methods
- Feature 2: bundled src/Parsedown.php (MIT, zero-dependency)
- Feature 2: apropos.php now renders 'about' page content from DB via Parsedown
- Feature 2: admin/pages.php (list) + admin/pages-edit.php (EasyMDE editor)
- Feature 2: admin/actions/page.php (auth+CSRF+validation+save)
- Feature 2: admin/head.php adds 'Pages statiques' nav link
- Feature 3: storage/schema.sql seeds 8 CC license types
- Feature 3: storage/migrations/003_seed_license_types.sql (applied to live DB)
- Feature 3: Database::getLicenseTypes() / getAllLicenseTypes()
- Feature 3: admin/add.php + formulaire.php: license_id field on add form
- Feature 3: admin/edit.php: license_id field on edit form with raw FK lookup
- Feature 3: tfe.php: shows 'Licence :' meta row when non-null
- Feature 6: main.css: .card__media--gradient styles
- Feature 6: index.php: deterministic HSL gradient placeholder cards
- Feature 6: Database::getLatestYearTheses() + getLatestPublishedYear()
- Feature 6: index.php default home = random latest-year theses with info label
2026-03-24 13:12:48 +01:00

224 lines
3.8 KiB
CSS

/* ============================================================
HOME PAGE (index.php)
============================================================ */
html, body {
margin: 0;
padding: 0;
height: 100%;
}
.home-body {
display: flex;
flex-direction: column;
height: 100vh;
overflow: hidden;
background: var(--white);
}
/* Cards grid — scrollable main area */
.home-main {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
padding: 0;
}
.cards-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 0;
}
@media (min-width: 1400px) {
.cards-container {
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
}
}
@media (max-width: 768px) {
.cards-container {
grid-template-columns: repeat(2, 1fr);
}
}
/* Each card = media thumbnail + text below */
.card-link {
text-decoration: none;
color: inherit;
display: block;
}
.card {
display: flex;
flex-direction: column;
cursor: pointer;
border: none;
background: var(--white);
overflow: hidden;
}
.card__media {
width: 100%;
aspect-ratio: 4/3;
overflow: hidden;
background: #e8e8e8;
position: relative;
}
.card__media img,
.card__media video {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform 0.3s ease;
}
.card:hover .card__media img,
.card:hover .card__media video {
transform: scale(1.02);
}
.card__media--placeholder {
width: 100%;
height: 100%;
background: linear-gradient(135deg, #e8e8e8, #d0d0d0);
display: flex;
align-items: center;
justify-content: center;
color: #aaa;
font-size: 2rem;
}
.card__media--gradient {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 1rem;
text-align: center;
box-sizing: border-box;
}
.card__gradient-author {
color: #fff;
font-size: 0.75rem;
opacity: .85;
margin-bottom: .25rem;
display: block;
}
.card__gradient-title {
color: #fff;
font-size: 0.85rem;
font-weight: 600;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* Latest-year label */
.home-latest-label {
font-style: italic;
}
.card__info {
padding: 0.55rem 0.5rem 0.65rem;
font-size: 0.88rem;
line-height: 1.35;
color: var(--black);
}
.card__info .authors {
margin: 0;
font-weight: 400;
}
.card__info .title {
margin: 0;
font-weight: 400;
color: var(--text-muted);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* Filter info */
.filter-info {
background: var(--purple-light);
color: var(--purple);
padding: 0.4rem 1.5rem;
font-size: 0.85rem;
display: flex;
align-items: center;
gap: 1rem;
flex-shrink: 0;
}
.clear-filter {
color: var(--purple);
text-decoration: none;
padding: 0.15rem 0.6rem;
background: rgba(149, 87, 181, 0.12);
border-radius: 3px;
font-size: 0.82rem;
}
.clear-filter:hover {
background: rgba(149, 87, 181, 0.22);
}
/* Pagination */
.pagination-wrap {
display: flex;
justify-content: center;
align-items: center;
gap: 0.5rem;
padding: 1rem;
border-top: 1px solid var(--border-color);
background: var(--white);
flex-shrink: 0;
}
.pagination-btn {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 2rem;
height: 2rem;
padding: 0 0.5rem;
border: 1px solid var(--border-color);
border-radius: 3px;
color: var(--black);
font-size: 0.9rem;
text-decoration: none;
transition: all 0.15s;
}
.pagination-btn:hover:not(.disabled) {
border-color: var(--purple);
color: var(--purple);
}
.pagination-btn.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
.pagination-info {
font-size: 0.9rem;
color: var(--text-muted);
padding: 0 0.5rem;
}
.page-current {
font-weight: 600;
color: var(--black);
}