Эх сурвалжийг харах

web/knowledge.html: >> in header, side panel for hidden articles, fix layout

asus 3 сар өмнө
parent
commit
53b62612c2
1 өөрчлөгдсөн 24 нэмэгдсэн , 29 устгасан
  1. 24 29
      web/knowledge.html

+ 24 - 29
web/knowledge.html

@@ -41,27 +41,28 @@ html.kb-page, .kb-page body { height: 100vh; overflow: hidden; }
     .kb-body-inner { position:relative; width:100%; max-width:700px; height:100%; display:flex; align-items:center; justify-content:center; }
     .kb-body-img { display:block; max-width:100%; max-height:100%; width:auto; height:auto; object-fit:contain; border-radius:var(--radius-lg); box-shadow:0 8px 40px rgba(74,155,215,0.08); }
 
-    .kb-marker { position:absolute; z-index:2; pointer-events:none; }
-    .kb-marker-card { pointer-events:auto; background:rgba(255,255,255,0.95); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); border-radius:12px; padding:10px 14px; border:1.5px solid var(--m-color,var(--color-border-light)); box-shadow:0 4px 16px rgba(0,0,0,0.06); min-width:170px; max-width:220px; transition:box-shadow var(--transition-fast), transform var(--transition-fast); }
+    .kb-marker { position:absolute; z-index:2; }
+    .kb-marker-card { pointer-events:auto; background:rgba(255,255,255,0.95); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); border-radius:12px; padding:10px 14px; border:1.5px solid var(--m-color,var(--color-border-light)); box-shadow:0 4px 16px rgba(0,0,0,0.06); min-width:170px; max-width:220px; transition:box-shadow .2s, transform .2s; }
     .kb-marker-card:hover { box-shadow:0 6px 24px rgba(0,0,0,0.10); transform:translateY(-1px); }
     .kb-marker-dot { position:absolute; width:12px; height:12px; border-radius:50%; background:var(--m-color); border:2px solid #fff; box-shadow:0 1px 4px rgba(0,0,0,0.15); top:50%; margin-top:-6px; pointer-events:none; }
     .kb-marker--right .kb-marker-dot { left:-6px; }
     .kb-marker--left .kb-marker-dot { right:-6px; }
     .kb-marker-head { display:flex; align-items:center; gap:6px; margin-bottom:6px; padding-bottom:6px; border-bottom:1px solid var(--color-border-light); }
     .kb-marker-label { font-size:0.8125rem; font-weight:700; color:var(--m-color,var(--color-text-primary)); }
-    .kb-marker-card a { display:flex; align-items:center; gap:6px; padding:5px 0; text-decoration:none; color:var(--color-text-secondary); font-size:0.8125rem; line-height:1.3; border-bottom:1px solid var(--color-border-light); transition:color var(--transition-fast); }
+    .kb-marker .kb-more-btn { font-size:0.75rem; font-weight:700; color:var(--m-color); cursor:pointer; opacity:0.5; transition:opacity .2s; user-select:none; margin-left:auto; }
+    .kb-marker .kb-more-btn:hover { opacity:1; }
+    .kb-marker .kb-hidden-items { display:none; position:absolute; top:0; z-index:3; background:rgba(255,255,255,0.95); backdrop-filter:blur(8px); border-radius:12px; padding:10px 14px; border:1.5px solid var(--m-color); box-shadow:0 4px 16px rgba(0,0,0,0.06); min-width:170px; max-width:220px; pointer-events:auto; }
+    .kb-marker:hover .kb-hidden-items { display:block; }
+    .kb-marker--right .kb-hidden-items { right:calc(100% + 8px); }
+    .kb-marker--left .kb-hidden-items { left:calc(100% + 8px); }
+    .kb-marker-card a { display:flex; align-items:center; gap:6px; padding:5px 0; text-decoration:none; color:var(--color-text-secondary); font-size:0.8125rem; line-height:1.3; border-bottom:1px solid var(--color-border-light); transition:color .2s; }
     .kb-marker-card a:last-child { border-bottom:none; }
     .kb-marker-card a:hover { color:var(--m-color,var(--color-primary)); }
     .kb-marker-card a .ma-icon { font-size:1rem; flex-shrink:0; }
     .kb-marker-card a .ma-title { flex:1; min-width:0; }
-    .kb-marker-card a .ma-arrow { flex-shrink:0; font-size:0.75rem; opacity:0.3; transition:transform var(--transition-fast); }
+    .kb-marker-card a .ma-arrow { flex-shrink:0; font-size:0.75rem; opacity:0.3; transition:transform .2s; }
     .kb-marker-card a:hover .ma-arrow { transform:translateX(3px); opacity:0.7; }
     .kb-marker-card .ma-coming { opacity:0.5; cursor:default; pointer-events:none; font-size:0.75rem; padding:4px 0; }
-    .kb-marker-card .kb-more-wrap { position:relative; }
-    .kb-marker-card .kb-more-btn { display:block; text-align:center; font-size:0.875rem; font-weight:700; color:var(--m-color); padding:2px 0 0; cursor:pointer; opacity:0.5; transition:opacity .2s; letter-spacing:1px; user-select:none; }
-    .kb-marker-card .kb-more-btn:hover { opacity:1; }
-    .kb-marker-card .kb-hidden-items { max-height:0; overflow:hidden; transition:max-height .25s ease; }
-    .kb-marker-card .kb-more-wrap:hover .kb-hidden-items { max-height:300px; }
 
     .kb-m-pos-brain  { top:13%; left:56%; }
     .kb-m-pos-heart  { top:33%; right:54%; }
@@ -196,36 +197,30 @@ html.kb-page, .kb-page body { height: 100vh; overflow: hidden; }
       var c = document.getElementById('kbBodyInner');
       for (var i = 0; i < DIMS.length; i++) {
         var d = DIMS[i], pos = MARKER_POS[d.bodyPart], arts = ARTICLES[d.key] || [];
+        var sideCls = pos.side==='left' ? 'kb-marker--right' : 'kb-marker--left';
         var m = document.createElement('div');
-        m.className = 'kb-marker';
+        m.className = 'kb-marker ' + sideCls;
         m.style.cssText = 'top:'+pos.top+';'+(pos.side==='left'?'left:'+pos.offset:'right:'+pos.offset);
-        var side = pos.side==='left' ? 'kb-marker--right' : 'kb-marker--left';
         var card = document.createElement('div');
-        card.className = 'kb-marker-card '+side;
+        card.className = 'kb-marker-card';
         card.style.setProperty('--m-color', d.color);
         var hd = document.createElement('div');
         hd.className = 'kb-marker-head';
         hd.innerHTML = '<span class="kb-marker-label">'+d.label+' · '+d.subtitle+'</span>';
+        var maxVis = 3, hiddenDiv = null;
+        if (arts.length > maxVis) {
+          var moreBtn = document.createElement('span');
+          moreBtn.className = 'kb-more-btn';
+          moreBtn.textContent = '>>';
+          hd.appendChild(moreBtn);
+          hiddenDiv = document.createElement('div');
+          hiddenDiv.className = 'kb-hidden-items';
+          m.appendChild(hiddenDiv);
+        }
         card.appendChild(hd);
-        var maxVis = 3;
         for (var j = 0; j < arts.length; j++) {
-          if (j === maxVis && arts.length > maxVis) {
-            var moreWrap = document.createElement('div');
-            moreWrap.className = 'kb-more-wrap';
-            var btn = document.createElement('div');
-            btn.className = 'kb-more-btn';
-            btn.textContent = '>>';
-            moreWrap.appendChild(btn);
-            var hiddenDiv = document.createElement('div');
-            hiddenDiv.className = 'kb-hidden-items';
-            moreWrap.appendChild(hiddenDiv);
-            card.appendChild(moreWrap);
-          }
           var a = arts[j], el, container = card;
-          if (j >= maxVis && arts.length > maxVis) {
-            var mw = card.querySelector('.kb-hidden-items');
-            if (mw) container = mw;
-          }
+          if (j >= maxVis && hiddenDiv) container = hiddenDiv;
           if (a.coming) {
             el = document.createElement('div');
             el.className = 'ma-coming';