/* ---------- Cursors: one family drawn in the map's style (orange or blue fill, dark rim) ----------
   Generated SVGs; each one falls back to the matching system cursor.
   Used through var(--cur-*) in the other stylesheets. Touch screens have no cursor and ignore all of this. */
:root {
  --cur-default: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M4 3 L25 13 L15 15.6 L11 26 Z' fill='%23ff6a1a' stroke='%2317181b' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E") 4 3, default; /* everywhere */
  --cur-pointer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M8 7 L27 16 L18 18.6 L14.4 27.6 Z' fill='%232f8cff' stroke='%2317181b' stroke-width='1.8' stroke-linejoin='round'/%3E%3Cpath d='M8 2.6 V4 M2.6 7 H4 M4.2 3.2 L5.2 4.2' fill='none' stroke='%2317181b' stroke-width='4.0' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8 2.6 V4 M2.6 7 H4 M4.2 3.2 L5.2 4.2' fill='none' stroke='%23ecebe4' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 8 7, pointer; /* links, buttons, signposts, menu slices */
  --cur-grab: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M16 0.5 V8' fill='none' stroke='%2317181b' stroke-width='3.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 0.5 V8' fill='none' stroke='%23ecebe4' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='10.5' y='7.5' width='11' height='6' rx='2' fill='%23ff6a1a' stroke='%2317181b' stroke-width='1.6'/%3E%3Cpath d='M13 13.5 Q6.5 17.5 8 24.5 Q9 26.5 11 25.5 M19 13.5 Q25.5 17.5 24 24.5 Q23 26.5 21 25.5 M16 13.5 V22' fill='none' stroke='%2317181b' stroke-width='4.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 13.5 Q6.5 17.5 8 24.5 Q9 26.5 11 25.5 M19 13.5 Q25.5 17.5 24 24.5 Q23 26.5 21 25.5 M16 13.5 V22' fill='none' stroke='%23ff6a1a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 16 20, grab; /* cards and skills that can be moved */
  --cur-grabbing: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M16 0.5 V8' fill='none' stroke='%2317181b' stroke-width='3.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 0.5 V8' fill='none' stroke='%23ecebe4' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Ccircle cx='16' cy='22.5' r='4.2' fill='%232f8cff' stroke='%2317181b' stroke-width='1.6'/%3E%3Ccircle cx='14.6' cy='21' r='1.2' fill='%23ecebe4'/%3E%3Crect x='10.5' y='7.5' width='11' height='6' rx='2' fill='%23ff6a1a' stroke='%2317181b' stroke-width='1.6'/%3E%3Cpath d='M13 13.5 Q8.5 18 10.5 23.5 Q11.5 26 13.6 26 M19 13.5 Q23.5 18 21.5 23.5 Q20.5 26 18.4 26' fill='none' stroke='%2317181b' stroke-width='4.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 13.5 Q8.5 18 10.5 23.5 Q11.5 26 13.6 26 M19 13.5 Q23.5 18 21.5 23.5 Q20.5 26 18.4 26' fill='none' stroke='%23ff6a1a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 16 21, grabbing; /* while dragging a card, a skill or the map */
  --cur-crosshair: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M16 2 V9 M16 23 V30 M2 16 H9 M23 16 H30' fill='none' stroke='%2317181b' stroke-width='4.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 2 V9 M16 23 V30 M2 16 H9 M23 16 H30' fill='none' stroke='%23ff6a1a' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 9.5 a6.5 6.5 0 1 0 0.01 0' fill='none' stroke='%2317181b' stroke-width='4.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 9.5 a6.5 6.5 0 1 0 0.01 0' fill='none' stroke='%23ff6a1a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Ccircle cx='16' cy='16' r='1.6' fill='%23ff6a1a' stroke='%2317181b' stroke-width='1'/%3E%3C/svg%3E") 16 16, crosshair; /* minimap: click to jump */
  --cur-zoom-in: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M13 5.5 a7.5 7.5 0 1 0 0.01 0 M18.6 18.6 L27 27' fill='none' stroke='%2317181b' stroke-width='4.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 5.5 a7.5 7.5 0 1 0 0.01 0 M18.6 18.6 L27 27' fill='none' stroke='%23ff6a1a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.5 13 H16.5 M13 9.5 V16.5' fill='none' stroke='%2317181b' stroke-width='4.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.5 13 H16.5 M13 9.5 V16.5' fill='none' stroke='%23ecebe4' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 13 13, zoom-in; /* a picture that opens full screen */
  --cur-zoom-out: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M13 5.5 a7.5 7.5 0 1 0 0.01 0 M18.6 18.6 L27 27' fill='none' stroke='%2317181b' stroke-width='4.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 5.5 a7.5 7.5 0 1 0 0.01 0 M18.6 18.6 L27 27' fill='none' stroke='%23ff6a1a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.5 13 H16.5' fill='none' stroke='%2317181b' stroke-width='4.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.5 13 H16.5' fill='none' stroke='%23ecebe4' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 13 13, zoom-out; /* full-screen picture: click outside to close */
  --cur-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M4 3 L25 13 L15 15.6 L11 26 Z' fill='%23ff6a1a' stroke='%2317181b' stroke-width='1.8' stroke-linejoin='round'/%3E%3Crect x='18' y='18' width='12' height='12' rx='3' fill='%232f8cff' stroke='%2317181b' stroke-width='1.6'/%3E%3Cpath d='M24 21 V27 M21 24 H27' stroke='%23ecebe4' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") 4 3, copy; /* the email: click to copy */
  --cur-text: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M11 5 Q16 5 16 8.5 Q16 5 21 5 M16 8.5 V23.5 M11 27 Q16 27 16 23.5 Q16 27 21 27' fill='none' stroke='%2317181b' stroke-width='4.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M11 5 Q16 5 16 8.5 Q16 5 21 5 M16 8.5 V23.5 M11 27 Q16 27 16 23.5 Q16 27 21 27' fill='none' stroke='%23ff6a1a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 16 16, text; /* text you can select (project panel, Panoramica, case study) */
  --cur-progress: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M9 4 H23 M9 28 H23 M10.5 4 C10.5 11 21.5 11 21.5 16 S10.5 21 10.5 28 M21.5 4 C21.5 11 10.5 11 10.5 16 S21.5 21 21.5 28' fill='none' stroke='%2317181b' stroke-width='4.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9 4 H23 M9 28 H23 M10.5 4 C10.5 11 21.5 11 21.5 16 S10.5 21 10.5 28 M21.5 4 C21.5 11 10.5 11 10.5 16 S21.5 21 21.5 28' fill='none' stroke='%23ff6a1a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12.6 25.5 L16 21.5 L19.4 25.5 Z' fill='%23ff6a1a'/%3E%3C/svg%3E") 16 16, progress; /* while the site loads */
  --cur-not-allowed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath d='M16 5.5 a10.5 10.5 0 1 0 0.01 0 M8.6 8.6 L23.4 23.4' fill='none' stroke='%2317181b' stroke-width='5.0' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 5.5 a10.5 10.5 0 1 0 0.01 0 M8.6 8.6 L23.4 23.4' fill='none' stroke='%23ff6a1a' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 16 16, not-allowed; /* anything disabled */
}

/* the whole page: arrow; anything you can press: pointer */
html { cursor: var(--cur-default); }
a[href], button, [role="button"], summary, label[for], select, input[type="range"], input[type="checkbox"], input[type="radio"] { cursor: var(--cur-pointer); }
:is(a[href], button, [role="button"]) * { cursor: inherit; }
:is(button, [role="button"])[disabled], [aria-disabled="true"] { cursor: var(--cur-not-allowed); }

/* text that can be selected and copied */
:where(#inspect, .overview, .case) :where(p, li, dd, h1, h2, h3, figcaption, blockquote) { cursor: var(--cur-text); }
input[type="text"], input[type="email"], input[type="search"], textarea { cursor: var(--cur-text); }

/* full-screen picture: the dark area closes it, the picture itself is just looked at */
.lightbox { cursor: var(--cur-zoom-out); }
.lightbox img, .lightbox .lb-bar { cursor: var(--cur-default); }

/* loading screen */
.loader { cursor: var(--cur-progress); }

/* while something is being dragged (map, card, skill) the hand stays closed wherever it goes */
#viewport.dragging, #viewport.dragging *, .is-grabbing, .is-grabbing * { cursor: var(--cur-grabbing) !important; }
