/* TAG SPHERE - GROSSE SCHRIFT + AUTO-EXPLODE */
#tagSphere {
position: fixed;
top: 50%;
left: 20px;
transform: translateY(-50%);
width: 280px;
height: 280px;
z-index: 999;
cursor: move;
cursor: -webkit-grab;
cursor: -moz-grab;
opacity: 0;
visibility: hidden;
transition: opacity 0.4s ease, visibility 0.4s ease, width 0.7s cubic-bezier(0.68, -0.55, 0.265, 1.55), height 0.7s cubic-bezier(0.68, -0.55, 0.265, 1.55), top 0.7s ease, left 0.7s ease, transform 0.7s ease, z-index 0s;
background: transparent;
border: none;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
#tagSphere.visible {
opacity: 1;
visibility: visible;
}
#tagSphere.exploded {
width: 90vmin;
height: 90vmin;
max-width: 900px;
max-height: 900px;
top: 50vh;
left: 50vw;
transform: translate(-50%, -50%);
z-index: 2147483647;
}
@media (orientation: landscape) and (min-width: 1024px) {
#tagSphere.exploded {
width: 80vw;
height: 70vh;
max-width: 1200px;
max-height: 750px;
}
}
#tagSphereBackdrop {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.3);
z-index: 2147483646;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
#tagSphereBackdrop.visible {
opacity: 1;
visibility: visible;
}
@media (max-width: 768px) {
#tagSphere {
width: 250px;
height: 250px;
left: 50vw;
top: 50vh;
transform: translate(-50%, -50%);
}
#tagSphere.exploded {
width: 100vw !important;
height: 100vh !important;
max-width: none !important;
max-height: none !important;
top: 50vh !important;
left: 50vw !important;
transform: translate(-50%, -50%) !important;
background: rgba(255, 255, 255, 0.95);
}
#tagSphereBackdrop {
display: none;
}
}
#tagSphere.dragging {
cursor: -webkit-grabbing !important;
cursor: -moz-grabbing !important;
}
#tagSphere .close-btn {
position: absolute;
top: 20px;
right: 20px;
width: 56px;
height: 56px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
color: #CC0000;
border: 2px solid rgba(204, 0, 0, 0.2);
border-radius: 50%;
font-size: 32px;
font-weight: bold;
line-height: 52px;
text-align: center;
cursor: pointer;
z-index: 9999;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
user-select: none;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
#tagSphere.exploded .close-btn {
opacity: 1 !important;
visibility: visible !important;
}
#tagSphere .close-btn:hover {
background: #CC0000;
color: #FFFFFF;
border-color: #CC0000;
transform: scale(1.1);
box-shadow: 0 6px 24px rgba(204, 0, 0, 0.4);
}
#tagSphere .close-btn:active {
transform: scale(0.95);
}
#tagSphere .back-btn {
position: absolute;
top: 20px;
left: 20px;
width: 56px;
height: 56px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
color: #0066CC;
border: 2px solid rgba(0, 102, 204, 0.2);
border-radius: 50%;
font-size: 28px;
font-weight: bold;
line-height: 52px;
text-align: center;
cursor: pointer;
z-index: 9999;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
user-select: none;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
#tagSphere.mode-pages.exploded .back-btn {
opacity: 1 !important;
visibility: visible !important;
}
#tagSphere .back-btn:hover {
background: #0066CC;
color: #FFFFFF;
border-color: #0066CC;
transform: scale(1.1);
box-shadow: 0 6px 24px rgba(0, 102, 204, 0.4);
}
#tagSphere .back-btn:active {
transform: scale(0.95);
}
@media (orientation: landscape) and (min-width: 1024px) {
#tagSphere.exploded .close-btn {
top: 35px;
right: 45px;
width: 64px;
height: 64px;
font-size: 38px;
line-height: 60px;
}
#tagSphere.exploded .back-btn {
top: 35px;
left: 45px;
width: 64px;
height: 64px;
font-size: 34px;
line-height: 60px;
}
}
@media (orientation: portrait) {
#tagSphere .close-btn {
width: 72px;
height: 72px;
font-size: 40px;
line-height: 68px;
top: 25px;
right: 25px;
}
#tagSphere .back-btn {
width: 72px;
height: 72px;
font-size: 36px;
line-height: 68px;
top: 25px;
left: 25px;
}
}
@media (max-width: 768px) and (orientation: portrait) {
#tagSphere .close-btn {
width: 80px;
height: 80px;
font-size: 48px;
line-height: 76px;
top: 20px;
right: 20px;
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
}
#tagSphere .back-btn {
width: 80px;
height: 80px;
font-size: 42px;
line-height: 76px;
top: 20px;
left: 20px;
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
}
}
@media (max-width: 768px) and (orientation: landscape) {
#tagSphere .close-btn {
width: 64px;
height: 64px;
font-size: 36px;
line-height: 60px;
}
#tagSphere .back-btn {
width: 64px;
height: 64px;
font-size: 32px;
line-height: 60px;
}
}
#tagSphere .tag-item {
position: absolute;
padding: 18px 32px;
white-space: nowrap;
font-size: 20px;
font-weight: 700;
text-decoration: none;
background: #FFFFFF;
border: none;
border-radius: 25px;
cursor: pointer;
min-width: 70px;
text-align: center;
box-shadow: 0 3px 10px rgba(0,0,0,0.15);
transition: transform 0.2s ease, box-shadow 0.2s ease, color 0.2s ease, opacity 0.3s ease;
pointer-events: auto;
z-index: 100;
user-select: none;
}
@media (max-width: 768px) {
#tagSphere .tag-item {
padding: 22px 38px;
font-size: 22px;
min-width: 95px;
}
}
#tagSphere .tag-item.atom-0 { animation: float-0 4.2s ease-in-out infinite; }
#tagSphere .tag-item.atom-1 { animation: float-1 5.1s ease-in-out infinite; }
#tagSphere .tag-item.atom-2 { animation: float-2 4.7s ease-in-out infinite; }
#tagSphere .tag-item.atom-3 { animation: float-3 5.5s ease-in-out infinite; }
#tagSphere .tag-item.atom-4 { animation: float-4 4.9s ease-in-out infinite; }
#tagSphere .tag-item.atom-5 { animation: float-5 5.3s ease-in-out infinite; }
#tagSphere .tag-item.atom-6 { animation: float-6 4.5s ease-in-out infinite; }
#tagSphere .tag-item.atom-7 { animation: float-7 5.8s ease-in-out infinite; }
@keyframes float-0 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(3px, -4px) rotate(1deg); }
50% { transform: translate(-3px, -5px) rotate(-1deg); }
75% { transform: translate(-4px, -2px) rotate(2deg); }
}
@keyframes float-1 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(-3px, -5px) rotate(-1deg); }
50% { transform: translate(4px, -3px) rotate(1deg); }
75% { transform: translate(3px, -6px) rotate(-2deg); }
}
@keyframes float-2 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(4px, -3px) rotate(2deg); }
50% { transform: translate(-3px, -6px) rotate(-1deg); }
75% { transform: translate(3px, -4px) rotate(1deg); }
}
@keyframes float-3 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(-4px, -6px) rotate(-2deg); }
50% { transform: translate(3px, -4px) rotate(1deg); }
75% { transform: translate(-3px, -5px) rotate(-1deg); }
}
@keyframes float-4 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(3px, -5px) rotate(1deg); }
50% { transform: translate(-4px, -4px) rotate(-2deg); }
75% { transform: translate(4px, -6px) rotate(2deg); }
}
@keyframes float-5 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(-3px, -4px) rotate(-1deg); }
50% { transform: translate(4px, -6px) rotate(2deg); }
75% { transform: translate(-4px, -3px) rotate(-2deg); }
}
@keyframes float-6 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(4px, -6px) rotate(2deg); }
50% { transform: translate(-3px, -5px) rotate(-1deg); }
75% { transform: translate(3px, -3px) rotate(1deg); }
}
@keyframes float-7 {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(-4px, -4px) rotate(-2deg); }
50% { transform: translate(3px, -6px) rotate(1deg); }
75% { transform: translate(-3px, -5px) rotate(-1deg); }
}
#tagSphere.mode-tags .tag-item {
color: #0066CC;
}
#tagSphere.mode-tags .tag-item:hover {
color: #0044AA;
box-shadow: 0 6px 20px rgba(0,102,204,0.5);
transform: scale(1.3) !important;
z-index: 9998 !important;
}
#tagSphere.mode-pages .tag-item:hover {
box-shadow: 0 6px 20px rgba(204,0,0,0.5);
transform: scale(1.3) !important;
z-index: 9998 !important;
}
(function(){var CFG={baseRadius:120,smallSize:280,smallSizeMobile:250,baseFontSize:20,baseFontSizeMobile:22,minFontPages:18,maxFontPages:38,minFontPagesMobile:20,maxFontPagesMobile:40,xFactorNormal:0.4,yFactorNormal:1.5,xFactorLandscape:0.9,yFactorLandscape:1.0,inactiveOpacity:0.4,verticalGradient:0.6,autoExplodeTrigger:0.3,scrollThreshold:1000,mobileBreak:768,landscapeBreak:1024,dragSense:0.008,moveThreshold:10};var c=null,backdrop=null,closeBtn=null,backBtn=null,items=[],angleX=0,angleY=0,exploded=false,drag=false,lastX=0,lastY=0,visible=false,loading=false,mode='tags',originalTags=[],isMobile=false,startX=0,startY=0,hasMoved=false,isActive=false,isLandscape=false,lastMouseX=0;function detectMobile(){isMobile=window.innerWidth<=CFG.mobileBreak}function detectLandscape(){isLandscape=window.innerWidth>window.innerHeight&&window.innerWidth>=CFG.landscapeBreak}function getViewportSize(){if(window.visualViewport){return{width:window.visualViewport.width,height:window.visualViewport.height}}return{width:window.innerWidth,height:window.innerHeight}}function createContainer(){backdrop=document.createElement('div');backdrop.id='tagSphereBackdrop';c=document.createElement('div');c.id='tagSphere';c.className='mode-tags';closeBtn=document.createElement('button');closeBtn.className='close-btn';closeBtn.textContent='\u00D7';closeBtn.title='Close';backBtn=document.createElement('button');backBtn.className='back-btn';backBtn.textContent='\u25C4';backBtn.title='Back to Tags';c.appendChild(closeBtn);c.appendChild(backBtn);var body=document.body||document.getElementsByTagName('body')[0];body.appendChild(backdrop);body.appendChild(c)}function extractTags(){var box=document.querySelector('.pageTags');if(!box)return;var links=box.getElementsByTagName('a');for(var i=0;i<links.length;i++){var>0&&link.href){items.push({text:txt,url:link.href,isTag:true,views:0,phi:0,theta:0})}}originalTags=items.slice();distributeItems()}function distributeItems(){var count=items.length;if(count===0)return;var goldenAngle=Math.PI*(3-Math.sqrt(5));for(var i=0;i<count;i++){var>0){c.removeChild(elements[0])}items=[]}function createElements(){for(var i=0;i<items.length;i++){var>CFG.scrollThreshold&&!visible){c.className+=' visible';visible=true}else if(scrollTop<=CFG.scrollThreshold&&visible){c.className=c.className.replace(/\s*visible/g,'');visible=false}}function activate(){isActive=true;position()}function deactivate(){isActive=false;position()}function down(e){if(loading)return;activate();startX=e.clientX||e.pageX||(e.touches?e.touches[0].clientX:0);startY=e.clientY||e.pageY||(e.touches?e.touches[0].clientY:0);lastX=startX;lastY=startY;hasMoved=false;drag=true;if(e.preventDefault)e.preventDefault();return false}function move(e){if(!drag)return;var x=e.clientX||e.pageX||(e.touches?e.touches[0].clientX:0);var y=e.clientY||e.pageY||(e.touches?e.touches[0].clientY:0);var deltaX=Math.abs(x-startX);var deltaY=Math.abs(y-startY);if(deltaX>CFG.moveThreshold||deltaY>CFG.moveThreshold){hasMoved=true;c.className+=' dragging';angleX+=(x-lastX)*CFG.dragSense;angleY+=(y-lastY)*CFG.dragSense;position()}lastX=x;lastY=y;if(e.preventDefault)e.preventDefault();return false}function up(e){if(!drag)return;drag=false;c.className=c.className.replace(/\s*dragging/g,'');if(!hasMoved){handleClick(e)}}function trackMouse(e){lastMouseX=e.clientX||e.pageX||0}function handleMouseEnter(e){activate();var mouseX=e.clientX||e.pageX||lastMouseX;var triggerPos=window.innerWidth*CFG.autoExplodeTrigger;if(!isMobile&&!exploded&&!drag&&mouseX<triggerpos){toggleexplode()}}function>