PageSourceSearch

https://www.alphalaw.co.kr/

html alphalaw.co.kr collected 2026-09-24 11:07:44 UTC 95,862 bytes, 1,552 lines download raw bytes

1<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" data-bs-theme="auto">
3<head>
4    <!-- Google Tag Manager -->
5    
5<script>
vendor: 347 bytes, lines 5-9
5(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
6    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
7    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
8    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
9    })(window,document,'script','dataLayer','
9GTM-N6TM3J5X
vendor: 3 bytes, line 9
9');
9</script>
9
10    <!-- End Google Tag Manager -->
11   <meta http-equiv="Content-Type" content="text/html" charset="utf-8">
12	 <meta name="viewport" content="width=device-width, initial-scale=1">
13	
13<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
13
14    
14<script src="https://www.alphalaw.co.kr/assets/js/5.3/bootstrap.bundle.min.js" language="javascript" type="text/javascript" /></script>
14
15<link href="https://www.alphalaw.co.kr/assets/css/5.3/bootstrap.min.css" rel="stylesheet" type="text/css" />
16<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" /><link href="https://www.alphalaw.co.kr/assets/css/common3.css?v=1758823511" rel="stylesheet" type="text/css" />
17	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3">
18
19    <!-- Webfont: Noto Serif KR for question text -->
20    <link rel="preconnect" href="https://fonts.googleapis.com">
21    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
22    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+KR:wght@400;600;700&display=swap" rel="stylesheet">
23	
24	
24<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/masonry.pkgd.min.js" integrity="sha384-GNFwBvfVxBkLMJpYMOABq3c+d3KnQxudP/mGPkzpZSTYykLBNsZEnG2D9G/X/+7D" crossorigin="anonymous" async></script>
24     
25    <!-- Swiper JS (CDN) -->
26    
26<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
26
27    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
28    <link rel="icon" type="image/png" sizes="192x192" href="/android-chrome-192x192.png">
29    <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
30    <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
31    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
32    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
33    <link rel="shortcut icon" href="/favicon.ico">
34    <link rel="manifest" href="/site.webmanifest">
35	<link rel="canonical" href="https://www.alphalaw.co.kr" />
36            <meta name="description" content="민소법·형소법·행정법·민법·상법·형법·헌법 OX 어플로 기출문제를 빠르게 학습하세요. 기출판례 사이트에서 최신판례를 중심으로 새로운 쟁점을 확인하고 대비하세요.">	
37        <!-- Open Graph -->
38    <meta property="og:title" content="알파로 | 법학 OX 앱으로 핵심 정리, 기출판례로 논점 정리">
39    <meta property="og:description" content="민소법·형소법·행정법·민법·상법·형법·헌법 OX 어플로 기출문제를 빠르게 학습하세요. 기출판례 사이트에서 최신판례를 중심으로 새로운 쟁점을 확인하고 대비하세요.">
40    <meta property="og:url" content="https://www.alphalaw.co.kr">
41    <meta property="og:site_name" content="알파로">
42    <meta property="og:type" content="website">
43    <meta property="og:locale" content="ko_KR">
44    <meta property="og:image" content="https://www.alphalaw.co.kr/assets/img/app_icon_profile_title.png">
45    <!-- Twitter Cards -->
46    <meta name="twitter:card" content="summary_large_image">
47    <meta name="twitter:title" content="알파로 | 법학 OX 앱으로 핵심 정리, 기출판례로 논점 정리">
48    <meta name="twitter:description" content="민소법·형소법·행정법·민법·상법·형법·헌법 OX 어플로 기출문제를 빠르게 학습하세요. 기출판례 사이트에서 최신판례를 중심으로 새로운 쟁점을 확인하고 대비하세요.">
49    <meta name="twitter:image" content="https://www.alphalaw.co.kr/assets/img/app_icon_profile_title.png">
50    <title>알파로 | 법학 OX 앱으로 핵심 정리, 기출판례로 논점 정리</title>
51</head>
52<body>
53    <!-- Google Tag Manager (noscript) -->
vendor: 73 bytes, lines 53-54
53
54    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
54GTM-N6TM3J5X
vendor: 93 bytes, lines 54-56
54"
55    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
56    
56<!-- End Google Tag Manager (noscript) -->
57<header class="navbar navbar-expand-lg al-navbar sticky-top">
58  <div class="container-xxl al-gutter">
59    <span class="navbar-brand">
60      <a href="/"><b>알파로</b></a>
61          </span>
62
63    
64    
65    
66        <div class="al-header-actions d-flex align-items-center d-md-none">
67            <a id="alHeaderMobileDownload" href="#" class="al-header-dl-btn" role="button" data-bs-toggle="modal" data-bs-target="#iDownloadModal"><span class="dl-full">OX 앱 다운로드</span><span class="dl-short">OX 앱 받기</span><span class="dl-xshort">OX 앱</span></a>
68    </div>
69
70    
71
72	<div  class="navbar-nav flex-row flex-wrap ms-md-auto offcanvas-lg">
73            
74      <div class="al-download">
75        <a id="iAppDownload" class="al-btn-download" href="#" data-bs-toggle="modal" data-bs-target="#iDownloadModal" role="button">
76          <span style="letter-spacing:.02em;"><b>OX</b> 어플 다운로드</span>
77        </a>
78      </div>
79
80
81	</div>
82
83  </div>
84</header>
85<script type="text/javascript">
86  $(document).ready(function(){
87    $(".btn-course-app-download").click(function() {
88      $("#iDownloadModal").find(".modal-dialog").addClass("modal-dialog-centered");
89    });
90  // Download button handling is centralized in footer.js
91
92    // Desktop coverflow: interactive focus/rotation (original)
93    function initDesktopCoverflow() {
94      if (!window.matchMedia('(min-width: 576px)').matches) return;
95      var $stage = $(".al-coverflow__stage");
96      if (!$stage.length) return;
97      var $items = $stage.find('.al-coverflow__item');
98      var n = $items.length;
99      if (!n) return;
100      var container = document.querySelector('.al-coverflow');
101      var styles = container ? getComputedStyle(container) : null;
102      var overlap = styles ? parseFloat(styles.getPropertyValue('--overlap')) || 24 : 24;
103      var tilt = styles ? parseFloat(styles.getPropertyValue('--tilt')) || 14 : 14;
104      var depth = styles ? parseFloat(styles.getPropertyValue('--depth')) || 90 : 90;
105      var arcY = styles ? parseFloat(styles.getPropertyValue('--arc-y')) || 16 : 16;
106      var active = Math.min(3, n - 1); // default focus (4th if exists)
107      var activated = false; // until user clicks, keep CSS-driven default
108
109      function scaleFor(d){ if (d<=0) return 1; if (d===1) return 0.94; if (d===2) return 0.88; return 0.84; }
110      function zFor(d){ return 100 - d; }
111      function transformFor(i){
112        var k = i - active; var d = Math.abs(k); var s = Math.sign(k);
113        var x = k * overlap;
114        var y = d * (arcY*0.5);
115        var rz = -depth; // constant depth for equal visual overlap
116        var ry = s * tilt;
117        var sc = scaleFor(d);
118        return {
119          transform: 'translateX(calc(-50% + '+x+'px)) translateY('+y+'px) rotateY('+ry+'deg) translateZ('+rz+'px) scale('+sc+')',
120          zIndex: zFor(d)
121        };
122      }
123
124      function apply() {
125        // Keep CSS-driven transforms; only control brightness via class on center slot
126        $items.removeClass('is-active');
127        $items.eq(active).addClass('is-active');
128      }
129
130      // Initial: mark active and apply explicit transforms
131      $items.eq(active).addClass('is-active');
132      try { apply(); } catch(e){}
133
134      // Add thin center-biased hit zones (30px) for slots 3 and 5 (0-based 2,4)
135      function createCenterHitzones(widthPx){
136        if (!widthPx) widthPx = 30;
137        var isDesktop = window.matchMedia('(min-width: 576px)').matches;
138        // clear previous
139        $stage.find('.al-hit-center').remove();
140        if (!isDesktop) return;
141        var stageEl = $stage.get(0);
142        var srect = stageEl.getBoundingClientRect();
143        // Place two slim bars centered around the stage center line
144        var centerX = srect.width / 2;
145        function addZone(leftPx, targetIdx){
146          var zone = document.createElement('div');
147          zone.className = 'al-hit-center';
148          zone.style.position = 'absolute';
149          zone.style.top = '0px';
150          zone.style.left = leftPx + 'px';
151          zone.style.width = widthPx + 'px';
152          zone.style.height = srect.height + 'px';
153          zone.style.background = 'transparent';
154          zone.style.pointerEvents = 'auto';
155          zone.style.zIndex = 1000;
156          zone.addEventListener('mouseenter', function(){
157            $items.removeClass('is-hovering');
158            $items.eq(targetIdx).addClass('is-hovering');
159          });
160          zone.addEventListener('mouseleave', function(){
161            $items.eq(targetIdx).removeClass('is-hovering');
162          });
163          zone.addEventListener('click', function(ev){
164            // If the click is inside the true center card, treat as center click (no move)
165            var cx = ev.clientX, cy = ev.clientY;
166            var centerEl = $items.get(active);
167            if (centerEl) {
168              var cr = centerEl.getBoundingClientRect();
169              if (cx >= cr.left && cx <= cr.right && cy >= cr.top && cy <= cr.bottom) {
170                $items.eq(active).trigger('click');
171                return;
172              }
173            }
174            ev.preventDefault(); ev.stopPropagation();
175            $items.eq(targetIdx).trigger('click');
176          });
177          stageEl.appendChild(zone);
178        }
179        // Left of center targets slot 3 (index 2), right of center targets slot 5 (index 4)
180        addZone(centerX - widthPx, 2);
181        addZone(centerX, 4);
182      }
183      createCenterHitzones(100);
184      $(window).on('resize scroll', function(){ createCenterHitzones(100); });
185
186      // Ensure no stray hit zones remain
187      $stage.find('.al-hit').remove();
188
189      // Rotate sources one slot CCW (images move right)
190      function rotateOnceCCW() {
191        var $imgs = $stage.find('.al-coverflow__item img');
192        if ($imgs.length < 2) return;
193        var lastIdx = $imgs.length - 1;
194        var last = {
195          src: $imgs.eq(lastIdx).attr('src'),
196          srcset: $imgs.eq(lastIdx).attr('srcset'),
197          alt: $imgs.eq(lastIdx).attr('alt')
198        };
199        for (var i = lastIdx; i >= 1; i--) {
200          var prevSrc = $imgs.eq(i-1).attr('src');
201          var prevSrcset = $imgs.eq(i-1).attr('srcset');
202          var prevAlt = $imgs.eq(i-1).attr('alt');
203          $imgs.eq(i).attr('src', prevSrc);
204          if (typeof prevSrcset !== 'undefined') $imgs.eq(i).attr('srcset', prevSrcset); else $imgs.eq(i).removeAttr('srcset');
205          if (typeof prevAlt !== 'undefined') $imgs.eq(i).attr('alt', prevAlt);
206        }
207        $imgs.eq(0).attr('src', last.src);
208        if (typeof last.srcset !== 'undefined') $imgs.eq(0).attr('srcset', last.srcset); else $imgs.eq(0).removeAttr('srcset');
209        if (typeof last.alt !== 'undefined') $imgs.eq(0).attr('alt', last.alt);
210      }
211
212      // Rotate sources one slot CW (images move left)
213      function rotateOnceCW() {
214        var $imgs = $stage.find('.al-coverflow__item img');
215        if ($imgs.length < 2) return;
216        var first = {
217          src: $imgs.eq(0).attr('src'),
218          srcset: $imgs.eq(0).attr('srcset'),
219          alt: $imgs.eq(0).attr('alt')
220        };
221        var lastIdx = $imgs.length - 1;
222        for (var i = 0; i < lastIdx; i++) {
223          var nextSrc = $imgs.eq(i+1).attr('src');
224          var nextSrcset = $imgs.eq(i+1).attr('srcset');
225          var nextAlt = $imgs.eq(i+1).attr('alt');
226          $imgs.eq(i).attr('src', nextSrc);
227          if (typeof nextSrcset !== 'undefined') $imgs.eq(i).attr('srcset', nextSrcset); else $imgs.eq(i).removeAttr('srcset');
228          if (typeof nextAlt !== 'undefined') $imgs.eq(i).attr('alt', nextAlt);
229        }
230        $imgs.eq(lastIdx).attr('src', first.src);
231        if (typeof first.srcset !== 'undefined') $imgs.eq(lastIdx).attr('srcset', first.srcset); else $imgs.eq(lastIdx).removeAttr('srcset');
232        if (typeof first.alt !== 'undefined') $imgs.eq(lastIdx).attr('alt', first.alt);
233      }
234
235      // Per-card click only: rotate fixed steps so clicked slot becomes center
236      var rotating = false;
237
238      // Per-card click handler
239      $items.off('click').on('click', function(){
240        if (!window.matchMedia('(min-width: 576px)').matches) return;
241        if (rotating) return;
242        var idx = $items.index(this);
243        var center = active; // 3
244        if (idx === center) return;
245        var steps = (idx < center) ? (center - idx) : (idx - center);
246        var dir = (idx < center) ? 'CCW' : 'CW';
247        rotating = true; activated = true;
248        (function doStep(i){
249          if (dir === 'CCW') rotateOnceCCW(); else rotateOnceCW();
250          if (i+1 < steps) { setTimeout(function(){ doStep(i+1); }, 90); }
251          else { rotating = false; apply(); }
252        })(0);
253      });
254
255      // Re-apply on resize breakpoint changes
256      $(window).on('resize', function(){
257        if (window.matchMedia('(min-width: 576px)').matches) apply();
258      });
259    }
260
261    initDesktopCoverflow();
262    $(window).on('resize', initDesktopCoverflow);
263
264    // Apps list (desktop): 2D overlapped accordion-style, no movement, first front
265    var isMobileSwiperPref = window.matchMedia('(max-width: 1024px)').matches;
266    function setupStaticOverlap() {
267      var $cont = $('.apps-swiper');
268      if (!$cont.length) return;
269      $cont.removeClass('no-swiper').addClass('static-overlap');
270      var $wrapper = $cont.find('.swiper-wrapper');
271      var $slides = $wrapper.children('.swiper-slide');
272      var currentFront = $slides.length ? ($slides.length - 1) : 0; // default: last card on top
273      var overlapAbs = 120;
274      function arrange() {
275        var n = $slides.length; if (!n) return;
276        var contW = $cont.innerWidth();
277        var slideW = $slides.first().outerWidth();
278        var totalW = n * slideW;
279        var overlap = 120; // default overlap
280        if (totalW > contW && n > 1) {
281          var needed = totalW - contW;
282          overlap = Math.max(20, Math.ceil(needed / (n - 1))); // at least 20px overlap
283        }
284        // Apply via CSS var
285        overlapAbs = overlap;
286        $cont.get(0).style.setProperty('--overlap', '-' + overlap + 'px');
287        applyFront(currentFront);
288        // Fix card height for desktop to accommodate up to 14 exam lines
289        setTimeout(function(){
290          var fixedMin = 505; // px
291          $cont.find('.swiper-slide .card').css('min-height', fixedMin + 'px');
292        }, 0);
293      }
294      function applyFront(frontIdx){
295        currentFront = frontIdx;
296        $slides.each(function(i, el){
297          var t = '';
298          if (i === frontIdx) { t = 'translateY(-6px)'; }
299          if (i > frontIdx) { t = (t? t + ' ' : '') + 'translateX(' + overlapAbs + 'px)'; }
300          el.style.transform = t;
301        });
302        $slides.removeClass('is-front').eq(frontIdx).addClass('is-front');
303      }
304      // 3D hover tilt per card on desktop
305      function initCardTilt(){
306        var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
307        var isDesktop = window.matchMedia('(min-width: 1025px)').matches;
308        var maxDeg = 15; // max tilt degrees
309        var $cards = $slides.find('.card');
310        $cards.each(function(){
311          var el = this;
312          $(el).off('.tilt');
313          // reset
314          el.style.setProperty('--tiltX', '0deg');
315          el.style.setProperty('--tiltY', '0deg');
316          if (!isDesktop || reduce) return;
317          $(el).on('mousemove.tilt', function(ev){
318            var r = el.getBoundingClientRect();
319            var px = (ev.clientX - r.left) / r.width - 0.5;
320            var py = (ev.clientY - r.top) / r.height - 0.5;
321            var rx = (-py * maxDeg).toFixed(2) + 'deg';
322            var ry = ( px * maxDeg).toFixed(2) + 'deg';
323            el.style.setProperty('--tiltX', rx);
324            el.style.setProperty('--tiltY', ry);
325          }).on('mouseleave.tilt', function(){
326            el.style.setProperty('--tiltX', '0deg');
327            el.style.setProperty('--tiltY', '0deg');
328          });
329        });
330      }
331      arrange();
332      initCardTilt();
333      $(window).on('resize', function(){ arrange(); initCardTilt(); });
334      // Front highlight + push right block like accordion
335      $slides.off('click').on('click', function(){ applyFront($(this).index()); });
336    }
337    if (isMobileSwiperPref) {
338      // Mobile uses accordion section; ensure swiper area doesn't initialize
339      $('.apps-swiper').addClass('no-swiper');
340    } else {
341      setupStaticOverlap();
342    }
343
344    // Mobile coverflow: start with the center (4th) image at the left edge
345    function alignMobileCoverflow() {
346      if (window.matchMedia('(max-width: 575.98px)').matches) {
347        var $stage = $(".al-coverflow__stage");
348        if ($stage.length) {
349          var $items = $stage.find('.al-coverflow__item');
350          if ($items.length >= 4) {
351            var stageEl = $stage.get(0);
352            var targetEl = $items.get(3); // 0-based index: 3 = 4th (center on desktop)
353            var desired = (targetEl.offsetLeft || 0) - (stageEl.clientWidth - targetEl.clientWidth) / 2;
354            if (desired < 0) desired = 0;
355            $stage.scrollLeft(desired);
356          }
357        }
358      }
359    }
360    // Initial alignment after layout/imageload
361    setTimeout(alignMobileCoverflow, 0);
362    $(window).on('load resize', alignMobileCoverflow);
363
364    // Mobile accordion: show only one store button based on OS, align right
365    function detectOS(){
366      var ua = navigator.userAgent || '';
367      var iOS = /iPhone|iPad|iPod/i.test(ua) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
368      var android = /Android/i.test(ua);
369      return iOS ? 'ios' : (android ? 'android' : 'other');
370    }
371    function applyMobileDownloadButtons(){
372      if (!window.matchMedia('(max-width: 1024px)').matches) return;
373      var os = detectOS();
374      var $acc = $('.apps-accordion-xs');
375      if (!$acc.length) return;
376      $acc.find('.apps-xs-downloads').each(function(){
377        var $box = $(this);
378        var $gp = $box.find('.btn-googleplay');
379        var $as = $box.find('.btn-appstore');
380        // reset
381        $gp.show().text('Google Play');
382        $as.show().text('App Store');
383        if (os === 'ios') { $gp.hide(); $as.text('앱 다운로드'); }
384        else if (os === 'android') { $as.hide(); $gp.text('앱 다운로드'); }
385        // align to right
386        $box.addClass('justify-content-end');
387      });
388    }
389    applyMobileDownloadButtons();
390    $(window).on('resize', applyMobileDownloadButtons);
391
392    // Note box uses fixed width via CSS; JS sizing removed
393  });
394</script>
394
395
396<!-- SEO: Structured data for WebSite and Organization -->
397<script type="application/ld+json">
398{
399  "@context": "https://schema.org",
400  "@type": "WebSite",
401  "name": "알파로",
402  "url": "https://www.alphalaw.co.kr/",
403  "potentialAction": {
404    "@type": "SearchAction",
405    "target": "https://www.alphalaw.co.kr/case/question/{search_term_string}",
406    "query-input": "required name=search_term_string"
407  }
408}
409</script>
vendor: 1 bytes, line 409
409
410<script type="application/ld+json">
411{
412  "@context": "https://schema.org",
413  "@type": "Organization",
414  "name": "알파로",
415  "url": "https://www.alphalaw.co.kr/",
416  "logo": "https://www.alphalaw.co.kr/favicon.ico",
417  "sameAs": [
418    "https://apps.apple.com/kr/developer/seungyoung-hong/id1355483812?see-all=i-phone-apps",
419    "https://play.google.com/store/apps/collection/cluster?gsr=SltqGG1MOHkzaHV0QXhmREhKMEdHWDhwa3c9PbICPgohCh1rci5wb25zdGVyLmFscGhhbGF3LmNpdmlscHJvYxAHEhcIARITNzk3MTA4OTQ3MDIyMTQ0ODc3NBgA:S:ANO1ljL7EZc"
420  ]
421}
422</script>
422
423
424<style>
425  /* Scoped hero typography and spacing */
426  .al-hero { margin-top: 2rem; padding-top: 2.333rem; padding-bottom: 2.25rem; position: relative; overflow: hidden; }
427  /* Background gray sphere gradient */
428  .al-hero::before {
429    content: "";
430    position: absolute;
431    inset: -20% -5% -30% -5%;
432    background: radial-gradient(ellipse at 70% 35%,
433      rgba(210,214,220,.65) 0%,
434      rgba(226,230,236,.45) 28%,
435      rgba(238,241,246,.25) 52%,
436      rgba(246,248,252,.12) 66%,
437      rgba(255,255,255,0) 78%
438    );
439    filter: blur(2px);
440    z-index: 0;
441    pointer-events: none;
442  }
443  .al-hero .row { position: relative; z-index: 1; }
444  /* Mobile: make background gradient darker toward bottom */
445  @media (max-width: 575.98px) {
446    .al-hero { margin-top: 0 !important; }
447    .al-hero::before {
448      inset: -5% 0 -20% 0;
449      background: linear-gradient(to bottom,
450        rgba(195,199,206,.75) 0%,
451        rgba(210,214,220,.60) 30%,
452        rgba(226,230,236,.40) 60%,
453        rgba(238,241,246,.20) 80%,
454        rgba(255,255,255,0) 100%
455      );
456      filter: blur(270px); /* make it much softer on mobile */
457      will-change: filter;
458    }
459  }
460  .al-hero__content { max-width: 760px; margin-inline: auto; }
461  .al-hero__title {
462    font-weight: 800;
463    letter-spacing: -0.01em; /* subtle tightening for Korean */
464    line-height: 1.15;
465    margin-top: 7px; /* nudge down the title */
466    margin-bottom: 0.75rem;
467  }
468  @media (max-width: 991.98px) { .al-hero__title { font-size: 2.25rem; } }
469  @media (min-width: 992px)    { .al-hero__title { font-size: 3rem;    } }
470  .al-hero__subtitle {
471    font-size: 1.0625rem; /* ~17px for long KR copy */
472    letter-spacing: 0.005em;
473    line-height: 1.75;
474    color: var(--bs-secondary-color);
475  }
476  /* Mobile: slightly tighter subtitle leading */
477  @media (max-width: 575.98px) {
478    .al-hero__subtitle { line-height: 1.55; }
479  }
480  .al-hero__actions .btn { letter-spacing: 0.02em; }
481  .al-hero__actions .btn-lg { padding-inline: 1.25rem; }
482  .al-hero__divider { border-color: rgba(0,0,0,.06) !important; }
483  .al-hero__logo { width: 150px; height: auto; border-radius: 14px; box-shadow: 0 6px 14px rgba(0,0,0,.15); margin-bottom: 0; display: block; }
484  .al-sec-title { font-weight: 800; }
485  .al-hero__list { font-size: .9rem; line-height: 1.6; color: var(--bs-secondary-color); padding-left: 1.1rem; margin-bottom: 1.25rem; }
486  .al-hero__list li { margin-bottom: .25rem; }
487  /* Screenshot: simple image, sized to match text */
488  .al-shot { width: 100%; max-width: 180px; margin: 0 auto; }
489  @media (min-width: 992px) { .al-shot { max-width: 180px; } }
490  @media (min-width: 1200px) { .al-shot { max-width: 180px; } }
491  .al-shot-img { width: 100%; height: auto; border-radius: 16px; box-shadow: 0 12px 28px rgba(0,0,0,.16); display: block; }
492  /* Apps Swiper sizing */
493  .apps-swiper { padding: 24px 32px 10px 20px; width: 100%; overflow: visible; }
494  /* Desktop: clip horizontal overflow so last card doesn't spill out */
495  @media (min-width: 1025px) {
496    .apps-swiper-lg .apps-swiper { overflow-x: hidden; overflow-y: visible; }
497  }
498  .apps-swiper .swiper-wrapper { transform: none !important; }
499  .apps-swiper .swiper-slide { width: 280px; position: relative; z-index: 1; margin-right: var(--overlap, -120px); transition: transform .25s ease, box-shadow .25s ease; }
500  .apps-swiper .swiper-slide:hover { z-index: 6; }
501  .apps-swiper .swiper-slide.is-front { z-index: 5; transform: translateY(-6px); }
502  /* Desktop fixed card height assuming up to 14 exam lines */
503  @media (min-width: 1025px) {
504    .apps-swiper-lg .card { min-height: 505px; }
505  }
506
507  /* Volumetric “gold-bar” card styling (desktop cards) */
508  @media (min-width: 1025px) {
509    /* Add perspective on slide so card 3D rotate feels natural */
510    .apps-swiper-lg .swiper-slide { perspective: 800px; isolation: isolate; }
511    .apps-swiper-lg .card {
512      position: relative;
513      border: none;
514      border-radius: 18px;
515      overflow: hidden;
516      background-clip: padding-box;
517      /* Deep drop + subtle bevel */
518      box-shadow:
519        0 16px 30px rgba(0,0,0,.22),
520        0 6px 14px rgba(0,0,0,.12),
521        inset 0 1px 0 rgba(255,255,255,.35),
522        inset 0 -3px 8px rgba(0,0,0,.12);
523      transform-style: preserve-3d;
524      transform: translateZ(0) rotateX(var(--tiltX, 0deg)) rotateY(var(--tiltY, 0deg));
525      transition: transform .18s ease-out, box-shadow .25s ease, filter .25s ease;
526    }
527    /* More generous padding so content sits more centrally (legacy body) */
528    .apps-swiper-lg .card .card-body { padding: 1.4rem 1.25rem 1.6rem; }
529    /* Split desktop card: colored head + white main */
530    .apps-swiper-lg .card { display: flex; flex-direction: column; }
531    .apps-swiper-lg .card .al-card-head {
532      position: relative;
533      padding: 1.1rem 1.25rem .65rem;
534      border-top-left-radius: 18px; border-top-right-radius: 18px;
535      border-bottom: 1px solid rgba(0,0,0,.08);
536      overflow: hidden;
537    }
538    /* Add subtle gloss/overlay on colored head for visual depth */
539    .apps-swiper-lg .card .al-card-head::before {
540      content: "";
541      position: absolute; inset: 0; pointer-events: none;
542      background:
543        linear-gradient(180deg, rgba(255,255,255,.26), rgba(255,255,255,0) 58%) no-repeat,
544        radial-gradient(140% 80% at 50% -30%, rgba(255,255,255,.25), rgba(255,255,255,0) 70%);
545      mix-blend-mode: soft-light;
546      opacity: .9;
547    }
548    /* Title/subtext emphasis for readability */
549    .apps-swiper-lg .card .al-card-head .card-title { margin-bottom: .4rem; font-weight: 600; letter-spacing: .01em; }
550    .apps-swiper-lg .card .al-card-head .small, .apps-swiper-lg .card .al-card-head .text-secondary { opacity: .9; }
551    .apps-swiper-lg .card .al-card-main { background: #fff; padding: 1rem 1.25rem 1.2rem; display: flex; flex-direction: column; flex: 1; border-bottom-left-radius: 18px; border-bottom-right-radius: 18px; }
552    /* Clean typography on desktop cards: no emboss/deboss shadows */
553    .apps-swiper-lg .card .card-title,
554    .apps-swiper-lg .card .card-body,
555    .apps-swiper-lg .card .small { text-shadow: none; }
556    .apps-swiper-lg .card .btn { text-shadow: none; }
557    /* Specular highlight (no gold tint) */
558    .apps-swiper-lg .card::before {
559      content: "";
560      position: absolute;
561      inset: 0;
562      pointer-events: none;
563      border-radius: inherit;
564      background:
565        /* diagonal sweep highlight */
566        linear-gradient(120deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.45) 14%, rgba(255,255,255,0) 32%) 0 0 / 220% 220% no-repeat,
567        /* top gloss */
568        linear-gradient(180deg, rgba(255,255,255,.42), rgba(255,255,255,0) 55%) no-repeat,
569        /* base vignette to add depth (neutral) */
570        radial-gradient(120% 65% at 50% -20%, rgba(255,255,255,.35), rgba(255,255,255,0) 70%),
571        radial-gradient(100% 60% at 50% 120%, rgba(0,0,0,.18), rgba(0,0,0,0) 60%);
572      mix-blend-mode: normal; /* no color tint, keep neutral highlights */
573      opacity: 0; /* no initial light */
574      transition: opacity .2s ease-out, background-position .9s ease;
575    }
576    /* Hide inner rim layer to avoid squared artifact under rounded corners */
577    .apps-swiper-lg .card::after { content: none; }
578    /* Hover: slight lift + sheen sweep */
579    .apps-swiper-lg .card:hover {
580      transform: translateY(-8px) scale(1.01) rotateX(var(--tiltX, 0deg)) rotateY(var(--tiltY, 0deg));
581      box-shadow:
582        0 24px 44px rgba(0,0,0,.28),
583        0 10px 20px rgba(0,0,0,.12),
584        inset 0 1px 0 rgba(255,255,255,.35),
585        inset 0 -3px 8px rgba(0,0,0,.12);
586    }
587    .apps-swiper-lg .card:hover::before {
588      opacity: .25;
589      background-position: 120% 0, center, center, center, center;
590    }
591    /* Reduce motion preference */
592    @media (prefers-reduced-motion: reduce) {
593      .apps-swiper-lg .card { transition: none; }
594      .apps-swiper-lg .card::before { transition: none; }
595    }
596  }
597  /* Fallback to simple grid when Swiper (CDN) is unavailable */
598  .apps-swiper.no-swiper .swiper-wrapper { display: flex; flex-wrap: wrap; gap: 1rem; }
599  .apps-swiper.no-swiper .swiper-slide { flex: 0 0 100%; width: 100%; }
600  @media (min-width: 576px) {
601    .apps-swiper.no-swiper .swiper-slide { flex-basis: calc(50% - 1rem); }
602  }
603  @media (min-width: 992px) {
604    .apps-swiper.no-swiper .swiper-slide { flex-basis: calc(33.333% - 1rem); }
605  }
606  .apps-swiper.no-swiper .swiper-button-prev,
607  .apps-swiper.no-swiper .swiper-button-next,
608  .apps-swiper.no-swiper .swiper-pagination { display: none !important; }
609  /* Mobile: keep slide-like horizontal scroll if Swiper is unavailable */
610  @media (max-width: 575.98px) {
611    .apps-swiper.no-swiper .swiper-wrapper {
612      display: flex;
613      flex-wrap: nowrap;
614      overflow-x: auto;
615      gap: 12px;
616      -webkit-overflow-scrolling: touch;
617      scroll-snap-type: x mandatory;
618      padding-bottom: 8px;
619    }
620    .apps-swiper.no-swiper .swiper-slide {
621      flex: 0 0 80%; /* show like a slide */
622      width: auto;
623      scroll-snap-align: center;
624    }
625  }
626  /* Show/hide sections by 1024px breakpoint */
627  .apps-accordion-xs { display: none; }
628  .apps-swiper-lg { display: block; }
629  @media (max-width: 1024px) {
630    .apps-accordion-xs { display: block; }
631    .apps-swiper-lg { display: none; }
632    /* Align mobile section heading with accordion text start and add spacing */
633    .apps-accordion-xs .apps-xs-head { padding-left: 1.25rem; padding-right: 1.25rem; margin-bottom: 1rem; }
634    /* Mobile accordion: apply header colors only when expanded */
635    .apps-accordion-xs .accordion-button { position: relative; background: transparent; color: inherit; border: 0; box-shadow: none; padding: .9rem 1.1rem; border-radius: 12px; transition: background-color .15s ease, box-shadow .2s ease; }
636    .apps-accordion-xs .accordion-button:focus { box-shadow: none; border-color: transparent; outline: none; }
637    .apps-accordion-xs .accordion-button:not(.collapsed) {
638      background: var(--head-bg, transparent);
639      color: var(--head-color, inherit);
640      box-shadow: 0 4px 12px rgba(0,0,0,.06);
641      border: 0;
642    }
643    /* Subtle gloss and depth on expanded header */
644    .apps-accordion-xs .accordion-button:not(.collapsed)::before {
645      content: ""; position: absolute; inset: 0; pointer-events: none;
646      background:
647        linear-gradient(180deg, rgba(255,255,255,.22), rgba(255,255,255,0) 58%) no-repeat,
648        radial-gradient(140% 80% at 50% -30%, rgba(255,255,255,.20), rgba(255,255,255,0) 70%);
649      mix-blend-mode: soft-light; opacity: .9; border-top-left-radius: 12px; border-top-right-radius: 12px;
650    }
651    /* Divider between header and body when expanded */
652    .apps-accordion-xs .accordion-button:not(.collapsed) { border-bottom: 1px solid rgba(0,0,0,.07); }
653    /* Crisper title and meta inside the colored head */
654    .apps-accordion-xs .accordion-button .small { opacity: .9; }
655    .apps-accordion-xs .accordion-button { font-weight: 600; letter-spacing: .01em; }
656    /* Focus-visible ring for accessibility */
657    .apps-accordion-xs .accordion-button:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(13,110,253,.18); }
658    /* Keep chevron size visually balanced */
659    .apps-accordion-xs .accordion-button::after { -webkit-mask-size: .85rem .85rem; mask-size: .85rem .85rem; }
660    }
661    /* Make the chevron icon follow text color using mask + background-color */
662    .apps-accordion-xs .accordion-button::after {
663      background-image: none !important; /* override bootstrap */
664      color: inherit; /* follow title color */
665      background-color: currentColor; /* draw stroke via mask */
666      /* Stroke-only chevron (no fill) using CSS mask */
667      -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' d='M1.5 5.5L8 12l6.5-6.5' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
668      mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' d='M1.5 5.5L8 12l6.5-6.5' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
669      -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
670      -webkit-mask-position: center; mask-position: center;
671      -webkit-mask-size: 0.9rem 0.9rem; mask-size: 0.9rem 0.9rem;
672    }
673    /* Mobile store buttons: use default outline style on white background */
674    .apps-accordion-xs .apps-xs-downloads .btn { background: transparent; }
675  
676  /* Coverflow (stacked overlap around center, spherical curve) */
677  .al-coverflow {
678    --shot-w: 170px;
679    --overlap: 24px;
680    --tilt: 14deg;
681    --depth: 90px;
682    --arc-y: 16px;
683    position: relative;
684    perspective: 600px;
685    margin-top: 0; /* mobile/tablet: no lift; desktop override below */
686  }
687  @media (min-width: 992px) { .al-coverflow { margin-top: -50px; } }
688  .al-coverflow__stage {
689    position: relative;
690    height: calc(var(--shot-w) * 1.9);
691    width: calc(var(--shot-w) + 6 * var(--overlap));
692    margin-left: auto;
693    margin-right: auto;
694    overflow: visible;
695  }
696  .al-coverflow__item {
697    position: absolute;
698    top: 0; left: 50%;
699    width: var(--shot-w);
700    transform-style: preserve-3d;
701    transition: transform .4s ease, filter .4s ease, opacity .4s ease;
702  }
703  .al-coverflow__img { width: 100%; height: auto; border-radius: 16px; box-shadow: 0 12px 28px rgba(0, 0, 0, .16); display: block; aspect-ratio: 215 / 466; }
704  /* Slightly larger clickable area per card (desktop) */
705  @media (min-width: 576px) {
706    .al-coverflow__item { cursor: pointer; }
707    .al-coverflow__item::before {
708      content: "";
709      position: absolute;
710      /* expand a little horizontally, keep vertical margin for safety */
711      left: -10px; right: -10px; top: 10%; bottom: 10%;
712      background: transparent;
713    }
714    .al-hit-center { cursor: pointer; }
715    /* Bias adjacency to center: widen toward center by +10px */
716    .al-coverflow__stage > .al-coverflow__item:nth-child(3)::before { right: -80px; } /* 3rd slot */
717    .al-coverflow__stage >
717 .al-coverflow__item:nth-child(5)::before { left: -80px; }  /* 5th slot */
718  }
719  /* positions centered on 4th item (equal visual overlap, progressive scaling) */
720  .al-coverflow__item:nth-child(1) { transform: translateX(calc(-50% - 3 * var(--overlap))) rotateY(var(--tilt)) translateZ(calc(-1 * var(--depth))) scale(.84); filter: brightness(.88) saturate(.88); z-index: 2; }
721  .al-coverflow__item:nth-child(2) { transform: translateX(calc(-50% - 2 * var(--overlap))) rotateY(var(--tilt)) translateZ(calc(-1 * var(--depth))) scale(.88); filter: brightness(.9) saturate(.9); z-index: 3; }
722  .al-coverflow__item:nth-child(3) { transform: translateX(calc(-50% - 1 * var(--overlap))) rotateY(var(--tilt)) translateZ(calc(-1 * var(--depth))) scale(.94); filter: brightness(.94) saturate(.94); z-index: 4; }
723  .al-coverflow__item:nth-child(4) { transform: translateX(-50%) rotateY(0) translateZ(0) scale(1); z-index: 7; }
724  .al-coverflow__item:nth-child(5) { transform: translateX(calc(-50% + 1 * var(--overlap))) rotateY(calc(-1 * var(--tilt))) translateZ(calc(-1 * var(--depth))) scale(.94); filter: brightness(.94) saturate(.94); z-index: 4; }
725  .al-coverflow__item:nth-child(6) { transform: translateX(calc(-50% + 2 * var(--overlap))) rotateY(calc(-1 * var(--tilt))) translateZ(calc(-1 * var(--depth))) scale(.88); filter: brightness(.9) saturate(.9); z-index: 3; }
726  .al-coverflow__item:nth-child(7) { transform: translateX(calc(-50% + 3 * var(--overlap))) rotateY(calc(-1 * var(--tilt))) translateZ(calc(-1 * var(--depth))) scale(.84); filter: brightness(.88) saturate(.88); z-index: 2; }
727  /* dim/active states (desktop) */
728  @media (min-width: 576px) {
729    .al-coverflow__item { filter: brightness(.78) saturate(.9); }
730    .al-coverflow__item.is-active, .al-coverflow__item:hover, .al-coverflow__item.is-hovering { filter: none; }
731  }
732  @media (max-width: 575.98px) {
733    .al-coverflow { perspective: none; }
734    .al-coverflow__stage { height: auto; display: flex; gap: 12px; overflow-x: auto; padding-bottom: 8px; width: auto; }
735    .al-coverflow__item { position: relative; left: auto; transform: none !important; flex: 0 0 var(--shot-w); filter: none !important; }
736  }
737
738  /* (no protective overrides; rely on original coverflow CSS) */
739  /* iPhone-style frame */
740  .al-device { width: 100%; position: relative; }
741  .al-device.iphone { max-width: 420px; margin-inline: auto; }
742  .al-device__body {
743    position: relative; width: 100%;
744    border-radius: 32px;
745    background: linear-gradient(145deg, #0f0f12, #1b1b20);
746    box-shadow:
747      0 18px 50px rgba(0,0,0,.35),
748      inset 0 0 0 1px rgba(255,255,255,.06),
749      inset 0 0 0 2px rgba(0,0,0,.6);
750    padding: 14px; /* bezel */
751  }
752  .al-device__screen {
753    position: relative;
754    width: 100%;
755    border-radius: 24px;
756    overflow: hidden;
757    background: #000;
758  }
759  .al-device__img {
760    width: 100%;
761    height: auto; /* keep original aspect ratio */
762    object-fit: contain; /* avoid cropping */
763    display: block;
764  }
765  .al-device__notch {
766    position: absolute; top: 8px; left: 50%; transform: translateX(-50%);
767    width: 42%; height: 24px;
768    background: #000; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px;
769    box-shadow: 0 1px 0 rgba(255,255,255,.06) inset; z-index: 3;
770  }
771  .al-device__line { position: absolute; inset: 0; border-radius: 32px; box-shadow: 0 0 0 1px rgba(255,255,255,.04) inset; pointer-events: none; }
772  /* Alpha cases section fixed pixel widths (~70% of container width) */
773  #alpha-cases .al-cases-wrap { margin-left: auto; margin-right: auto; text-align: center; padding-top: 32px; }
774  /* xxl: container-xxl max-width 1320px => ~70% = 924px */
775  @media (min-width: 1400px) { #alpha-cases .al-cases-wrap { width: 924px; } }
776  /* xl: 1140px => ~70% = 798px */
777  @media (min-width: 1200px) and (max-width: 1399.98px) { #alpha-cases .al-cases-wrap { width: 798px; } }
778  /* lg: 960px => ~70% = 672px */
779  @media (min-width: 992px) and (max-width: 1199.98px) { #alpha-cases .al-cases-wrap { width: 672px; } }
780  /* md: 720px => ~70% = 504px */
781  @media (min-width: 768px) and (max-width: 991.98px) { #alpha-cases .al-cases-wrap { width: 504px; } }
782  /* sm: 540px => ~70% = 378px */
783  @media (min-width: 576px) and (max-width: 767.98px) { #alpha-cases .al-cases-wrap { width: 378px; } }
784  /* xs: full width for usability */
785  @media (max-width: 575.98px) { #alpha-cases .al-cases-wrap { width: 100%; } }
786
787  /* Alpha cases title and subtitle */
788  #alpha-cases .al-cases-title {
789    font-size: 1.65rem !important; /* override global h2 !important */
790    font-weight: 800;
791    letter-spacing: -0.01em;
792    line-height: 1.15;
793  }
794  /* Alpha cases subtitle */
795  #alpha-cases .al-cases-subtitle {
796    font-size: 1.0625rem;
797    letter-spacing: 0.005em;
798    line-height: 1.75;
799    color: var(--bs-secondary-color);
800  }
801  /* Alpha cases note: match hero list sizing */
802  #alpha-cases .al-cases-note {
803    font-size: .9rem;
804    line-height: 1.6;
805    color: var(--bs-secondary-color);
806  }
807  /* Stylish short divider with center dot and glow; large vertical spacing */
808  #alpha-cases .al-divider-short {
809    position: relative;
810    width: 220px;
811    height: 2px;
812    margin: 56px auto; /* generous space above/below */
813    background: linear-gradient(90deg, rgba(0,0,0,0), rgba(0,0,0,.18), rgba(0,0,0,0));
814    border-radius: 2px;
815  }
816  #alpha-cases .al-divider-short::after {
817    content: "";
818    position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
819    width: 8px; height: 8px; border-radius: 50%;
820    background: var(--bs-primary, #0d6efd);
821    box-shadow: 0 0 0 6px rgba(13,110,253,.12);
822  }
823
824  /* Note width box: fixed width (won't overflow on small screens) */
825  #alpha-cases .al-note-box { display: inline-block; width: 640px; max-width: 100%; }
826  #alpha-cases .al-note-first { display: inline; }
827  /* Case item title color as link blue */
828  #alpha-cases .al-case-title { color: var(--bs-primary); }
829
830  /* Cases: tidy layout + polish */
831  #alpha-cases .al-cases-search .form-control { max-width: 460px; }
832  #alpha-cases .al-cases-search { margin-top: 32px !important; margin-bottom: 32px !important; }
833  #alpha-cases .al-cases-grid { max-width: 1024px; }
834  #alpha-cases .al-case-card { border: 1px solid rgba(0,0,0,.08); border-radius: 14px; transition: transform .15s ease, box-shadow .2s ease, border-color .2s ease; }
835  #alpha-cases .al-case-card:hover { transform: translateY(-3px); box-shadow: 0 12px 26px rgba(0,0,0,.12), 0 4px 10px rgba(0,0,0,.08); border-color: rgba(0,0,0,.12); }
836  #alpha-cases .al-case-card .card-body { padding: 0.9rem 1rem 1rem; display: flex; flex-direction: column; height: 100%; }
837  #alpha-cases .al-case-card .al-case-title { font-weight: 700; margin-bottom: .5rem; }
838  #alpha-cases .al-case-card .al-case-desc { color: var(--bs-secondary-color); }
839  #alpha-cases .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.55; max-height: calc(1.55em * 3); }
840  /* Prevent mid-word wrapping in alpha-cases section */
841  #alpha-cases, #alpha-cases p, #alpha-cases .al-case-title, #alpha-cases .al-case-desc,
842  #alpha-cases .al-hero__subtitle, #alpha-cases .al-cases-note { word-break: keep-all; overflow-wrap: normal; }
843
844  /* Prevent mid-word wrapping in hero section */
845  .al-hero, .al-hero p, .al-hero__title, .al-hero__subtitle, .al-hero__list { word-break: keep-all; overflow-wrap: normal; }
846  /* Hero defaults (no overrides) are kept above */
847
848  /* Timeline list emphasizing recency (year in left rail) */
849  #alpha-cases .al-cases-timeline { position: relative; margin-top: 36px; padding-left: 0; padding-right: 0; }
850  #alpha-cases .al-cases-timeline > * { position: relative; z-index: 1; }
851  #alpha-cases .al-cases-timeline::before { content: none; }
852  #alpha-cases .al-timeline {
853    position: relative;
854    padding: 0;
855    padding-left: 0;
856    z-index: 0;
857    margin-top: 0;
858  }
859  #alpha-cases .al-timeline::before {
860    content: "" !important;
861    position: absolute;
862    inset: -18px -28px -72px -28px;
863    background: linear-gradient(180deg,
864      rgba(150,150,158,0.16) 0%,
865      rgba(170,170,180,0.10) 55%,
866      rgba(192,192,202,0.06) 72%,
867      rgba(218,218,228,0.04) 84%,
868      rgba(255,255,255,0) 100%
869    );
870    clip-path: polygon(0 0, 100% 0, 100% 66%, 50% 100%, 0 66%);
871    pointer-events: none;
872    z-index: 0;
873  }
874  @media (max-width: 575.98px) {
875    #alpha-cases .al-cases-timeline::before {
876      content: "";
877      position: absolute;
878      top: -12px;
879      bottom: -60px;
880      left: 0;
881      right: 0;
882      background: linear-gradient(180deg,
883        rgba(150,150,158,0.16) 0%,
884        rgba(170,170,180,0.10) 55%,
885        rgba(192,192,202,0.06) 72%,
886        rgba(218,218,228,0.04) 84%,
887        rgba(255,255,255,0) 100%
888      );
889      clip-path: polygon(0 0, 100% 0, 100% 74%, 50% 100%, 0 74%);
890      pointer-events: none;
891      z-index: 0;
892    }
893    #alpha-cases .al-timeline::before { content: none !important; }
894    #alpha-cases .al-cases-timeline { margin-top: 28px; padding-left: .75rem; padding-right: .75rem; }
895    #alpha-cases .al-timeline { margin-left: 0; margin-right: 0; }
896    #alpha-cases .al-cases-timeline .al-timeline { width: 100%; max-width: 100% !important; }
897  }
898  @media (min-width: 576px) {
899    #alpha-cases .al-cases-timeline::before { content: none; }
900    #alpha-cases .al-timeline::before {
901      content: "" !important;
902      inset: -18px -28px -72px -28px;
903      background: linear-gradient(180deg,
904        rgba(150,150,158,0.16) 0%,
905        rgba(170,170,180,0.10) 55%,
906        rgba(192,192,202,0.06) 72%,
907        rgba(218,218,228,0.04) 84%,
908        rgba(255,255,255,0) 100%
909      );
910      clip-path: polygon(0 0, 100% 0, 100% 66%, 50% 100%, 0 66%);
911    }
912    #alpha-cases .al-cases-timeline { margin-left: 0; margin-right: 0; padding-left: 0; padding-right: 0; }
913  }
914  @media (min-width: 992px) {
915    #alpha-cases .al-cases-timeline { margin-top: 48px; }
916    #alpha-cases .al-timeline::before {
917      inset: -16px -28px -72px -28px;
918    }
919  }
920  #alpha-cases .al-timeline-item { display: grid; grid-template-columns: 72px 1fr; column-gap: 12px; padding: 12px 0; position: relative; z-index: 1; }
921  #alpha-cases .al-timeline-item::before { content: none; }
922
923  /* Emphasized paragraphs: force body color (black) */
924  #alpha-cases .al-emph { color: var(--bs-body-color) !important; }
925  /* Home-only timeline rail: recreate with custom ::after (top/bottom spaced) and disable global one */
926  #alpha-cases .al-time { color: #6c757d; font-weight: 400; opacity: .7; text-align: right; padding-top: 3px; padding-right: 12px; position: relative; }
927  #alpha-cases .al-time::after { content: "" !important; position: absolute; top: 6px !important; bottom: 6px !important; right: 0; width: 2px; background: var(--bs-border-color, #e9ecef) !important; }
928  @media (max-width: 575.98px) { #alpha-cases .al-timeline-item { grid-template-columns: 56px 1fr; } }
929
930  /* Make entire text block clickable and add progressive fade */
931  #alpha-cases .al-case-link { display: block; text-decoration: none; }
932  #alpha-cases .al-timeline-item { --fade: 1; }
933  #alpha-cases .al-timeline-item:nth-child(1) { --fade: 1; }
934  #alpha-cases .al-timeline-item:nth-child(2) { --fade: .92; }
935  #alpha-cases .al-timeline-item:nth-child(3) { --fade: .84; }
936  #alpha-cases .al-timeline-item:nth-child(4) { --fade: .76; }
937  #alpha-cases .al-timeline-item:nth-child(5) { --fade: .68; }
938  #alpha-cases .al-case-link { opacity: var(--fade); transition: opacity .15s ease; }
939  #alpha-cases .al-case-link:hover { opacity: 1; }
940</style>
941
942
943<div class="container-xxl">
944  <section class="px-4 my-5 border-bottom al-hero al-hero__divider">
945    <div class="row align-items-center g-4 g-lg-5">
946      <div class="col-12 col-lg-6">
947        <div class="d-flex align-items-start gap-3 mb-4">
948          <img class="al-hero__logo" src="/assets/img/app_icon_profile_title.png" alt="알파로 아이콘" referrerpolicy="no-referrer" decoding="async">
949          <div class="text-start">
950            <h1 class="al-hero__title text-body-emphasis mb-3">알파로 법학 OX 어플 시리즈</h1>
951            <p class="al-hero__subtitle mb-0">기출문제를 OX 지문으로 재구성하여 퀴즈어플로 만들었습니다.</p>
952          </div>
953        </div>
954        <div class="al-hero__content text-start">
955          <ul class="al-hero__list">
956            <li>출제기관 공식 발표 정답에 따라 정확히 정/오를 표기하였습니다.</li>
957            <li>기출 이후 개정된 법령, 변경된 판례는 빠르게 정답·해설에 반영되고 별도 다운로드 없이 실시간으로 어플에 적용됩니다.</li>
958            <li>그럼에도 잘못된 정보가 있다면 각 문제별로 &quot;오류제보하기&quot; 기능을 통해 제보할 수 있습니다.</li>
959            <li>해설은 최대한 바이어스 없이 관련 조문·판례를 그대로 제시하는 방식으로 작성하였습니다.</li>
960          </ul>
961          
962        </div>
963      </div>
964      <div class="col-12 col-lg-6">
965        <div class="al-coverflow ms-lg-auto">
966          <div class="al-coverflow__stage">
967            
968            <div class="al-coverflow__item">
969              <img class="al-coverflow__img"
970                  src="/assets/img/screen/alphalaw_app_main.jpg"    
971                   sizes="(min-width: 992px) 170px, 80vw"
972                   width="215" height="466"
973                   alt="알파로 앱 메인 화면" loading="lazy" referrerpolicy="no-referrer">
974            </div>
975            <div class="al-coverflow__item">
976              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_category_setting.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 단원 설정 화면" loading="lazy" referrerpolicy="no-referrer">
977            </div>
978            <div class="al-coverflow__item">
979              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_explanation.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 해설 화면" loading="lazy" referrerpolicy="no-referrer">
980            </div>            
981            <div class="al-coverflow__item">
982              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_100_problem_challenge.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 도전100제 문제 풀이 화면" referrerpolicy="no-referrer">
983            </div>
984            <div class="al-coverflow__item">
985              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_incorrect_review.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 오답노트 화면" loading="lazy" referrerpolicy="no-referrer">
986            </div>
987            <div class="al-coverflow__item">
988              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_exam_year.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 시험 및 회차 설정 화면" loading="lazy" referrerpolicy="no-referrer">
989            </div>            
990            <div class="al-coverflow__item">
991              <img class="al-coverflow__img" src="/assets/img/screen/alphalaw_app_category_select.jpg" sizes="(min-width: 992px) 170px, 80vw" width="215" height="466" alt="알파로 앱 단원학습 단원 선택 화면" loading="lazy" referrerpolicy="no-referrer">
992            </div>
993
994          </div>
995        </div>
996      </div>
997    </div>
998  </section>
999
1000    <!-- Mobile/Tablet (<=1024px): Accordion -->
1001  <section class="my-5 apps-accordion-xs">
1002    <div class="apps-xs-head">
1003      <h2 class="h4 mb-1 al-sec-title">과목별 알파로 OX 앱</h2>
1004    </div>
1005    <div class="accordion accordion-flush" id="appsAccordionXs">
1006            <div class="accordion-item">
1007        <h2 class="accordion-header" id="appXsItem0">
1008          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1009                  data-bs-target="#appXsCollapse0" aria-expanded="false"
1010                  aria-controls="appXsCollapse0" style="--head-bg:#F9640F;--head-color:#FFFFFF;">
1011            행정법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="7,257">7,257</span>)</span>
1012                      </button>
1013        </h2>
1014        <div id="appXsCollapse0" class="accordion-collapse collapse" aria-labelledby="appXsItem0" data-bs-parent="#appsAccordionXs">
1015          <div class="accordion-body" style="background:#fff;">
1016                                    <div class="small mb-3 text-secondary">
1017              소방간부 2017 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직9급 2014 ~ 2026<br>지방직9급 2014 ~ 2025<br>국회직8급 2018 ~ 2025<br>국가직7급 2014 ~ 2025<br>지방직7급 2014 ~ 2025<br>            </div>
1018                        <div class="apps-xs-downloads d-flex gap-2">
1019                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.admin" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1020                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%96%89%EC%A0%95%EB%B2%95-ox/id1555940887" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1021                          </div>
1022          </div>
1023        </div>
1024      </div>
1025            <div class="accordion-item">
1026        <h2 class="accordion-header" id="appXsItem1">
1027          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1028                  data-bs-target="#appXsCollapse1" aria-expanded="false"
1029                  aria-controls="appXsCollapse1" style="--head-bg:#69F588;">
1030            민사소송법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="1,919">1,919</span>)</span>
1031                      </button>
1032        </h2>
1033        <div id="appXsCollapse1" class="accordion-collapse collapse" aria-labelledby="appXsItem1" data-bs-parent="#appsAccordionXs">
1034          <div class="accordion-body" style="background:#fff;">
1035                                    <div class="small mb-3 text-secondary">
1036              변호사시험 기출문제 2018 ~ 2026<br>법원직9급 2012 ~ 2025<br>            </div>
1037                        <div class="apps-xs-downloads d-flex gap-2">
1038                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.civilproc" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1039                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EB%AF%BC%EC%82%AC%EC%86%8C%EC%86%A1%EB%B2%95-ox/id1617198466" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1040                          </div>
1041          </div>
1042        </div>
1043      </div>
1044            <div class="accordion-item">
1045        <h2 class="accordion-header" id="appXsItem2">
1046          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1047                  data-bs-target="#appXsCollapse2" aria-expanded="false"
1048                  aria-controls="appXsCollapse2" style="--head-bg:#29DF47;">
1049            민법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="6,569">6,569</span>)</span>
1050                      </button>
1051        </h2>
1052        <div id="appXsCollapse2" class="accordion-collapse collapse" aria-labelledby="appXsItem2" data-bs-parent="#appsAccordionXs">
1053          <div class="accordion-body" style="background:#fff;">
1054                                    <div class="small mb-3 text-secondary">
1055              변호사시험 2018 ~ 2026<br>법원직9급 2012 ~ 2025<br>법무사 2016 ~ 2025<br>법원직5급(법원행시) 2017 ~ 2024<br>            </div>
1056                        <div class="apps-xs-downloads d-flex gap-2">
1057                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.civil" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1058                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EB%AF%BC%EB%B2%95-ox/id1462244200" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1059                          </div>
1060          </div>
1061        </div>
1062      </div>
1063            <div class="accordion-item">
1064        <h2 class="accordion-header" id="appXsItem3">
1065          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1066                  data-bs-target="#appXsCollapse3" aria-expanded="false"
1067                  aria-controls="appXsCollapse3" style="--head-bg:#1A7850;--head-color:#FFFFFF;">
1068            상법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="5,142">5,142</span>)</span>
1069                      </button>
1070        </h2>
1071        <div id="appXsCollapse3" class="accordion-collapse collapse" aria-labelledby="appXsItem3" data-bs-parent="#appsAccordionXs">
1072          <div class="accordion-body" style="background:#fff;">
1073                                    <div class="small mb-3 text-secondary">
1074              변호사시험 2018 ~ 2026<br>공인회계사 2018 ~ 2026<br>법원직9급 2017 ~ 2025<br>법무사 2016 ~ 2025<br>            </div>
1075                        <div class="apps-xs-downloads d-flex gap-2">
1076                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.commercial" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1077                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EC%83%81%EB%B2%95-ox/id6446020773" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1078                          </div>
1079          </div>
1080        </div>
1081      </div>
1082            <div class="accordion-item">
1083        <h2 class="accordion-header" id="appXsItem4">
1084          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1085                  data-bs-target="#appXsCollapse4" aria-expanded="false"
1086                  aria-controls="appXsCollapse4" style="--head-bg:#159FC0;--head-color:#FFFFFF;">
1087            형법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="14,561">14,561</span>)</span>
1088                      </button>
1089        </h2>
1090        <div id="appXsCollapse4" class="accordion-collapse collapse" aria-labelledby="appXsItem4" data-bs-parent="#appsAccordionXs">
1091          <div class="accordion-body" style="background:#fff;">
1092                                    <div class="small mb-3 text-secondary">
1093              경찰승진 2012 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직9급 2014 ~ 2026<br>국가직9급 형법총론 2014 ~ 2026<br>법원직9급 2012 ~ 2026<br>경찰공무원 2012 ~ 2026 1차<br>경찰간부 2015(64기) ~ 2026(75기)<br>국가직7급 2016 ~ 2025<br>법원행시 2017 ~ 2024<br>사법시험 2012 ~ 2016<br>            </div>
1094                        <div class="apps-xs-downloads d-flex gap-2">
1095                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.crime" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1096                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%98%95%EB%B2%95-ox/id1355483813" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1097                          </div>
1098          </div>
1099        </div>
1100      </div>
1101            <div class="accordion-item">
1102        <h2 class="accordion-header" id="appXsItem5">
1103          <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
1104                  data-bs-target="#appXsCollapse5" aria-expanded="false"
1105                  aria-controls="appXsCollapse5" style="--head-bg:#3E7FC1;--head-color:#FFFFFF;">
1106            형사소송법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="10,852">10,852</span>)</span>
1107                      </button>
1108        </h2>
1109        <div id="appXsCollapse5" class="accordion-collapse collapse" aria-labelledby="appXsItem5" data-bs-parent="#appsAccordionXs">
1110          <div class="accordion-body" style="background:#fff;">
1111                                    <div class="small mb-3 text-secondary">
1112              경찰승진 2012 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직 9급 2014 ~ 2026<br>국가직 9급 형소법개론 2014 ~ 2026<br>법원직 9급 2012 ~ 2026<br>경찰공무원 2012 ~ 2026 1차<br>경찰간부 2015(64기) ~ 2026(75기)<br>국가직 7급 2016 ~ 2025<br>            </div>
1113                        <div class="apps-xs-downloads d-flex gap-2">
1114                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.crimeproc" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1115                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%98%95%EC%82%AC%EC%86%8C%EC%86%A1%EB%B2%95-ox/id1369727256" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1116                          </div>
1117          </div>
1118        </div>
1119      </div>
1120            <div class="accordion-item">
1121        <h2 class="accordion-header" id="appXsItem6">
1122          <button class="accordion-button" type="button" data-bs-toggle="collapse"
1123                  data-bs-target="#appXsCollapse6" aria-expanded="true"
1124                  aria-controls="appXsCollapse6" style="--head-bg:#7F43AE;--head-color:#FFFFFF;">
1125            헌법 OX                          <span class="ms-2 small">(총문제수 : <span class="al-qcount" data-value="15,332">15,332</span>)</span>
1126                      </button>
1127        </h2>
1128        <div id="appXsCollapse6" class="accordion-collapse collapse show" aria-labelledby="appXsItem6" data-bs-parent="#appsAccordionXs">
1129          <div class="accordion-body" style="background:#fff;">
1130                                    <div class="small mb-3 text-secondary">
1131              경찰승진 2016 ~ 2026<br>소방간부 2017 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직5급 2017 ~ 2026<br>국회직5급(입법고시) 2017 ~ 2026<br>국회직8급 2014 ~ 2026<br>법원직9급 2012 ~ 2025<br>경찰간부 2023(72기) ~ 2026(75기)<br>경찰공무원 2022 ~ 2026 1차<br>법무사 2017 ~ 2025<br>국가직7급 2014 ~ 2025<br>지방직7급 2014 ~ 2025<br>법원직5급(법원행시) 2017 ~ 2024<br>서울시공무원 2017 ~ 2019<br>            </div>
1132                        <div class="apps-xs-downloads d-flex gap-2">
1133                                                  <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.constitution" class="btn btn-sm btn-outline-dark btn-googleplay" target="_blank">Google Play</a>
1134                  <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%97%8C%EB%B2%95-ox/id1449365342" class="btn btn-sm btn-outline-dark btn-appstore" target="_blank">App Store</a>
1135                          </div>
1136          </div>
1137        </div>
1138      </div>
1139          </div>
1140  </section>
1141
1142  <!-- Desktop (>1024px): Overlapped 2D deck -->
1143  <section class="my-5 apps-swiper-lg">
1144    <div class="px-4">
1145      <h2 class="h4 mb-1 al-sec-title">과목별 알파로 OX 앱</h2>
1146      <p class="text-secondary small mb-3">구글 플레이스토어, 애플 앱스토어에서 앱을 다운받을 수 있습니다.</p>
1147    </div>
1148    <div class="apps-swiper swiper">
1149      <div class="swiper-wrapper">
1150                <div class="swiper-slide">
1151                    <div class="card h-100" style="width: 280px;">
1152            <div class="card-body d-flex flex-column p-0">
1153              <div class="al-card-head " style="background:#F9640F;color:#FFFFFF;">
1154                <h5 class="card-title mb-1 " style="color:#FFFFFF;">행정법 OX</h5>
1155                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="7,257">7,257</span></div>
1156              </div>
1157              <div class="al-card-main">
1158                                          <div class="small mb-3 text-secondary">
1159                소방간부 2017 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직9급 2014 ~ 2026<br>지방직9급 2014 ~ 2025<br>국회직8급 2018 ~ 2025<br>국가직7급 2014 ~ 2025<br>지방직7급 2014 ~ 2025<br>              </div>
1160                            <div class="mt-auto d-flex gap-2">
1161                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.admin" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1162                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%96%89%EC%A0%95%EB%B2%95-ox/id1555940887" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1163              </div>
1164              </div>
1165            </div>
1166          </div>
1167        </div>
1168                <div class="swiper-slide">
1169                    <div class="card h-100" style="width: 280px;">
1170            <div class="card-body d-flex flex-column p-0">
1171              <div class="al-card-head " style="background:#69F588;">
1172                <h5 class="card-title mb-1 " >민사소송법 OX</h5>
1173                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="1,919">1,919</span></div>
1174              </div>
1175              <div class="al-card-main">
1176                                          <div class="small mb-3 text-secondary">
1177                변호사시험 기출문제 2018 ~ 2026<br>법원직9급 2012 ~ 2025<br>              </div>
1178                            <div class="mt-auto d-flex gap-2">
1179                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.civilproc" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1180                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EB%AF%BC%EC%82%AC%EC%86%8C%EC%86%A1%EB%B2%95-ox/id1617198466" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1181              </div>
1182              </div>
1183            </div>
1184          </div>
1185        </div>
1186                <div class="swiper-slide">
1187                    <div class="card h-100" style="width: 280px;">
1188            <div class="card-body d-flex flex-column p-0">
1189              <div class="al-card-head " style="background:#29DF47;">
1190                <h5 class="card-title mb-1 " >민법 OX</h5>
1191                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="6,569">6,569</span></div>
1192              </div>
1193              <div class="al-card-main">
1194                                          <div class="small mb-3 text-secondary">
1195                변호사시험 2018 ~ 2026<br>법원직9급 2012 ~ 2025<br>법무사 2016 ~ 2025<br>
1195법원직5급(법원행시) 2017 ~ 2024<br>              </div>
1196                            <div class="mt-auto d-flex gap-2">
1197                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.civil" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1198                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EB%AF%BC%EB%B2%95-ox/id1462244200" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1199              </div>
1200              </div>
1201            </div>
1202          </div>
1203        </div>
1204                <div class="swiper-slide">
1205                    <div class="card h-100" style="width: 280px;">
1206            <div class="card-body d-flex flex-column p-0">
1207              <div class="al-card-head " style="background:#1A7850;color:#FFFFFF;">
1208                <h5 class="card-title mb-1 " style="color:#FFFFFF;">상법 OX</h5>
1209                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="5,142">5,142</span></div>
1210              </div>
1211              <div class="al-card-main">
1212                                          <div class="small mb-3 text-secondary">
1213                변호사시험 2018 ~ 2026<br>공인회계사 2018 ~ 2026<br>법원직9급 2017 ~ 2025<br>법무사 2016 ~ 2025<br>              </div>
1214                            <div class="mt-auto d-flex gap-2">
1215                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.commercial" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1216                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%EC%83%81%EB%B2%95-ox/id6446020773" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1217              </div>
1218              </div>
1219            </div>
1220          </div>
1221        </div>
1222                <div class="swiper-slide">
1223                    <div class="card h-100" style="width: 280px;">
1224            <div class="card-body d-flex flex-column p-0">
1225              <div class="al-card-head " style="background:#159FC0;color:#FFFFFF;">
1226                <h5 class="card-title mb-1 " style="color:#FFFFFF;">형법 OX</h5>
1227                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="14,561">14,561</span></div>
1228              </div>
1229              <div class="al-card-main">
1230                                          <div class="small mb-3 text-secondary">
1231                경찰승진 2012 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직9급 2014 ~ 2026<br>국가직9급 형법총론 2014 ~ 2026<br>법원직9급 2012 ~ 2026<br>경찰공무원 2012 ~ 2026 1차<br>경찰간부 2015(64기) ~ 2026(75기)<br>국가직7급 2016 ~ 2025<br>법원행시 2017 ~ 2024<br>사법시험 2012 ~ 2016<br>              </div>
1232                            <div class="mt-auto d-flex gap-2">
1233                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.crime" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1234                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%98%95%EB%B2%95-ox/id1355483813" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1235              </div>
1236              </div>
1237            </div>
1238          </div>
1239        </div>
1240                <div class="swiper-slide">
1241                    <div class="card h-100" style="width: 280px;">
1242            <div class="card-body d-flex flex-column p-0">
1243              <div class="al-card-head " style="background:#3E7FC1;color:#FFFFFF;">
1244                <h5 class="card-title mb-1 " style="color:#FFFFFF;">형사소송법 OX</h5>
1245                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="10,852">10,852</span></div>
1246              </div>
1247              <div class="al-card-main">
1248                                          <div class="small mb-3 text-secondary">
1249                경찰승진 2012 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직 9급 2014 ~ 2026<br>국가직 9급 형소법개론 2014 ~ 2026<br>법원직 9급 2012 ~ 2026<br>경찰공무원 2012 ~ 2026 1차<br>경찰간부 2015(64기) ~ 2026(75기)<br>국가직 7급 2016 ~ 2025<br>              </div>
1250                            <div class="mt-auto d-flex gap-2">
1251                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.crimeproc" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1252                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%98%95%EC%82%AC%EC%86%8C%EC%86%A1%EB%B2%95-ox/id1369727256" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1253              </div>
1254              </div>
1255            </div>
1256          </div>
1257        </div>
1258                <div class="swiper-slide">
1259                    <div class="card h-100" style="width: 280px;">
1260            <div class="card-body d-flex flex-column p-0">
1261              <div class="al-card-head " style="background:#7F43AE;color:#FFFFFF;">
1262                <h5 class="card-title mb-1 " style="color:#FFFFFF;">헌법 OX</h5>
1263                <div class="mb-1 ">총문제수 : <span class="al-qcount" data-value="15,332">15,332</span></div>
1264              </div>
1265              <div class="al-card-main">
1266                                          <div class="small mb-3 text-secondary">
1267                경찰승진 2016 ~ 2026<br>소방간부 2017 ~ 2026<br>변호사시험 2018 ~ 2026<br>국가직5급 2017 ~ 2026<br>국회직5급(입법고시) 2017 ~ 2026<br>국회직8급 2014 ~ 2026<br>법원직9급 2012 ~ 2025<br>경찰간부 2023(72기) ~ 2026(75기)<br>경찰공무원 2022 ~ 2026 1차<br>법무사 2017 ~ 2025<br>국가직7급 2014 ~ 2025<br>지방직7급 2014 ~ 2025<br>
1267법원직5급(법원행시) 2017 ~ 2024<br>서울시공무원 2017 ~ 2019<br>              </div>
1268                            <div class="mt-auto d-flex gap-2">
1269                                <a href="https://play.google.com/store/apps/details?id=kr.ponster.alphalaw.constitution" class="btn btn-sm btn-outline-dark" target="_blank">Google Play</a>
1270                <a href="https://apps.apple.com/kr/app/%EC%95%8C%ED%8C%8C%EB%A1%9C-%ED%97%8C%EB%B2%95-ox/id1449365342" class="btn btn-sm btn-outline-dark" target="_blank">App Store</a>
1271              </div>
1272              </div>
1273            </div>
1274          </div>
1275        </div>
1276              </div>
1277    </div>
1278  </section>
1279  
1279<script>
1280    (function(){
1281      // Digit-by-digit count-up on hover for desktop app cards
1282      // Prepare digits only when animation starts (keep original text by default)
1283      function buildDigits(el){
1284        if (!el) return [];
1285        var val = (el.getAttribute('data-value')||'').trim();
1286        var chars = val.split('');
1287        el.innerHTML = '';
1288        var ds = [];
1289        var digitIndex = 0;
1290        for (var i=0;i<chars.length;i++){
1291          var ch = chars[i];
1292          if (/\d/.test(ch)){
1293            var d = document.createElement('span');
1294            d.className = 'd';
1295            d.dataset.target = ch;
1296            d.dataset.idx = digitIndex++;
1297            d.textContent = '0';
1298            el.appendChild(d);
1299            ds.push(d);
1300          } else {
1301            var s = document.createElement('span');
1302            s.className = 'sep';
1303            s.textContent = ch;
1304            el.appendChild(s);
1305          }
1306        }
1307        return ds;
1308      }
1309      function animateQCount(el){
1310        if (!el) return;
1311        // Build digit spans at hover time so default text remains original
1312        var ds = buildDigits(el);
1313        var total = ds.length;
1314        // Emphasize while animating
1315        try { el.classList.add('is-animating'); } catch(e){}
1316        // Most significant digit stays at its target immediately
1317        if (total > 0) {
1318          var first = ds[0];
1319          first.textContent = String(parseInt(first.dataset.target,10)||0);
1320        }
1321        // Animate remaining digits (from the second digit)
1322        for (var i=1;i<ds.length;i++){
1323          (function(d, i){
1324            var target = parseInt(d.dataset.target, 10) || 0;
1325            d.textContent = '0';
1326            var duration = (i === total - 1) ? 800 : 500; // last digit slower
1327            var delay = (i - 1) * 120; // stagger, ignoring the first fixed digit
1328            var startTime = null;
1329            function step(ts){
1330              if (startTime === null) startTime = ts;
1331              var t = (ts - startTime) / duration;
1332              if (t < 0) t = 0; if (t > 1) t = 1;
1333              var cur = Math.floor(t * target);
1334              if (t === 1) cur = target;
1335              d.textContent = String(cur);
1336              if (t < 1) requestAnimationFrame(step);
1337            }
1338            setTimeout(function(){ requestAnimationFrame(step); }, delay);
1339          })(ds[i], i);
1340        }
1341        // Keep emphasis after animation completes (do not remove class)
1342      }
1343      function initQCounts(){
1344        var cards = document.querySelectorAll('.apps-swiper-lg .card');
1345        for (var i=0;i<cards.length;i++){
1346          (function(card){
1347            var q = card.querySelector('.al-qcount');
1348            if (!q) return;
1349            if (card.dataset.qcBound === '1') return;
1350            card.addEventListener('mouseenter', function(){ animateQCount(q); });
1351            card.dataset.qcBound = '1';
1352          })(cards[i]);
1353        }
1354        // Mobile accordion: animate when expanding
1355        var acc = document.getElementById('appsAccordionXs');
1356        if (acc) {
1357          var collapses = acc.querySelectorAll('.accordion-collapse');
1358          for (var j=0;j<collapses.length;j++){
1359            (function(col){
1360              col.addEventListener('show.bs.collapse', function(){
1361                try {
1362                  var item = col.closest('.accordion-item');
1363                  var header = item ? item.querySelector('.accordion-header') : null;
1364                  var q2 = header ? header.querySelector('.al-qcount') : null;
1365                  if (q2) animateQCount(q2);
1366                } catch(e){}
1367              });
1368            })(collapses[j]);
1369          }
1370        }
1371      }
1372      // Minimal styles to keep digits steady
1373      var css = '.al-qcount{font-variant-numeric:tabular-nums;}' +
1374                '.al-qcount .d{display:inline-block;min-width:0.6ch;}' +
1375                '.al-qcount.is-animating{font-weight:700;}';
1376      try { var s = document.createElement('style'); s.textContent = css; document.head.appendChild(s); } catch(e){}
1377      if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initQCounts); else initQCounts();
1378    })();
1379  </script>
1379
1380  
1381    <section class="my-5" id="alpha-cases">
1382    <div class="px-4 mx-auto text-center al-cases-wrap">
1383      <h2 class="al-cases-title text-body-emphasis mb-3">
1384        <a href="/case/latest/1" class="text-decoration-none text-reset">알파로 기출판례 사이트</a>
1385      </h2>
1386      <p class="al-hero__subtitle mb-4">알파로 기출판례 사이트는 매우 효율적인 온라인 판례집입니다.</p>
1387      <div class="al-note-box">
1388        <p class="al-cases-note mb-0">
1389          <span class="al-note-first">시험에 출제되었던 판례들만으로 구성되어 있으며, 판례와 함께 관련 기출문제를 보여줍니다.</span><br>
1390          이를 통해 판례의 쟁점을 정확히 이해할 수 있으며, 더불어 어떤 판례가 시험에 많이 출제된 빈출판례인지를 파악할 수 있습니다.
1391        </p>
1392      </div>
1393      <div class="al-divider-short"></div>
1394      <div class="al-note-box">
1395        <p class="al-cases-note mt-2 mb-0">
1396          판례를 찾고, 관련 기출문제를 풀고, 그 시험과 관련된 판례를 보고, 이렇게 꼬리에 꼬리를 물고 판례의 바다를 헤엄치다 보면 어느새 공부는 되어 있을 것입니다.
1397        </p>
1398      </div>
1399      <form class="mt-3 al-home-search" role="search" onsubmit="var v=(this.case_id.value||'').trim(); if(!v) return false; window.location.href='/case/question/' + encodeURIComponent(v); return false;">
1400        <div class="search-wrap">
1401          <input class="form-control" type="search" name="case_id" minlength="2" maxlength="30" placeholder="판례번호" aria-label="판례 검색">
1402          <button class="search-icon-btn" type="submit" aria-label="검색">
1403            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
1404              <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.415l-3.85-3.85zm-5.242.656a5 5 0 1 1 0-10.001 5 5 0 0 1 0 10z"/>
1405            </svg>
1406          </button>
1407        </div>
1408      </form>
1409      <div class="al-divider-short"></div>
1410      <div class="al-note-box">
1411        <p class="al-cases-note mt-2 mb-2">기출판례 사이트에 접속하여 최신판례를 확인하고 관련 기출문제를 푸는 것으로 새로운 쟁점에 대비할 수 있습니다.</p>
1412      </div>
1413    </div>
1414
1415    <div class="al-cases-timeline">
1416      <div class="al-timeline text-start mx-auto" style="max-width:840px;">
1417                <div class="al-timeline-item">
1418          <div class="al-time">2026.2</div>
1419          <div>
1420            <a href="/case/question/2021%ED%97%8C%EB%B0%94168" class="al-case-link">
1421              <div class="fw-semibold al-case-title mb-1">헌재 2026. 2. 26. 2021헌바168 [헌법불합치,합헌]</div>
1422              <div class="al-case-desc small line-clamp-3">가. 헌법재판소는 2009. 5. 28. 2007헌바22 결정에서 신고조항과 동일한 내용을 규정하였던 구 집시법 조항에 대하여 죄형법정주의의 명확성원칙에 위배되지 않고, 과잉금지원칙에 반하여 집회의 자유를 침해하지 않는다는 이유로 합헌 결정을 하였고, 이후에도 여러 차례 같은 취지의 합헌 결정을 하였다.
1423선례의 판단을 변경할 사정이 없으므로, 신고조항은 죄형법정주의의 명확성원칙에 위배되지 않고, 과잉금지원칙에 반하여 집회의 자유를 침해하지 않는다.
1424나. 각양각색의 옥외집회에 대하여 미리 개별적ㆍ구체적 사정을 고려하여 사전신고여부를 달리 정하기는 매우 어려우므로 포괄적으로 사전신고의무를 부과하는 방식으로 행정규제를 하는 것은 입법기술상 불가피하다. 그러나 객관적으로 타인의 기본권이나 공공의 안녕질서를 침해할 위험성이 매우 적고, 실제로도 평화롭게 집회가 진행ㆍ종료되어 위험성이 없다는 점이 확인되는 미신고 옥외집회의 경우까지 처벌조항이 예외 없이 형사처벌하도록 하는 것은 입법목적 달성에 필요한 범위를 넘는 것이며, 국가형벌권의 행사는 행정규제와 달리 개별적ㆍ구체적 사정을 고려하여 행위의 반가치성을 평가하는 과정을 반드시 거쳐야 한다는 점 등을 고려할 때, 처벌조항은 과잉금지원칙에 반하여 집회의 자유를 침해한다.
1425다. 처벌조항의 위헌성은 미신고 옥외집회를 처벌하는 것 자체에 있는 것이 아니라, 위와 같이 처벌의 필요성이 있다고 보기 어려운 옥외집회까지 일률적으로 처벌대상으로 삼는 데에 있다. 미신고 옥외집회 중 어떠한 형태의 집회에 대하여 처벌의 예외를 인정할지는 입법자가 논의를 거
1426쳐 결정할 사항이다. 따라서 처벌조항에 대하여 헌법불합치 결정을 선고하되, 입법자의 개선입법이 이루어질 때까지 계속 적용을 명하기로 한다. 입법자는 늦ì
1426–´ë„ 2027. 8. 31.까지는 개선입법을 이행하여야 하고, 그때까지 개선입법이 이루어지지 않으면 처벌조항은 2027. 9. 1.부터 효력을 상실한다. 
1427처벌조항에 대한 재판관 정형식, 재판관 정계선의 단순위헌의견 요지
1428옥외집회에 대한 신고의무는 행정절차적 협조의무로, 그 이행은 행정상 제재로도 충분히 확보 가능하다. 그런데 처벌조항이 신고의무의 이행을 관철시키기 위해 형벌의 제재를 가하는 것은 집회의 자유를 전체적으로 위축시킬 수 있고, 오로지 신고의무의 불이행에 대해 최장 징역 2년 또는 최고 200만 원의 벌금까지 부과할 수 있도록 하는 것은 그 죄질에 비해 지나치게 무겁다. 따라서 처벌조항은 과잉금지원칙 등에 반하여 집회의 자유를 침해한다. 처벌조항을 폐지한다고 하여도 극심한 법적 혼란이나 사회적 비용이 발생한다고 보기 어려우므로 단순위헌결정을 하여야 한다. 
1429신고조항에 대한 재판관 김복형, 재판관 마은혁의 반대의견 및 처벌조항에 대한 재판관 김복형, 재판관 마은혁의 단순위헌의견 요지
1430심판대상조항이 집시법 제15조의 특정 목적 집회를 제외한 모든 옥외집회에 대하여 예외 없이 일률적으로 사전신고의무를 부과하고, 신고의무 불이행에 대해 역시 예외 없이 형벌로 제재하는 것은 집회의 자유를 침해하므로 심판대상조항에 대하여 모두 단순위헌결정을 하여야 한다.
1431처벌조항에 대한 재판관 조한창의 반대의견 요지
1432신고의무 불이행을 형벌로 의율할 것인지는 일차적으로 입법자의 재량에 맡겨져 있다. 형사처벌보다 가벼운 행정상 제재만으로 입법목적을 달성할 수 있을지 여부가 불분명하고, 다양한 옥외집회의 개별적ㆍ구체적 사정을 고려하여 처벌의 예외를 규정하는 것은 입법기술상 불가능하거나 현저히 곤란하므로 신고조항 위반을 형벌로 의율하여 일반예방적 효과를 거두고자 하는 처벌조항은 책임과 형벌 간의 비례원칙에 반하여 집회의 자유를 침해하지 않는다.
1433집시법 제22조 제2항은 ‘해산된 정당의 목적을 달성하기 위한 집회’ 등의 주최자를 미신고 옥외집회의 주최자와 동일한 법정형으로 처벌하나, 보호법익 등을 고려할 때 미신고 옥외집회 주최행위가 다른 집회들의 주최행위보다 반드시 위험성이 낮다고만 할 수는 없다. 또한 처벌조항은 법정형의 상한만을 정하고 있으므로 구체적인 사안에서 법관이 적절한 선고형을 정할 수 있다. 따라서 처벌조항은 형벌체계상의 균형을 상실하여 평등원칙에 반하지 않는다.</div>
1434            </a>
1435          </div>
1436        </div>
1437                <div class="al-timeline-item">
1438          <div class="al-time">2026.1</div>
1439          <div>
1440            <a href="/case/question/2023%EB%8F%8418308" class="al-case-link">
1441              <div class="fw-semibold al-case-title mb-1">[대판 2026. 1. 29., 2023도18308]</div>
1442              <div class="al-case-desc small line-clamp-3">형법 제113조 제1항에서 말하는 외교상 기밀이란, 외국과의 관계에서 국가가 보전하여 간직해야 할 기밀로서 외교정책상 외국에 대하여 비밀로 하거나 확인되지 아니함이 대한민국의 이익이 되는 모든 정보자료를 말하는 것으로서, ‘언론매체나 정보통신망 등을 통해 외국에 이미 널리 알려져 있는 사항으로서 이를 비밀로 하거나 확인되지 아니함이 외교정책상의 이익이 된다고 할 수 없는 것’에 속하지 아니한 것이어야 하고, 또 그 내용이 누설되는 경우 대한민국의 대외적 안전과 지위에 위험을 초래할 우려가 있어 기밀로서 보호할 실질가치를 갖춘 것이어야 한다.</div>
1443            </a>
1444          </div>
1445        </div>
1446                <div class="al-timeline-item">
1447          <div class="al-time">2026.1</div>
1448          <div>
1449            <a href="/case/question/2024%EB%91%9060701" class="al-case-link">
1450              <div class="fw-semibold al-case-title mb-1">[대판 2026. 1. 29., 2024두60701]</div>
1451              <div class="al-case-desc small line-clamp-3">[1] 행정권한의 위임은 행정관청이 법률에 따라 특정한 권한을 다른 행정관청에 이전하여 수임관청의 권한으로 행사하도록 하는 것으로서 권한의 법적인 귀속을 변경하는 것이므로, 법률이 위임을 허용하고 있는 경우에 한하여 인정된다. 이에 반하여, 행정권한의 내부 위임은 법률이 위임을 허용하고 있지 않은 경우에도 행정관청의 내부적인 사무처리의 편의를 도모하기 위하여 그의 보조기관 또는 하급행정관청으로 하여금 그의 권한을 사실상 행사하게 하는 것이다. 그러므로 권한 위임의 경우에는 수임관청이 자기의 이름으로 ê·¸ 권한행사를 할 수 있지만, 내부 위임의 경우 수임관청은 위임관청의 이름으로만 ê·¸ 권한을 행사할 수 있을 뿐 자기의 이름으로는 ê·¸ 권한을 행사할 수 없다. [2] 교육서비스업을 영위하는 甲이 고용노동부 소관 보조사업인 ‘청년 디지털 일자리 사업’ 위탁운영기관인 乙 주식회사와 위 사업 지원 협약을 체결하고 청년들을 채용하여 乙 회사로부터 지원금을 지급받았는데, 甲이 참여청년들에게 ‘수행업무 허위작성, 사전근로, 퇴직사실 은닉, 페이백’을 하였다는 이유로 乙 회사가 보조금 관리에 관한 법률(이하 ‘보ì
1451¡°ê¸ˆë²•’이라 한다) 제33조에 따라 甲에게 지원금 반환명령을 하자, 관할 지방고용노동청장이 甲에게 보조금법 제31조의2 제2항 제1호, 제33조의2 제1항 제2호에 따라 5년간 보조금 지급을 제한하고 제재부가금을 부과하는 처분을 한 사안에서, 보조금법 제31조의2 제2항 제1호, 제33조의2 제1항 본문 제2호에 따르면, 고용노동부 소관 보조사업 또는 간접보조사업에 관한 보조금 지급 제한처분 및 제재부가금 부과처분 권한은 ‘중앙관서의 장’인 고용노동부장관에게 있는 점, 보조금법 제38ì¡°, 구 보조금 관리에 관한 법률 시행령(2024. 11. 5. 대통령령 제34979호로 개정되기 전의 것) 제17ì¡° 각 호 등은 보조금 지급 제한처분 및 제재부가금 부과처분 권한을 지방고용노동청장 또는 ê·¸ 지청장에게 위임할 수 있는 법령상 근거가 될 수 없고, 달리 고용노동부장관이 지방고용노동청장 또는 ê·¸ 지청장에게 그러한 권한을 위임하는 것을 허용하는 법령상 근거를 발견할 수 없는 점, 고용노동부훈령인 ‘고용노동분야 국고보조사업 관리규정’ 제44ì¡° 제1항 제2호, 제47ì¡° 제1항이 지방고용노동청장 또는 ê·¸ 지청장을 보조금 지급 제한처분 및 제재부가금 부과처분의 주체로 규정하고 있더라도, ê·¸ 의미가 ‘행정권한의 위임’에 해당한다고 ë³¼ 수 없고 ‘행정권한의 내부 위임’에 불과하다고 보아야 하는 점, 행정권한의 위임 없이 내부 위임만 이루어진 위임관청의 권한을 수임관청이 자기의 이름으로 행사하는 행위는 처분권한의 귀속 주체를 정하고 있는 처분의 근거 법률을 위반한 것으로서 위법한 점, 특별지방행정기관이 내부 위임된 것에 불과한 중앙행정기관의 권한을 자기의 이름으로 행사하는 행위가 처분권한의 귀속 주체를 정하고 있는 처분의 근거 법률을 위반한 것임은 다른 행정관청의 경우와 마찬가지인 점을 종합하면, 위 처분에 대한 권한이 고용노동부장관에게 있음에도 지방고용노동청장이 자기의 이름으로 한 위 처분은 권한 없는 자에 의한 것으로서 위법하다고 본 원심판단을 정당하다고 한 사례.</div>
1452            </a>
1453          </div>
1454        </div>
1455                <div class="al-timeline-item">
1456          <div class="al-time">2026.1</div>
1457          <div>
1458            <a href="/case/question/2025%EB%8F%8415970" class="al-case-link">
1459              <div class="fw-semibold al-case-title mb-1">[대판 2026. 1. 29., 2025도15970]</div>
1460              <div class="al-case-desc small line-clamp-3">형의 실효 등에 관한 법률(이하 ‘형실효법’이라 한다) 제7조 제1항은 &quot;수형인이 자격정지 이상의 형을 받지 아니하고 형의 집행을 종료하거나 그 집행이 면제된 날부터 다음 각 호의 구분에 따른 기간이 경과한 때에 그 형은 실효된다.&quot;라고 정하고, 같은 항 제2호에서 &quot;3년 이하의 징역·금고형: 5년&quot;으로 정하고 있다. 위 규정에 따라 형이 실효된 경우에는 그저 형의 선고에 따른 법적 효과가 장래에 향하여 소멸된다는 것일 뿐, 형의 선고가 있었다는 기왕의 사실 자체의 모든 효과까지 소멸한다는 것은 아니다.  한편 형법 제35조 제1항, 제2항의 누범조항은 금고 이상의 형을 선고받아 그 집행이 종료되거나 면제된 후 3년 내에 금고 이상에 해당하는 죄를 지은 경우를 누범으로 규정하고, 그 죄에 대하여 정한 형의 장기의 2배까지 가중하도록 하고 있다. 누범을 가중처벌하는 것은 범죄인이 전범에 대한 형벌에 의하여 주어진 경고기능을 무시하고 후범의 실현을 통하여 범죄추진력이 보다 강화되어 행위책임이 가중되기 때문이고, 나아가 재범예방이라는 형사정책적 목적을 달성하기 위한 것이다. 이와 같이 형의 집행 종료나 면제 이후 일정기간이 지나기 전에 죄를 범한 경우 가중처벌이 필요하다는 입법적 결단에 따라 누범 규정을 두고 있는 이상, 시간의 경과에 따라 누범기간 적용의 기준이 되는 형이 실효되었다는 이유로 누범에 해당되지 않는다고 보기는 어렵다. 따라서 일단 금고 이상의 형을 선고받아 그 집행이 종료되거나 면제된 후 3년 내에 금고 이상에 해당하는 죄를 범한 이상, 그 후 그 형이 형의 실효에 관한 기준 등을 정함으로써 전과자의 정상적인 사회복귀를 보장함을 목적으로 하는 형실효법 제7조에 따라 실효되었다 하더라도 이는 형법 제35조 제1항에서 정한 누범사유에는 여전히 해당한다고 보아야 한다.</div>
1461            </a>
1462          </div>
1463        </div>
1464                <div class="al-timeline-item">
1465          <div class="al-time">2026.1</div>
1466          <div>
1467            <a href="/case/question/2023%ED%97%8C%EB%A7%881272" class="al-case-link">
1468              <div class="fw-semibold al-case-title mb-1">헌재 2026. 1. 29. 2023헌마1272 [기각]</div>
1469              <div class="al-case-desc small line-clamp-3"></div>
1470            </a>
1471          </div>
1472        </div>
1473              </div>
1474
1475      <div class="mt-2 text-center">
1476        <a href="/case/latest/1" class="small text-secondary text-decoration-none">최신판례 더보기 …</a>
1477      </div>
1478    </div>
1479  </section>
1480  
1481    <section class="my-5">
1482    <div class="al-home-duo mx-auto">
1483      <div class="row g-4">
1484        <div class="col-md-6">
1485                    <div class="al-home-panel">
1486            <h2 class="al-home-head"><a href="/notice" class="text-decoration-none">공지사항</a></h2>
1487            <hr class="al-home-head-hr">
1488            <ul class="al-home-list">
1489                            <li><a class="al-home-link" href="/notice/44">[알파로 형법 OX] 법원직9급 2026년 문제추가</a></li>
1490                            <li><a class="al-home-link" href="/notice/43">[알파로 형사소송법 OX] 법원직9급 2026년 문제추가</a></li>
1491                            <li><a class="al-home-link" href="/notice/42">[알파로 행정법 OX] 국회직8급 2026년 문제추가</a></li>
1492                          </ul>
1493          </div>
1494                  </div>
1495        <div class="col-md-6">
1496                    <div class="al-home-panel">
1497            <h2 class="al-home-head"><a href="/faq" class="text-decoration-none">FAQ</a></h2>
1498            <hr class="al-home-head-hr">
1499            <ul class="al-home-list">
1500                            <li><a class="al-home-link" href="/faq/18">각론은 빼고 풀 수 있나요? 민법총칙 문제만 넣고 풀고 싶어요.</a></li>
1501                            <li><a class="al-home-link" href="/faq/17">틀린문제 혹은 즐겨찾기한 문제만으로 문제를 풀 수 있는 방법이 있나요?</a></li>
1502                            <li><a class="al-home-link" href="/faq/16">틀린문제나 즐겨찾기한 문제를 파일 형태로 다운받을 수 없을까요?</a></li>
1503                          </ul>
1504          </div>
1505                  </div>
1506      </div>
1507    </div>
1508  </section>
1509  
1510</div>
1511	<footer class="footer mt-auto py-1 bg-body-tertiary">
1512
1513		<div class="container">
1514			<!-- Mobile sticky bar moved out of footer container to fixed bottom -->
1515			<div class="text-center f-copyright">
1516			© 2018 Ponster Inc.
1517			</div>
1518</div>
1519</footer>
1520
1521
1522
1523
1524<!-- Modal -->
1525	<div class="modal fade" id="iDownloadModal" tabindex="-1" aria-labelledby="downloadModalLabel" aria-hidden="true">
1526		<div class="modal-dialog">
1527			<div class="modal-content">
1528				<div class="modal-header">
1529					<h1 class="modal-title fs-5" id="iDownloadModalLabel"><b>알파로 OX 앱 다운로드</b></h1>
1530					<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
1531				</div>
1532				<div class="modal-body">
1533					<div class="container">
1534						<div class="d-grid gap-2" style="place-content: center;">
1535							<div><a href="https://play.google.com/store/apps/collection/cluster?gsr=SltqGG1MOHkzaHV0QXhmREhKMEdHWDhwa3c9PbICPgohCh1rci5wb25zdGVyLmFscGhhbGF3LmNpdmlscHJvYxAHEhcIARITNzk3MTA4OTQ3MDIyMTQ0ODc3NBgA:S:ANO1ljL7EZc" id="GooglePlay_url" target="_blank" rel="noopener"><img src="/assets/img/googleplay_download_badge_280.png" width="280px" alt="구글플레이스í
1535† ì–´"/></a></div>
1536							<div><a href="https://apps.apple.com/kr/developer/seungyoung-hong/id1355483812?see-all=i-phone-apps" id="AppleAppStore_url" target="_blank" rel="noopener"><img src="/assets/img/appstore_download_badge.svg" width="280px" alt="앱스토어"/></a></div>
1537						</div>
1538					</div>
1539				</div>
1540				<div class="modal-footer">
1541
1542				</div>
1543			</div>
1544		</div>
1545</div>
1546
1547
1548</body>
1549
1550</html>
1551</body>
1552</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.