diff --git a/admin.php b/admin.php
index ee072d3..929338b 100644
--- a/admin.php
+++ b/admin.php
@@ -742,10 +742,12 @@ function nextUniqueCodeName(string $base): string
.topic-node{border:1px solid #e5e7eb;border-radius:10px;padding:10px;background:#fff}
.topic-node.level-2{margin-left:20px;border-color:#edf2fb;background:#fbfdff}
.topic-node-head{font-size:12px;color:#667085;margin:0 0 8px}
- .topic-row{display:grid;grid-template-columns:minmax(180px,1fr) 110px;gap:8px;align-items:center}
+ .topic-line{display:flex;align-items:flex-start;gap:8px}
+ .topic-row{display:grid;grid-template-columns:minmax(180px,1fr) 110px;gap:8px;align-items:center;flex:1}
.topic-row .btn{height:36px}
+ .topic-delete-btn{height:36px;margin:0}
.topic-children{display:grid;gap:8px;margin-top:8px}
- @media (max-width:900px){.topic-row{grid-template-columns:1fr 110px}.topic-row .btn{width:100%}}
+ @media (max-width:900px){.topic-line{flex-direction:column}.topic-row{grid-template-columns:1fr 110px;width:100%}.topic-row .btn,.topic-delete-btn{width:100%}}
.row-actions{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.modal{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;padding:16px}
.modal[hidden]{display:none}
@@ -888,32 +890,36 @@ function nextUniqueCodeName(string $base): string
Уровень 1
-
-
+
Уровень 2 · внутри «= h((string)$root['name']) ?>»
-
-
+
diff --git a/index.php b/index.php
index 903289b..1f3ac1b 100644
--- a/index.php
+++ b/index.php
@@ -94,8 +94,14 @@ $detailIndex = 0;
$prevPhotoId = 0;
$nextPhotoId = 0;
$detailSectionId = 0;
+$photoTopics = [];
if ($photo) {
$detailSectionId = (int)$photo['section_id'];
+ try {
+ $photoTopics = photoTopicsByPhotoId($activePhotoId);
+ } catch (Throwable) {
+ $photoTopics = [];
+ }
$detailPhotos = photosForPublic($detailSectionId, $activeTopicId > 0 ? $activeTopicId : null);
if ($activeTopicId > 0 && $detailPhotos !== []) {
$foundInTopic = false;
@@ -294,10 +300,12 @@ function outputWatermarked(string $path, string $mime): never
.card-badge{display:inline-flex;align-items:center;justify-content:center;background:rgba(17,24,39,.78);color:#fff;font-size:11px;line-height:1;padding:6px 7px;border-radius:999px}
.card-badge.ai{background:rgba(31,111,235,.92)}
.card-badge.comments{background:rgba(3,105,161,.9)}
- .card img{width:100%;height:130px;object-fit:cover}
+ .card img{width:100%;height:130px;object-fit:contain;object-position:center;background:#f8fafc}
.cap{padding:8px;font-size:13px}
.detail img{max-width:100%;border-radius:10px;border:1px solid #e5e7eb}
.stack{display:grid;gap:12px;grid-template-columns:1fr}
+ .detail-meta{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 12px}
+ .detail-meta-link{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;border:1px solid #dbe3ef;background:#f8fbff;color:#1f3b7a;text-decoration:none;font-size:12px;line-height:1.25}
.cmt{border-top:1px solid #eee;padding:8px 0}
.muted{color:#6b7280;font-size:13px}
.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:16px;padding-top:12px;border-top:1px solid #e5e7eb}
@@ -394,13 +402,21 @@ function outputWatermarked(string $path, string $mime): never
- = $viewer ? 'Вы авторизованы для комментариев: ' . h((string)$viewer['display_name']) : 'Режим просмотра' ?>
+
+
= $viewer ? 'Вы авторизованы для комментариев: ' . h((string)$viewer['display_name']) : 'Режим просмотра' ?>
+
0 && $photo): ?>
= h((string)$photo['code_name']) ?>
= h((string)($photo['description'] ?? '')) ?>
+
После обработки (watermark)