{"id":1194,"date":"2025-10-29T12:24:39","date_gmt":"2025-10-29T12:24:39","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=1194"},"modified":"2025-11-29T21:39:09","modified_gmt":"2025-11-29T21:39:09","slug":"truck-appointment-scheduling","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/truck-appointment-scheduling\/","title":{"rendered":"Truck-Appointment Scheduling"},"content":{"rendered":"\n<!-- ======= BREADCRUMB (FULL WIDTH MATCH + ADMIN LINK + WP SPACING REMOVED) ======= -->\n\n<style>\n\/* Remove WordPress default spacing ONLY for this breadcrumb block *\/\n.breadcrumb-wrapper.wp-block-html {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n\/* Wrapper that matches .pc-container.polished width *\/\n.breadcrumb-container {\n  max-width: 1200px;\n  margin: -110px auto 0 auto;   \/* negative top only *\/\n  padding: 0 20px;\n  box-sizing: border-box;\n  position: relative;\n  z-index: 10;\n}\n\n\/* Styled breadcrumb bar *\/\n.breadcrumb {\n  font-family: Inter, system-ui, sans-serif;\n  font-size: 0.92rem;\n  color: var(--muted, #5b6570);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 6px;\n\n  margin-top: 8px;\n  margin-bottom: 12px;\n\n  padding: 10px 14px;\n  border-radius: 10px;\n  background: linear-gradient(180deg, rgba(10,106,176,0.06), rgba(10,106,176,0.02));\n  box-shadow: 0 2px 6px rgba(10,29,56,0.08);\n  border: 1px solid rgba(10,106,176,0.12);\n}\n\n.breadcrumb a {\n  color: var(--accent, #0a5c94);\n  text-decoration: none;\n  font-weight: 500;\n}\n\n.breadcrumb a:hover {\n  text-decoration: underline;\n}\n\n.breadcrumb .current {\n  color: var(--muted, #5b6570);\n  font-weight: 500;\n}\n<\/style>\n\n<div class=\"breadcrumb-wrapper wp-block-html\">\n<div class=\"breadcrumb-container\">\n  <nav class=\"breadcrumb\">\n\n    <a href=\"https:\/\/aiportcenter.nl\/\">Home<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/\">Port-Call Data Hub<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/#research-section\">Research Problems<\/a>\n    <span>\u203a<\/span>\n\n    <span class=\"current\">Truck Appointment Scheduling<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= TRUCK-APPOINTMENT SCHEDULING (POLISHED - IDENTICAL STYLE TO BERTH-ALLOCATION) ========= -->\n<div class=\"pc-container polished\" id=\"truck-appointment\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Truck Appointment Scheduling overview\">\n    <div class=\"pc-hero-bg\" aria-hidden=\"true\"><\/div>\n    <div class=\"pc-hero-inner\">\n      <div class=\"pc-hero-eyebrow\">Port-Call Optimization Data-Hub<\/div>\n      <h1>Truck-Appointment Scheduling Problem<\/h1>\n      <p class=\"lead\">\n        The <strong>Truck-Appointment Scheduling Problem (TASP)<\/strong> coordinates how trucking companies and container terminals allocate gate time-slots for pickups and drop-offs.\n        Appointments must respect capacity quotas, yard and gate constraints, and real-time arrival uncertainty.\n        Well-designed systems reduce truck waiting, gate congestion, and idling emissions while improving resource utilization.\n      <\/p>\n      <nav class=\"pc-steps-nav\" aria-label=\"Sections\">\n        <a href=\"#focus\" class=\"chip\"><span class=\"num\">1<\/span> Optimization Focus<\/a>\n        <a href=\"#focus\" class=\"chip\"><span class=\"num\">2<\/span> Port-Call Processes<\/a>\n        <a href=\"#assumptions\" class=\"chip\"><span class=\"num\">3<\/span> Main Assumptions<\/a>\n        <a href=\"#studies\" class=\"chip\"><span class=\"num\">4<\/span> Available Datasets<\/a>\n      <\/nav>\n    <\/div>\n  <\/header>\n\n  <aside class=\"pc-toc\" aria-label=\"On-page navigation\">\n    <div class=\"pc-toc-inner\">\n      <div class=\"pc-toc-title\">On this page<\/div>\n      <ol>\n        <li><a href=\"#focus\">Optimization Focus<\/a><\/li>\n        <li><a href=\"#processes\">Port-Call Processes<\/a><\/li>\n        <li><a href=\"#assumptions\">Main Assumptions<\/a><\/li>\n        <li><a href=\"#studies\">Available Datasets<\/a><\/li>\n      <\/ol>\n    <\/div>\n  <\/aside>\n\n  <main class=\"pc-main\">\n\n    <!-- ===== Scheduling Focus ===== -->\n    <section class=\"pc-step card\" id=\"focus\" aria-labelledby=\"title-focus\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-focus\">Optimization Focus<\/h2>\n        <div class=\"sub\">What is optimized, which decisions are made, and what data drive the system.<\/div>\n      <\/header>\n\n      <div class=\"pc-grid two-fixed\">\n        <!-- Row 1 -->\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M12 2a10 10 0 1 1-7.07 17.07L12 12V2Z\"\/><\/svg>\n            <\/span>\n            <h3>Objective<\/h3>\n          <\/div>\n          <ul>\n            <li>Minimize truck turnaround and queueing times at the terminal gate and yard.<\/li>\n            <li>Balance truck arrivals to prevent peaks and congestion at yard blocks.<\/li>\n            <li>Lower fuel consumption and emissions from idling vehicles.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M5 4h14v2H5V4Zm0 6h10v2H5v-2Zm0 6h6v2H5v-2Zm10-8 4-3v12l-4-3V8Z\"\/><\/svg>\n            <\/span>\n            <h3>Decision Variables<\/h3>\n          <\/div>\n          <ul>\n            <li>Assignment of appointment slots to truck requests (import\/export).<\/li>\n            <li>Number of slots per window, overbooking margins, and buffer allocation.<\/li>\n            <li>Dynamic adjustment based on traffic and arrival delays.<\/li>\n          <\/ul>\n        <\/article>\n\n        <!-- Row 2 -->\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M4 5h16v2H4V5Zm0 4h10v2H4V9Zm0 4h6v2H4v-2Zm0 4h16v2H4v-2Z\"\/><\/svg>\n            <\/span>\n            <h3>Constraints<\/h3>\n          <\/div>\n          <ul>\n            <li>Maximum truck quota per time window (gate capacity constraint).<\/li>\n            <li>Lead-time and punctuality enforcement (arrival within slot window).<\/li>\n            <li>Penalties for late\/early arrivals, no-shows, and buffer capacity violations.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M4 6h16v2H4V6Zm0 4h16v8H4v-8Zm2 2v4h12v-4H6Z\"\/><\/svg>\n            <\/span>\n            <h3>Data Sources<\/h3>\n          <\/div>\n          <ul>\n            <li>Terminal gate logs: truck entry, service, and exit times.<\/li>\n            <li>Drayage fleet ETA predictions and no-show statistics.<\/li>\n            <li>Historical container movements, yard availability, and traffic data.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n    <!-- ===== Related Port-Call Processes ===== -->\n    <section class=\"pc-step card\" id=\"processes\" aria-labelledby=\"title-processes\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-processes\">Related Port-Call Processes<\/h2>\n        <div class=\"sub\">Processes related to truck-appointment scheduling \u2014 click a card to open the process page.<\/div>\n      <\/header>\n\n      <!-- Instructional note: clickable cards (subtle pulsing dot) -->\n      <div class=\"pc-research-note\" aria-hidden=\"false\" style=\"margin-top:8px; margin-bottom:8px; display:flex; align-items:center; gap:10px;\">\n        <style>\n          \/* Scoped highlight dot for research note (matches Pre-Arrival) *\/\n          .pc-research-note .highlight-dot{ display:inline-block; width:14px; height:14px; border-radius:50%;\n            background: linear-gradient(90deg,#74c9ff,#2aa7e8); box-shadow:0 2px 6px rgba(42,175,244,0.18); margin-right:10px; vertical-align:middle;\n            animation: pcPulse 2.2s ease-in-out infinite; flex:0 0 auto; }\n          .pc-research-note .instruction{ font-size:.95rem; color:var(--muted); margin:0; }\n          @keyframes pcPulse{ 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.15); } }\n        <\/style>\n        <span class=\"highlight-dot\" aria-hidden=\"true\"><\/span>\n        <div class=\"instruction\">Click any card to open the process page related to the optimization problem.<\/div>\n      <\/div>\n\n      <div class=\"pc-grid two-fixed\" style=\"margin-top:6px;\">\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/terminal-operations\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M5 4h14v2H5V4Zm0 6h10v2H5v-2Zm0 6h6v2H5v-2Zm10-8 4-3v12l-4-3V8Z\"\/><\/svg><\/span>\n            <h3>Terminal Operations<\/h3>\n          <\/div>\n          <ul>\n            <li>Procedures and resource deployment on terminals that influence gate throughput and appointments.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/customs\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 19a1 1 0 0 0 .894.553h16.212A1 1 0 0 0 21 19v-2h-2v-5.382l-7-2.333-7 2.333V17H3v2Zm4-4h10v2H7v-2Zm6-9V4h-2v2H5v2.118l7-2.333 7 2.333V6h-6Z\"\/><\/svg><\/span>\n            <h3>Customs<\/h3>\n          <\/div>\n          <ul>\n            <li>Clearance and documentation steps that affect gate release and container handover timing.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/hinterland-transport\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 6h18v2H3V6Zm0 4h12v2H3v-2Zm0 4h8v2H3v-2Z\"\/><\/svg><\/span>\n            <h3>Hinterland Transport<\/h3>\n          <\/div>\n          <ul>\n            <li>Modal scheduling and terminal-to-hinterland coordination that influence slot timing and throughput.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n\n    <!-- ===== Main Assumptions ===== -->\n    <section class=\"pc-step card\" id=\"assumptions\" aria-labelledby=\"title-assumptions\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\"><h2 id=\"title-assumptions\">Main Assumptions<\/h2><\/header>\n      <ul>\n        <li>Slots are discrete (e.g., 15\u201330 min) and capacity-limited.<\/li>\n        <li>Truck arrival deviations (early\/late) are penalized or buffered.<\/li>\n        <li>Bookings made in advance; emergency trucks managed via walk-in slots.<\/li>\n        <li>Service durations and traffic delays estimated from historical data.<\/li>\n      <\/ul>\n    <\/section>\n\n    <!-- ===== Reference Studies ===== -->\n    <section class=\"pc-step card\" id=\"studies\" aria-labelledby=\"title-studies\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-studies\">Available Datasets<\/h2>\n        <div class=\"sub\">Academic and applied references on truck appointment systems.<\/div>\n      <\/header>\n\n      <h3 style=\"color:#0a5c94; margin-top:8px; font-size:1rem;\">\ud83e\udded Real-World Datasets<\/h3>\n      <div class=\"pc-table-wrap\">\n        <table class=\"pc-table pc-anim-table\" role=\"table\" aria-label=\"Academic studies\">\n          <thead><tr><th>Study<\/th><th>Findings<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/82zzdkrxx8\/1\" target=\"_blank\" rel=\"noopener\">TAS with Impact to Drayage Truck Tours<\/a><\/td>\n              <td>Input instances for the experiments in the TAS study that couples appointments with truck tour planning. Good for integrated TAS\u2013drayage benchmarking.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/2b646hgkt7\/1\" target=\"_blank\" rel=\"noopener\">Truck Appointments per Time Slot<\/a><\/td>\n              <td>Input data used to size truck appointments per time slot (i.e., quota planning). Useful to build appointment-quota instances and validate TAS models with terminal-style parameters.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/yvp2b4rtp3\/1\" target=\"_blank\" rel=\"noopener\">Real Terminal Event Logs<\/a><\/td>\n              <td>The user can derive gate arrivals, yard service, and departure patterns to build TAS instances and validate predictions of no-shows\/late shows.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/developer.apmterminals.com\/api\/8\" target=\"_blank\" rel=\"noopener\">APM Terminals \u2013 Truck Appointments API<\/a><\/td>\n              <td>Production API that connects directly to the truck appointment system at participating APMT terminals. Useful for live\/time-series experiments (requires registration).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/operations.portofvirginia.com\/api-subscriptions\/\" target=\"_blank\" rel=\"noopener\">Port of Virginia \u2013 Events\/API<\/a><\/td>\n              <td>Subscribable operational events (gates\/appointments &#038; statuses) via API. Useful to create rolling TAS datasets from a real port (requires registration).<\/td>\n            <\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n\n      <h3 style=\"color:#0a5c94; margin-top:24px; font-size:1rem;\">\u2699\ufe0f Synthetic Benchmark Instances<\/h3>\n      <div class=\"pc-table-wrap\">\n        <table class=\"pc-table pc-anim-table\" role=\"table\" aria-label=\"Industry cases\">\n          <thead><tr><th>Case<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/wctcbp5z4h\/1\" target=\"_blank\" rel=\"noopener\">BRPAS Instances<\/a><\/td>\n              <td>Synthetic instances with yard relocations and appointment windows. Handy for TAS integrated with yard effects.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/wr2ct4r22f\/2\" target=\"_blank\" rel=\"noopener\">PDPTW Instances<\/a><\/td>\n              <td>300 synthetic time-window instances ranging between 100\u20135000 customers.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/bgbspn8bxm\/1\" target=\"_blank\" rel=\"noopener\">Real-time Truck Scheduling in Cross-Docking<\/a><\/td>\n              <td>Multiple synthetic instances for truck-to-dock scheduling. Useful to test TAS algorithms\u2019 queuing \/ slot-fill logic independent of port specifics.<\/td>\n            <\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n\n      <p class=\"pc-desc\" style=\"font-size:.95rem;color:#5b6570;margin-top:8px;\">\n        Most real TAS datasets are proprietary, but benchmark models consistently demonstrate reductions in average waiting time and CO\u2082 emissions.\n      <\/p>\n    <\/section>\n  <\/main>\n<\/div>\n\n<style>\n\/* ==== Exact Berth-Allocation CSS, renamed to truck-appointment ==== *\/\nh1.entry-title, .entry-title, .page-title { display: none !important; }\n\nhtml { scroll-behavior: smooth; }\n\n#truck-appointment.pc-container.polished{\n  --ink: #0b1220;\n  --muted: #5b6570;\n  --bg: #f6f8fb;\n  --card: #ffffff;\n  --accent: #0a5c94;\n  --accent-2: #7ccdf0;\n  --radius: 14px;\n  --shadow: 0 8px 28px rgba(10, 29, 56, 0.09);\n  --gap: 18px;\n  --ring: 0 0 0 3px rgba(43,176,237,.25);\n  position: relative;\n  isolation: isolate;\n  width: 100%;\n  max-width: 1200px;\n  margin: -15px;\n  padding: 20px;\n  box-sizing: border-box;\n  font-family: Inter, system-ui, Segoe UI, Roboto, Arial, sans-serif;\n  color: var(--ink);\n  background: transparent;\n}\n\n\/* HERO *\/\n#truck-appointment .pc-hero { position: relative; overflow: hidden; border-radius: calc(var(--radius) + 4px); padding: 28px 28px 20px; box-shadow: var(--shadow); background: linear-gradient(180deg, rgba(10,106,176,.03), rgba(10,106,176,.005)); }\n#truck-appointment .pc-hero-bg::before { content:\"\"; position:absolute; inset:auto -10% -40% -10%; height:180px; background: radial-gradient(60% 80% at 50% 0%, rgba(43,176,237,.08), transparent 70%); filter: blur(40px); pointer-events:none; }\n#truck-appointment .pc-hero-inner{ position: relative; z-index: 1; }\n#truck-appointment .pc-hero-eyebrow{ font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent); margin-bottom:6px; font-weight:600; }\n#truck-appointment .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n#truck-appointment .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n#truck-appointment .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n#truck-appointment .chip{ display:inline-flex; align-items:center; gap:.5rem; padding:.48rem .72rem; border-radius:999px; background: #fff; color: var(--ink); box-shadow: var(--shadow); text-decoration:none; transition: transform .2s ease, box-shadow .2s ease; }\n#truck-appointment .chip .num{ display:inline-grid; place-items:center; width:24px; height:24px; border-radius:50%; font-size:.9rem; font-weight:700; color:#fff; background: linear-gradient(135deg, var(--accent), var(--accent-2)); }\n#truck-appointment .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n\/* TOC *\/\n#truck-appointment .pc-toc{ position: sticky; top: 140px; margin: 18px 0; z-index: 1; align-self: start; }\n#truck-appointment .pc-toc-inner{ border-radius: var(--radius); background: #ffffff; box-shadow: var(--shadow); padding: 14px 16px; border: 1px solid rgba(10,106,176,.10); }\n#truck-appointment .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n#truck-appointment .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n#truck-appointment .pc-toc a{ color: var(--ink); text-decoration:none; padding:6px 8px; border-radius:8px; display:block; transition:background .2s ease, box-shadow .2s ease; }\n#truck-appointment .pc-toc a:hover{ background: rgba(43,176,237,.08); box-shadow: var(--ring); }\n\n\/* CARDS *\/\n#truck-appointment .card{ position: relative; background: var(--card); border-radius: var(--radius); padding: 18px; margin: 16px 0; box-shadow: var(--shadow); }\n#truck-appointment .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n#truck-appointment .card-head .sub{ color: var(--muted); font-size:.95rem; }\n#truck-appointment .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n#truck-appointment .card-accent{ position:absolute; inset:0; border-radius: inherit; padding:1px; background: linear-gradient(135deg, rgba(10,106,176,.28), rgba(43,176,237,.28)); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events:none; opacity:.7; }\n#truck-appointment .pc-grid.two-fixed{ display:grid; gap: 14px; margin-top: 10px; grid-template-columns: 1fr; }\n@media (min-width: 900px){ #truck-appointment .pc-grid.two-fixed{ grid-template-columns: repeat(2, minmax(0,1fr)); } }\n#truck-appointment .pc-card{ background:#fff; border:1px solid rgba(10,106,176,.10); border-radius: 12px; padding: 14px; transition: transform .2s ease, box-shadow .2s ease; box-shadow: 0 8px 22px rgba(10,29,56,.06); }\n#truck-appointment .pc-card:hover{ transform: translateY(-3px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n#truck-appointment .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n#truck-appointment .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n#truck-appointment .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n#truck-appointment .pc-icon{ display:inline-grid; place-items:center; width:28px; height:28px; border-radius:8px; background: linear-gradient(135deg, rgba(10,106,176,.15), rgba(43,176,237,.15)); color: var(--accent); flex-shrink:0; }\n#truck-appointment .pc-icon svg{ display:block; }\n\n@media (min-width: 900px){\n  #truck-appointment.pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  #truck-appointment .pc-hero{ grid-column: 1 \/ -1; }\n  #truck-appointment .pc-toc{ grid-column: 1; align-self:start; }\n  #truck-appointment .pc-main{ grid-column: 2; min-width:0; }\n}\n\n\/* TABLES *\/\n#truck-appointment .pc-table-wrap{ margin-top: 8px; }\n#truck-appointment .pc-table{ width: 100%; border-collapse: collapse; background: #fff; border: 1px solid rgba(10,106,176,.25); table-layout: fixed; transition: transform .16s ease, box-shadow .16s ease; will-change: transform; }\n#truck-appointment .pc-table:hover, #truck-appointment .pc-table:focus-within{ transform: translateY(-3px); box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12); }\n#truck-appointment .pc-table th, #truck-appointment .pc-table td{ border: 1px solid rgba(10,106,176,.2); padding: 10px 12px; vertical-align: top; word-wrap: break-word; }\n#truck-appointment .pc-table thead th{ background: rgba(215,236,251,0.55); color: #000; font-weight: 700; text-align: center; }\n#truck-appointment .pc-table tbody td:first-child{ color: #084EAE; }\n#truck-appointment .pc-table tbody td:first-child a{ color:#084EAE; text-decoration:none; }\n#truck-appointment .pc-table tbody td:first-child a:hover{ text-decoration:underline; }\n#truck-appointment .pc-table tbody td:nth-child(2){ color: var(--muted); }\n\n#truck-appointment a{ color: var(--accent); text-decoration: none; }\n#truck-appointment a:hover{ text-decoration: underline; }\n\n#truck-appointment :is(a,button,[tabindex]){ outline: none; }\n#truck-appointment :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n\n@media (prefers-reduced-motion: reduce){\n  #truck-appointment .pc-table{ transition: none; }\n  #truck-appointment .pc-table:hover, #truck-appointment .pc-table:focus-within{ transform: none; box-shadow: none; }\n}\n<\/style>\n<script>\n  (function(){\n    const researchLinks = [\n      { title: 'Terminal Operations', url: 'https:\/\/aiportcenter.nl\/index.php\/terminal-operations\/' },\n      { title: 'Customs', url: 'https:\/\/aiportcenter.nl\/index.php\/customs\/' },\n      { title: 'Hinterland Transport', url: 'https:\/\/aiportcenter.nl\/index.php\/hinterland-transport\/' }\n    ];\n\n    const linksByIndex = [];\n    const section = document.getElementById('processes');\n    if(!section) return;\n    const cards = Array.from(section.querySelectorAll('.pc-card'));\n    cards.forEach((card, idx) => {\n      const h3 = card.querySelector('h3');\n      const title = h3 ? h3.textContent.trim() : null;\n      const dataUrl = card.dataset && (card.dataset.url || card.dataset.href || card.dataset.link);\n      let mapping = null;\n      if(dataUrl) mapping = { url: dataUrl };\n      if(!mapping) mapping = researchLinks.find(r => r.title === title && r.url);\n      if(!mapping && linksByIndex[idx]) mapping = { url: linksByIndex[idx] };\n\n      if(mapping && mapping.url){\n        card.tabIndex = 0;\n        card.setAttribute('role','link');\n        card.style.cursor = 'pointer';\n\n        card.addEventListener('click', () => window.open(mapping.url, '_blank'));\n        card.addEventListener('keydown', (ev) => { if(ev.key === 'Enter' || ev.key === ' '){ ev.preventDefault(); window.open(mapping.url, '_blank'); } });\n\n        const anchor = document.createElement('a');\n        anchor.href = mapping.url;\n        anchor.target = '_blank';\n        anchor.rel = 'noopener noreferrer';\n        anchor.setAttribute('aria-hidden','true');\n        anchor.style.position = 'absolute'; anchor.style.inset = '0'; anchor.style.zIndex = '2'; anchor.style.background = 'transparent'; anchor.style.textDecoration = 'none';\n        const pos = getComputedStyle(card).position;\n        if(!pos || pos === 'static') card.style.position = 'relative';\n        card.appendChild(anchor);\n      }\n    });\n\n    \/\/ Ensure TOC shows processes item\n    const toc = document.querySelector('#truck-appointment .pc-toc ol');\n    if(toc){\n      const existing = toc.querySelector('a[href=\"#processes\"]');\n      if(!existing){\n        const li = document.createElement('li');\n        const a = document.createElement('a'); a.href = '#processes'; a.textContent = 'Port-Call Processes';\n        li.appendChild(a);\n        const focusItem = toc.querySelector('a[href=\"#focus\"]');\n        if(focusItem && focusItem.parentNode) toc.insertBefore(li, focusItem.parentNode.nextSibling);\n        else toc.appendChild(li);\n      } else {\n        existing.textContent = 'Port-Call Processes';\n      }\n    }\n  })();\n<\/script>\n<!-- ========= \/END TRUCK-APPOINTMENT SCHEDULING ========= -->\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Truck Appointment Scheduling Port-Call Optimization Data-Hub Truck-Appointment Scheduling Problem The Truck-Appointment Scheduling Problem (TASP) coordinates how trucking companies and container terminals allocate gate time-slots for pickups and drop-offs. Appointments must respect capacity quotas, yard and gate constraints, and real-time arrival uncertainty. Well-designed systems reduce truck waiting, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-1194","page","type-page","status-publish","hentry"],"blocksy_meta":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"peterwenzel","author_link":"https:\/\/aiportcenter.nl\/index.php\/author\/peterwenzel\/"},"uagb_comment_info":0,"uagb_excerpt":"Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Truck Appointment Scheduling Port-Call Optimization Data-Hub Truck-Appointment Scheduling Problem The Truck-Appointment Scheduling Problem (TASP) coordinates how trucking companies and container terminals allocate gate time-slots for pickups and drop-offs. Appointments must respect capacity quotas, yard and gate constraints, and real-time arrival uncertainty. Well-designed systems reduce truck waiting,&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/comments?post=1194"}],"version-history":[{"count":21,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1194\/revisions"}],"predecessor-version":[{"id":1640,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1194\/revisions\/1640"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}